From f64fa43c5b0d09878c9bfe561ab9bc71c87e8e29 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 21 Jan 2018 15:47:50 +0100 Subject: [PATCH] ubifs: Add option to create UBI FS version 4 on empty UBI volume Instead of creating an ubifs file system with format version 5 by default on empty UBI volumes add a compile option to create an older ubi with file system format version 4 instated. This allows it to be mount as a volume on kernel versions < 4.10, which does not support format version 5. We saw that some people can not access their older data when they downgraded from kernel 4.14 to kernel 4.9 to prevent this this option would help. Signed-off-by: Hauke Mehrtens --- fs/ubifs/Kconfig | 13 +++++++++++++ fs/ubifs/sb.c | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/fs/ubifs/Kconfig b/fs/ubifs/Kconfig index 69932bcfa920..ffa0b5408854 100644 --- a/fs/ubifs/Kconfig +++ b/fs/ubifs/Kconfig @@ -85,6 +85,19 @@ config UBIFS_FS_SECURITY If you are not using a security module, say N. +config UBIFS_FS_FORMAT4 + bool "Use file system format version 4 for new file systems" + depends on UBIFS_FS + help + Instead of creating new file systems with the new ubifs file + system version 5, use the old format version 4 for implicitly + by the driver created file systems on an empty UBI volume. This + makes it possible to mount these file systems also with kernel + versions before 4.10. The driver will still support file system + format version 5 for ubifs file systems created with version 5. + + If you are unsure, say N. + config UBIFS_FS_AUTHENTICATION bool "UBIFS authentication support" select KEYS diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index a551eb3e9b89..30ee1db75485 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c @@ -175,7 +175,9 @@ static int create_default_filesystem(struct ubifs_info *c) tmp64 = (long long)max_buds * c->leb_size; if (big_lpt) sup_flags |= UBIFS_FLG_BIGLPT; +#ifndef CONFIG_UBIFS_FS_FORMAT4 sup_flags |= UBIFS_FLG_DOUBLE_HASH; +#endif if (ubifs_authenticated(c)) { sup_flags |= UBIFS_FLG_AUTHENTICATION; @@ -201,7 +203,11 @@ static int create_default_filesystem(struct ubifs_info *c) sup->jhead_cnt = cpu_to_le32(DEFAULT_JHEADS_CNT); sup->fanout = cpu_to_le32(DEFAULT_FANOUT); sup->lsave_cnt = cpu_to_le32(c->lsave_cnt); +#ifdef CONFIG_UBIFS_FS_FORMAT4 + sup->fmt_version = cpu_to_le32(4); +#else sup->fmt_version = cpu_to_le32(UBIFS_FORMAT_VERSION); +#endif sup->time_gran = cpu_to_le32(DEFAULT_TIME_GRAN); if (c->mount_opts.override_compr) sup->default_compr = cpu_to_le16(c->mount_opts.compr_type); -- 2.17.0