diff options
author | Felix Fietkau <nbd@nbd.name> | 2016-09-08 12:02:08 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2016-09-08 13:05:57 +0200 |
commit | 4abf9de460253771fabef2b2cdf5d7a8b457bd1d (patch) | |
tree | faf9138e0595d68320c8a2a6e38fcfe50d00acd6 /libfstools/overlay.c | |
parent | d40e03eb5fbfd8658dd30c09af0f81d235182996 (diff) | |
download | fstools-4abf9de460253771fabef2b2cdf5d7a8b457bd1d.tar.gz |
libfstools: add f2fs filesystem type and simplify fs type code
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'libfstools/overlay.c')
-rw-r--r-- | libfstools/overlay.c | 63 |
1 files changed, 28 insertions, 35 deletions
diff --git a/libfstools/overlay.c b/libfstools/overlay.c index f68065e..5215ff3 100644 --- a/libfstools/overlay.c +++ b/libfstools/overlay.c @@ -192,18 +192,31 @@ handle_whiteout(const char *dir) return 0; } +static char *overlay_fs_name(int type) +{ + switch (type) { + case FS_F2FS: + return "f2fs"; + case FS_UBIFS: + return "ubifs"; + case FS_JFFS2: + default: + return "jffs2"; + } +} + int jffs2_switch(struct volume *v) { char *mp; - int ret = -1; + int type; if (find_overlay_mount("overlayfs:/tmp/root")) return -1; if (find_filesystem("overlay")) { ULOG_ERR("overlayfs not supported by kernel\n"); - return ret; + return -1; } volume_init(v); @@ -213,44 +226,32 @@ jffs2_switch(struct volume *v) return -1; } - switch (volume_identify(v)) { + type = volume_identify(v); + switch (type) { case FS_NONE: ULOG_ERR("no jffs2 marker found\n"); /* fall through */ case FS_DEADCODE: - ret = switch2jffs(v); - if (!ret) { - ULOG_INFO("performing overlay whiteout\n"); - umount2("/tmp/root", MNT_DETACH); - foreachdir("/overlay/", handle_whiteout); - } - break; + if (switch2jffs(v)) + return -1; - case FS_JFFS2: - ret = overlay_mount(v, "jffs2"); - if (ret) - break; - if (mount_move("/tmp", "", "/overlay") || fopivot("/overlay", "/rom")) { - ULOG_ERR("switching to jffs2 failed\n"); - ret = -1; - } + ULOG_INFO("performing overlay whiteout\n"); + umount2("/tmp/root", MNT_DETACH); + foreachdir("/overlay/", handle_whiteout); break; + case FS_F2FS: case FS_UBIFS: - ret = overlay_mount(v, "ubifs"); - if (ret) - break; + if (overlay_mount(v, overlay_fs_name(type))) + return -1; if (mount_move("/tmp", "", "/overlay") || fopivot("/overlay", "/rom")) { - ULOG_ERR("switching to ubifs failed\n"); - ret = -1; + ULOG_ERR("switching to jffs2 failed\n"); + return -1; } break; } - if (ret) - return ret; - sync(); fs_state_set("/overlay", FS_STATE_READY); return 0; @@ -258,21 +259,13 @@ jffs2_switch(struct volume *v) static int overlay_mount_fs(struct volume *v) { - char *fstype; + char *fstype = overlay_fs_name(volume_identify(v)); if (mkdir("/tmp/overlay", 0755)) { ULOG_ERR("failed to mkdir /tmp/overlay: %s\n", strerror(errno)); return -1; } - fstype = "jffs2"; - - switch (volume_identify(v)) { - case FS_UBIFS: - fstype = "ubifs"; - break; - } - if (mount(v->blk, "/tmp/overlay", fstype, MS_NOATIME, NULL)) { ULOG_ERR("failed to mount -t %s %s /tmp/overlay: %s\n", fstype, v->blk, strerror(errno)); |