summaryrefslogtreecommitdiffstats
path: root/roots.cpp
diff options
context:
space:
mode:
authorJohan Harvyl <johan.harvyl@sonymobile.com>2016-08-15 20:03:37 +0200
committerandroid-build-merger <android-build-merger@google.com>2016-08-15 20:03:37 +0200
commit2f5cfdbb9d337cec54eb7cccafb4b5e20457c013 (patch)
tree14476be673a6c40ed07f3590213f1e09c0e1dcd4 /roots.cpp
parentMerge "adb headers now refer to openssl headers." (diff)
parentMerge "Format formattable partitions if mount fails" (diff)
downloadandroid_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar.gz
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar.bz2
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar.lz
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar.xz
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.tar.zst
android_bootable_recovery-2f5cfdbb9d337cec54eb7cccafb4b5e20457c013.zip
Diffstat (limited to 'roots.cpp')
-rw-r--r--roots.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/roots.cpp b/roots.cpp
index 2fec9ae9d..49369475b 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -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;
}