Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f04f72c authored by Jaegeuk Kim's avatar Jaegeuk Kim Committed by Wei Wang
Browse files

init/reboot: call MNT_FORCE at the last umount(2)



The last one will avoid errors=panic in ext4.

Test: Build
Bug: 63981945
Bug: 65481582
Change-Id: I9c86afcce441767e24fc43668ab1ff6230155a9f
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@google.com>
parent 142303b9
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -86,8 +86,8 @@ class MountEntry {
          mnt_type_(entry.mnt_type),
          mnt_type_(entry.mnt_type),
          mnt_opts_(entry.mnt_opts) {}
          mnt_opts_(entry.mnt_opts) {}


    bool Umount() {
    bool Umount(bool force) {
        int r = umount2(mnt_dir_.c_str(), 0);
        int r = umount2(mnt_dir_.c_str(), force ? MNT_FORCE : 0);
        if (r == 0) {
        if (r == 0) {
            LOG(INFO) << "umounted " << mnt_fsname_ << ":" << mnt_dir_ << " opts " << mnt_opts_;
            LOG(INFO) << "umounted " << mnt_fsname_ << ":" << mnt_dir_ << " opts " << mnt_opts_;
            return true;
            return true;
@@ -280,13 +280,14 @@ static UmountStat UmountPartitions(std::chrono::milliseconds timeout) {
        bool unmount_done = true;
        bool unmount_done = true;
        if (emulated_devices.size() > 0) {
        if (emulated_devices.size() > 0) {
            unmount_done = std::all_of(emulated_devices.begin(), emulated_devices.end(),
            unmount_done = std::all_of(emulated_devices.begin(), emulated_devices.end(),
                                       [](auto& entry) { return entry.Umount(); });
                                       [](auto& entry) { return entry.Umount(false); });
            if (unmount_done) {
            if (unmount_done) {
                sync();
                sync();
            }
            }
        }
        }
        unmount_done = std::all_of(block_devices.begin(), block_devices.end(),
        unmount_done =
                                   [](auto& entry) { return entry.Umount(); }) &&
            std::all_of(block_devices.begin(), block_devices.end(),
                        [&timeout](auto& entry) { return entry.Umount(timeout == 0ms); }) &&
            unmount_done;
            unmount_done;
        if (unmount_done) {
        if (unmount_done) {
            return UMOUNT_STAT_SUCCESS;
            return UMOUNT_STAT_SUCCESS;