Loading adb/daemon/remount_service.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -97,8 +97,12 @@ static std::string find_mount(const char* dir, bool is_root) { } } bool dev_is_overlayfs(const std::string& dev) { return (dev == "overlay") || (dev == "overlayfs"); } bool make_block_device_writable(const std::string& dev) { if ((dev == "overlay") || (dev == "overlayfs")) return true; if (dev_is_overlayfs(dev)) return true; int fd = unix_open(dev.c_str(), O_RDONLY | O_CLOEXEC); if (fd == -1) { return false; Loading Loading @@ -161,6 +165,10 @@ static bool remount_partition(int fd, const char* dir) { return true; } bool is_root = strcmp(dir, "/") == 0; if (is_root && dev_is_overlayfs(find_mount("/system", false))) { dir = "/system"; is_root = false; } std::string dev = find_mount(dir, is_root); if (is_root && dev.empty()) { // The fstab entry will be /system if the device switched roots during Loading fs_mgr/tests/adb-remount-test.sh +2 −3 Original line number Diff line number Diff line Loading @@ -274,9 +274,8 @@ H=`echo "${D}" | head -1` && echo "${D}" | grep "^overlay .* /system\$" >/dev/null || die "overlay takeover after remount" !(adb_sh grep "^overlay " /proc/mounts </dev/null | grep " overlay ro,") && !(adb_sh grep " rw," /proc/mounts </dev/null | skip_administrative_mounts) || die "remount overlayfs missed a spot" !(adb_sh grep " rw," /proc/mounts </dev/null | skip_administrative_mounts) || die "remount overlayfs missed a spot (ro)" adb_su "sed -n '1,/overlay \\/system/p' /proc/mounts" </dev/null | skip_administrative_mounts | Loading Loading
adb/daemon/remount_service.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -97,8 +97,12 @@ static std::string find_mount(const char* dir, bool is_root) { } } bool dev_is_overlayfs(const std::string& dev) { return (dev == "overlay") || (dev == "overlayfs"); } bool make_block_device_writable(const std::string& dev) { if ((dev == "overlay") || (dev == "overlayfs")) return true; if (dev_is_overlayfs(dev)) return true; int fd = unix_open(dev.c_str(), O_RDONLY | O_CLOEXEC); if (fd == -1) { return false; Loading Loading @@ -161,6 +165,10 @@ static bool remount_partition(int fd, const char* dir) { return true; } bool is_root = strcmp(dir, "/") == 0; if (is_root && dev_is_overlayfs(find_mount("/system", false))) { dir = "/system"; is_root = false; } std::string dev = find_mount(dir, is_root); if (is_root && dev.empty()) { // The fstab entry will be /system if the device switched roots during Loading
fs_mgr/tests/adb-remount-test.sh +2 −3 Original line number Diff line number Diff line Loading @@ -274,9 +274,8 @@ H=`echo "${D}" | head -1` && echo "${D}" | grep "^overlay .* /system\$" >/dev/null || die "overlay takeover after remount" !(adb_sh grep "^overlay " /proc/mounts </dev/null | grep " overlay ro,") && !(adb_sh grep " rw," /proc/mounts </dev/null | skip_administrative_mounts) || die "remount overlayfs missed a spot" !(adb_sh grep " rw," /proc/mounts </dev/null | skip_administrative_mounts) || die "remount overlayfs missed a spot (ro)" adb_su "sed -n '1,/overlay \\/system/p' /proc/mounts" </dev/null | skip_administrative_mounts | Loading