kernel: Create UBIFS v5 volume

In commit 87b35c16ad ("kernel: ubifs: create use file system format 4
by default") we changed the default UBIFS version used when the kernel
creates a new volume from 5 to 4. UBIFS v5 was added in kernel 4.10 and
only kernel 4.10 and later can read it.
We changed the kernel to create version 4 volumes also on more recent
kernel versions to make it possible to downgrade to an OpenWrt version
with kernel 4.9, the upgrade still works. This is probably not needed
any more and we can remove this patch.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Hauke Mehrtens 2020-08-08 17:28:42 +02:00
parent a5a0b3f1d0
commit 2e8785d68c
6 changed files with 0 additions and 195 deletions

View File

@ -5151,7 +5151,6 @@ CONFIG_TTY=y
# CONFIG_UACCESS_WITH_MEMCPY is not set
# CONFIG_UBIFS_ATIME_SUPPORT is not set
# CONFIG_UBIFS_FS_ENCRYPTION is not set
CONFIG_UBIFS_FS_FORMAT4=y
# CONFIG_UBIFS_FS_SECURITY is not set
# CONFIG_UBSAN is not set
# CONFIG_UCB1400_CORE is not set

View File

@ -5425,7 +5425,6 @@ CONFIG_TTY=y
# CONFIG_UACCESS_WITH_MEMCPY is not set
# CONFIG_UBIFS_ATIME_SUPPORT is not set
# CONFIG_UBIFS_FS_ENCRYPTION is not set
CONFIG_UBIFS_FS_FORMAT4=y
# CONFIG_UBIFS_FS_SECURITY is not set
# CONFIG_UBIFS_FS_XATTR is not set
# CONFIG_UBSAN is not set

View File

@ -5787,7 +5787,6 @@ CONFIG_TTY=y
# CONFIG_UBIFS_ATIME_SUPPORT is not set
# CONFIG_UBIFS_FS_AUTHENTICATION is not set
# CONFIG_UBIFS_FS_ENCRYPTION is not set
CONFIG_UBIFS_FS_FORMAT4=y
# CONFIG_UBIFS_FS_SECURITY is not set
# CONFIG_UBIFS_FS_XATTR is not set
# CONFIG_UBSAN is not set

View File

@ -1,63 +0,0 @@
From 93c33e6a7f3b0aef99d02252e6232a3d8b80f2d5 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 21 Jan 2018 15:47:50 +0100
Subject: 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 <hauke@hauke-m.de>
---
fs/ubifs/Kconfig | 13 +++++++++++++
fs/ubifs/sb.c | 6 ++++++
2 files changed, 19 insertions(+)
--- a/fs/ubifs/Kconfig
+++ b/fs/ubifs/Kconfig
@@ -74,3 +74,16 @@ config UBIFS_FS_SECURITY
the extended attribute support in advance.
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.
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
@@ -176,7 +176,9 @@ static int create_default_filesystem(str
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
sup->ch.node_type = UBIFS_SB_NODE;
sup->key_hash = UBIFS_KEY_HASH_R5;
@@ -192,7 +194,11 @@ static int create_default_filesystem(str
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);

View File

@ -1,63 +0,0 @@
From 93c33e6a7f3b0aef99d02252e6232a3d8b80f2d5 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 21 Jan 2018 15:47:50 +0100
Subject: 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 <hauke@hauke-m.de>
---
fs/ubifs/Kconfig | 13 +++++++++++++
fs/ubifs/sb.c | 6 ++++++
2 files changed, 19 insertions(+)
--- a/fs/ubifs/Kconfig
+++ b/fs/ubifs/Kconfig
@@ -85,3 +85,16 @@ config UBIFS_FS_SECURITY
the extended attribute support in advance.
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.
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
@@ -176,7 +176,9 @@ static int create_default_filesystem(str
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
sup->ch.node_type = UBIFS_SB_NODE;
sup->key_hash = UBIFS_KEY_HASH_R5;
@@ -192,7 +194,11 @@ static int create_default_filesystem(str
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);

View File

@ -1,66 +0,0 @@
From 93c33e6a7f3b0aef99d02252e6232a3d8b80f2d5 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 21 Jan 2018 15:47:50 +0100
Subject: 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 <hauke@hauke-m.de>
---
fs/ubifs/Kconfig | 13 +++++++++++++
fs/ubifs/sb.c | 6 ++++++
2 files changed, 19 insertions(+)
--- 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
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
@@ -175,7 +175,9 @@ static int create_default_filesystem(str
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(str
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);