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
This commit is contained in:
Johan Harvyl
2016-08-08 12:37:56 +02:00
committed by Johan Redestig
parent 8a4333f3b9
commit 29dd6b6c01
+14 -1
View File
@@ -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;
}