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

Commit e32254c1 authored by Xin Li's avatar Xin Li Committed by Gerrit Code Review
Browse files

Merge "Merge Android 14 QPR1" into main

parents 053e75b9 c1b0f4d6
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -700,6 +700,29 @@ static void SetReadAheadSize(const std::string& entry_block_device, off64_t size
    }
}

//
// Mechanism to allow fsck to be triggered by setting ro.preventative_fsck
// Introduced to address b/305658663
// If the property value is not equal to the flag file contents, trigger
// fsck and store the property value in the flag file
// If we want to trigger again, simply change the property value
//
static bool check_if_preventative_fsck_needed(const FstabEntry& entry) {
    const char* flag_file = "/metadata/vold/preventative_fsck";
    if (entry.mount_point != "/data") return false;

    // Don't error check - both default to empty string, which is OK
    std::string prop = android::base::GetProperty("ro.preventative_fsck", "");
    std::string flag;
    android::base::ReadFileToString(flag_file, &flag);
    if (prop == flag) return false;
    // fsck is run immediately, so assume it runs or there is some deeper problem
    if (!android::base::WriteStringToFile(prop, flag_file))
        PERROR << "Failed to write file " << flag_file;
    LINFO << "Run preventative fsck on /data";
    return true;
}

//
// Prepare the filesystem on the given block device to be mounted.
//
@@ -750,7 +773,7 @@ static int prepare_fs_for_mount(const std::string& blk_device, const FstabEntry&
        }
    }

    if (entry.fs_mgr_flags.check ||
    if (check_if_preventative_fsck_needed(entry) || entry.fs_mgr_flags.check ||
        (fs_stat & (FS_STAT_UNCLEAN_SHUTDOWN | FS_STAT_QUOTA_ENABLED))) {
        check_fs(blk_device, entry.fs_type, mount_point, &fs_stat);
    }