Merge "remount: Check device mapper to see if verity is already disabled"
diff --git a/fs_mgr/fs_mgr_remount.cpp b/fs_mgr/fs_mgr_remount.cpp
index c5567f9..3f14d6a 100644
--- a/fs_mgr/fs_mgr_remount.cpp
+++ b/fs_mgr/fs_mgr_remount.cpp
@@ -386,16 +386,15 @@
     }
 
     // Now remount!
-    if (::mount(blk_device.c_str(), mount_point.c_str(), entry.fs_type.c_str(), MS_REMOUNT,
-                nullptr) == 0) {
-        return true;
-    }
-    if ((errno == EINVAL) && (mount_point != entry.mount_point)) {
-        mount_point = entry.mount_point;
-        if (::mount(blk_device.c_str(), mount_point.c_str(), entry.fs_type.c_str(), MS_REMOUNT,
+    for (const auto& mnt_point : {mount_point, entry.mount_point}) {
+        if (::mount(blk_device.c_str(), mnt_point.c_str(), entry.fs_type.c_str(), MS_REMOUNT,
                     nullptr) == 0) {
+            LOG(INFO) << "Remounted " << mnt_point << " as RW";
             return true;
         }
+        if (errno != EINVAL || mount_point == entry.mount_point) {
+            break;
+        }
     }
 
     PLOG(ERROR) << "failed to remount partition dev:" << blk_device << " mnt:" << mount_point;
@@ -484,8 +483,16 @@
         return false;
     }
     if (verity_result.want_reboot) {
-        check_result->reboot_later = true;
-        check_result->disabled_verity = true;
+        // TODO(b/259207493): emulator has incorrect androidboot.veritymode value, causing
+        // .want_reboot to always be true. In order to workaround this, double check device mapper
+        // to see if verity is already disabled.
+        for (const auto& partition : partitions) {
+            if (fs_mgr_is_verity_enabled(partition)) {
+                check_result->reboot_later = true;
+                check_result->disabled_verity = true;
+                break;
+            }
+        }
     }
 
     // Optionally setup overlayfs backing.
@@ -660,10 +667,10 @@
     } else if (check_result.setup_overlayfs) {
         LOG(INFO) << "Overlayfs enabled.";
     }
-    if (remount_success) {
-        LOG(INFO) << "remount succeeded";
-    } else {
-        LOG(ERROR) << "remount failed";
+    if (remount_success && check_result.remounted_anything) {
+        LOG(INFO) << "Remount succeeded";
+    } else if (!remount_success) {
+        LOG(ERROR) << "Remount failed";
     }
     if (check_result.reboot_later) {
         if (auto_reboot) {