From bf141af6bee50fdb577bd6e238fb4a2f7ae8e5d1 Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim Date: Mon, 25 Sep 2017 10:55:39 -0700 Subject: [PATCH] init/reboot: call MNT_FORCE at the last umount(2) The last one will avoid errors=panic in ext4. Bug: 63981945 Bug: 65481582 Change-Id: I9c86afcce441767e24fc43668ab1ff6230155a9f Merged-In: I9c86afcce441767e24fc43668ab1ff6230155a9f Signed-off-by: Jaegeuk Kim (cherry picked from commit 0f04f72c2de2f5c42e62f23306bc106dddcdabb1) --- init/reboot.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/init/reboot.cpp b/init/reboot.cpp index 17e3576a7..5c7ddf185 100644 --- a/init/reboot.cpp +++ b/init/reboot.cpp @@ -84,8 +84,8 @@ class MountEntry { mnt_type_(entry.mnt_type), mnt_opts_(entry.mnt_opts) {} - bool Umount() { - int r = umount2(mnt_dir_.c_str(), 0); + bool Umount(bool force) { + int r = umount2(mnt_dir_.c_str(), force ? MNT_FORCE : 0); if (r == 0) { LOG(INFO) << "umounted " << mnt_fsname_ << ":" << mnt_dir_ << " opts " << mnt_opts_; return true; @@ -287,11 +287,11 @@ static UmountStat UmountPartitions(std::chrono::milliseconds timeout) { } if (emulated_devices.size() > 0 && std::all_of(emulated_devices.begin(), emulated_devices.end(), - [](auto& entry) { return entry.Umount(); })) { + [](auto& entry) { return entry.Umount(false); })) { sync(); } for (auto& entry : block_devices) { - entry.Umount(); + entry.Umount(timeout == 0ms); } retry++; std::this_thread::sleep_for(100ms);