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>
This commit is contained in:
parent
414ff7d98a
commit
7edc4f9454
|
@ -39,6 +39,7 @@ int vfat_identify(blkdev_t *dev)
|
|||
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 @@ int vfat_check(blkdev_t *dev)
|
|||
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 {
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue