vold: If a filesystem is read/only then restart the fscheck but don't make any changes

Signed-off-by: San Mehat <san@google.com>
diff --git a/vold/volmgr_vfat.c b/vold/volmgr_vfat.c
index 344a166..3c546b4 100644
--- a/vold/volmgr_vfat.c
+++ b/vold/volmgr_vfat.c
@@ -39,6 +39,7 @@
 int vfat_check(blkdev_t *dev)
 {
     int rc;
+    boolean rw = true;
 
 #if VFAT_DEBUG
     LOG_VOL("vfat_check(%d:%d):", dev->major, dev->minor);
@@ -50,47 +51,51 @@
         return 0;
     }
 
-#ifdef VERIFY_PASS
-    char *args[7];
-    args[0] = FSCK_MSDOS_PATH;
-    args[1] = "-v";
-    args[2] = "-V";
-    args[3] = "-w";
-    args[4] = "-p";
-    args[5] = blkdev_get_devpath(dev);
-    args[6] = NULL;
-    rc = logwrap(6, args);
-    free(args[5]);
-#else
-    char *args[6];
-    args[0] = FSCK_MSDOS_PATH;
-    args[1] = "-v";
-    args[2] = "-w";
-    args[3] = "-p";
-    args[4] = blkdev_get_devpath(dev);
-    args[5] = NULL;
-    rc = logwrap(5, args);
-    free(args[4]);
-#endif
+    do {
 
-    if (rc == 0) {
-        LOG_VOL("Filesystem check completed OK");
-        return 0;
-    } else if (rc == 1) {
-        LOG_VOL("Filesystem check failed (general failure)");
-        return -EINVAL;
-    } else if (rc == 2) {
-        LOG_VOL("Filesystem check failed (invalid usage)");
-        return -EIO;
-    } else if (rc == 4) {
-        LOG_VOL("Filesystem check completed (errors fixed)");
-    } else if (rc == 8) {
-        LOG_VOL("Filesystem check failed (not a FAT filesystem)");
-        return -ENODATA;
-    } else {
-        LOG_VOL("Filesystem check failed (unknown exit code %d)", rc);
-        return -EIO;
-    }
+        char *args[6];
+        args[0] = FSCK_MSDOS_PATH;
+        args[1] = "-v";
+
+        if (rw) {
+            args[2] = "-w";
+            args[3] = "-p";
+            args[4] = blkdev_get_devpath(dev);
+            args[5] = NULL;
+            rc = logwrap(5, args);
+            free(args[4]);
+        } else {
+            args[2] = "-n";
+            args[3] = blkdev_get_devpath(dev);
+            args[4] = NULL;
+            rc = logwrap(4, args);
+            free(args[3]);
+        }
+
+        if (rc == 0) {
+            LOG_VOL("Filesystem check completed OK");
+            return 0;
+        } else if (rc == 1) {
+            LOG_VOL("Filesystem check failed (general failure)");
+            return -EINVAL;
+        } else if (rc == 2) {
+            LOG_VOL("Filesystem check failed (invalid usage)");
+            return -EIO;
+        } else if (rc == 4) {
+            LOG_VOL("Filesystem check completed (errors fixed)");
+        } else if (rc == 6) {
+            LOG_VOL("Filesystem read-only - retrying check RO");
+            rw = false;
+            continue;
+        } else if (rc == 8) {
+            LOG_VOL("Filesystem check failed (not a FAT filesystem)");
+            return -ENODATA;
+        } else {
+            LOG_VOL("Filesystem check failed (unknown exit code %d)", rc);
+            return -EIO;
+        }
+    } while (0);
+
     return 0;
 }