diff options
author | Dan Pasanen <dan.pasanen@gmail.com> | 2015-01-13 21:25:26 -0600 |
---|---|---|
committer | Tom Marshall <tdm@cyngn.com> | 2015-11-25 15:35:47 -0800 |
commit | d644eb58fde7d39a416850af3caeb4cbce514ec8 (patch) | |
tree | 8a42e59be879186f543a96f49c929bb5796dd1db /updater | |
parent | 0176875fba9ceb5674dfd71108fb66fa53164791 (diff) | |
download | bootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.zip bootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.tar.gz bootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.tar.bz2 |
recovery: autodetect filesystem type
* Multiple fstab lines (supported in android) cause recovery to fail
to mount partitions if the fs type is not the same as the first
fstab entry. So when we attempt to find an fstab entry that matches
a path for an f2fs, ext4 or vfat type, check it against blkid's
determination of what filesystem type it is. If there is a discrepancy,
query fs_mgr for the next possible entry that matches that path until
either we find one that is good, or run out of fstab entries.
* Also attempt to autodetect the filesystem type for mounting from
update.zips.
Change-Id: Ib6f4535dd88ef714ae1ca6fb0ffae1c7dac0f7ce
Diffstat (limited to 'updater')
-rw-r--r-- | updater/Android.mk | 3 | ||||
-rw-r--r-- | updater/install.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/updater/Android.mk b/updater/Android.mk index 9f9da06..1ea1fb7 100644 --- a/updater/Android.mk +++ b/updater/Android.mk @@ -28,6 +28,9 @@ LOCAL_STATIC_LIBRARIES += \ libsparse_static \ libz +LOCAL_C_INCLUDES += external/e2fsprogs/lib +LOCAL_STATIC_LIBRARIES += libext2_blkid libext2_uuid + ifneq ($(BOARD_RECOVERY_BLDRMSG_OFFSET),) LOCAL_CFLAGS += -DBOARD_RECOVERY_BLDRMSG_OFFSET=$(BOARD_RECOVERY_BLDRMSG_OFFSET) endif diff --git a/updater/install.c b/updater/install.c index 8d569ff..43d5cfb 100644 --- a/updater/install.c +++ b/updater/install.c @@ -33,6 +33,7 @@ #include <sys/xattr.h> #include <linux/xattr.h> #include <inttypes.h> +#include <blkid/blkid.h> #include "bootloader.h" #include "applypatch/applypatch.h" @@ -167,6 +168,16 @@ Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) { } result = mount_point; } else { + char *detected_fs_type = blkid_get_tag_value(NULL, "TYPE", location); + if (detected_fs_type) { + uiPrintf(state, "detected filesystem %s for %s\n", + detected_fs_type, location); + fs_type = detected_fs_type; + } else { + uiPrintf(state, "could not detect filesystem for %s, assuming %s\n", + location, fs_type); + } + if (mount(location, mount_point, fs_type, MS_NOATIME | MS_NODEV | MS_NODIRATIME, has_mount_options ? mount_options : "") < 0) { |