From fab9f08ea56b8a1db2346690d7fb2ecbaf4dfe96 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Mon, 4 Feb 2019 14:59:16 -0800 Subject: [PATCH] fs_mgr: overlayfs: fs_mgr_overlay_setup true if already mounted fs_mgr_overlayfs_setup return false second time around if all are setup. It should report true if candidate list is all done. Test: adb-remount-test.sh Bug: 122602260 Change-Id: Ic9e16489e2c8ac4d3de91fcf8cfceedc23595e94 --- fs_mgr/fs_mgr_overlayfs.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fs_mgr/fs_mgr_overlayfs.cpp b/fs_mgr/fs_mgr_overlayfs.cpp index 0c2b3d3cb..b508b5648 100644 --- a/fs_mgr/fs_mgr_overlayfs.cpp +++ b/fs_mgr/fs_mgr_overlayfs.cpp @@ -328,6 +328,7 @@ bool fs_mgr_overlayfs_setup_dir(const std::string& dir, std::string* overlay, bo bool fs_mgr_overlayfs_setup_one(const std::string& overlay, const std::string& mount_point, bool* change) { auto ret = true; + if (fs_mgr_overlayfs_already_mounted(mount_point)) return ret; auto fsrec_mount_point = overlay + "/" + android::base::Basename(mount_point) + "/"; if (setfscreatecon(kOverlayfsFileContext)) { @@ -538,7 +539,10 @@ std::vector fs_mgr_candidate_list(Fstab* fstab, const char* mount_p std::vector mounts; auto verity = fs_mgr_overlayfs_verity_enabled_list(); for (auto& entry : *fstab) { - if (!fs_mgr_wants_overlayfs(&entry)) continue; + if (!fs_mgr_overlayfs_already_mounted(entry.mount_point) && + !fs_mgr_wants_overlayfs(&entry)) { + continue; + } std::string new_mount_point(fs_mgr_mount_point(entry.mount_point.c_str())); if (mount_point && (new_mount_point != mount_point)) continue; if (std::find(verity.begin(), verity.end(), android::base::Basename(new_mount_point)) != @@ -832,7 +836,10 @@ bool fs_mgr_overlayfs_mount_all(Fstab* fstab) { auto scratch_can_be_mounted = true; for (const auto& mount_point : fs_mgr_candidate_list(fstab)) { - if (fs_mgr_overlayfs_already_mounted(mount_point)) continue; + if (fs_mgr_overlayfs_already_mounted(mount_point)) { + ret = true; + continue; + } if (scratch_can_be_mounted) { scratch_can_be_mounted = false; auto scratch_device = fs_mgr_overlayfs_scratch_device();