Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0334b18 authored by San Mehat's avatar San Mehat Committed by Android Git Automerger
Browse files

am d8221d98: vold: vfat: Run up to 3 passes of the disk checker when the...

am d8221d98: vold: vfat: Run up to 3 passes of the disk checker when the checker indicates the FS has been modified. Also create LOST.DIR if it doesn\'t exist on mount.

Merge commit 'd8221d98'

* commit 'd8221d98':
  vold: vfat: Run up to 3 passes of the disk checker when the checker
parents a27bd2c7 d8221d98
Loading
Loading
Loading
Loading
+49 −22
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ int vfat_check(blkdev_t *dev)
        return 0;
    }

    int pass = 1;
    do {
        char *args[5];
        args[0] = FSCK_MSDOS_PATH;
        args[1] = "-p";
@@ -66,6 +68,15 @@ int vfat_check(blkdev_t *dev)
        } else if (rc == 2) {
            LOG_VOL("Filesystem check failed (not a FAT filesystem)");
            return -ENODATA;
        } else if (rc == 4) {
            if (pass++ <= 3) {
                LOG_VOL("Filesystem modified - rechecking (pass %d)",
                        pass);
                continue;
            } else {
                LOG_VOL("Failing check after too many rechecks");
                return -EIO;
            }
        } else if (rc == -11) {
            LOG_VOL("Filesystem check crashed");
            return -EIO;
@@ -73,6 +84,7 @@ int vfat_check(blkdev_t *dev)
            LOG_VOL("Filesystem check failed (unknown exit code %d)", rc);
            return -EIO;
        }
    } while (0);
    return 0;
}

@@ -113,6 +125,21 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
                   "utf8,uid=1000,gid=1015,fmask=702,dmask=702,shortname=mixed");
    }

    if (rc == 0) {
        char *lost_path;
        asprintf(&lost_path, "%s/LOST.DIR", vol->mount_point);
        if (access(lost_path, F_OK)) {
            /*
             * Create a LOST.DIR in the root so we have somewhere to put
             * lost cluster chains (fsck_msdos doesn't currently do this)
             */
            if (mkdir(lost_path, 0755)) {
                LOGE("Unable to create LOST.DIR (%s)", strerror(errno));
            }
        }
        free(lost_path);
    }

#if VFAT_DEBUG
    LOG_VOL("vfat_mount(%s, %d:%d): mount rc = %d", dev->major,k dev->minor,
            vol->mount_point, rc);