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

Commit 29dd6b6c authored by Johan Harvyl's avatar Johan Harvyl Committed by Johan Redestig
Browse files

Format formattable partitions if mount fails

If mount fails and the partition has the formattable flag set in fstab
it is formatted and another attempt at the mount is made.

Change-Id: I44edafac7d7ff663489072c66b7e210466316b14
parent 8a4333f3
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -102,7 +102,20 @@ int ensure_path_mounted_at(const char* path, const char* mount_point) {
    if (strcmp(v->fs_type, "ext4") == 0 ||
               strcmp(v->fs_type, "squashfs") == 0 ||
               strcmp(v->fs_type, "vfat") == 0) {
        if (mount(v->blk_device, mount_point, v->fs_type, v->flags, v->fs_options) == -1) {
        int result = mount(v->blk_device, mount_point, v->fs_type, v->flags, v->fs_options);
        if (result == -1 && fs_mgr_is_formattable(v)) {
            LOGE("failed to mount %s (%s), formatting ...\n",
                    mount_point, strerror(errno));
            bool crypt_footer = fs_mgr_is_encryptable(v) && !strcmp(v->key_loc, "footer");
            if (fs_mgr_do_format(v, crypt_footer) == 0) {
                result = mount(v->blk_device, mount_point, v->fs_type, v->flags, v->fs_options);
            } else {
                LOGE("failed to format %s (%s)\n", mount_point, strerror(errno));
                return -1;
            }
        }

        if (result == -1) {
            LOGE("failed to mount %s (%s)\n", mount_point, strerror(errno));
            return -1;
        }