fs/ext2: add support for ext2 rev0 and rev1
authorYann E. MORIN <yann.morin.1998@free.fr>
Thu, 11 Apr 2013 12:17:53 +0000 (12:17 +0000)
committerPeter Korsgaard <jacmet@sunsite.dk>
Fri, 12 Apr 2013 12:43:22 +0000 (14:43 +0200)
Some bootloaders have a buggy ext2 support, and require ext2 rev1
instead of the traditional ext2 rev0 that genext2fs produces.

tune2fs accepts only one '-O list' at a time, so we need to construct
a list of -O options.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
fs/ext2/Config.in
fs/ext2/ext2.mk
fs/ext2/genext2fs.sh

index c8320e281d41906b30db9e3e350323db09e5fff8..097242ef702f80f95089be0a212e21474035bd69 100644 (file)
@@ -6,12 +6,20 @@ config BR2_TARGET_ROOTFS_EXT2
 
 if BR2_TARGET_ROOTFS_EXT2
 
+config BR2_TARGET_ROOTFS_EXT2_2
+       bool
+
 choice
        bool "ext2/3/4 variant"
-       default BR2_TARGET_ROOTFS_EXT2_2
+       default BR2_TARGET_ROOTFS_EXT2_2r0
 
-config BR2_TARGET_ROOTFS_EXT2_2
-       bool "ext2"
+config BR2_TARGET_ROOTFS_EXT2_2r0
+       bool "ext2 (rev0)"
+       select BR2_TARGET_ROOTFS_EXT2_2
+
+config BR2_TARGET_ROOTFS_EXT2_2r1
+       bool "ext2 (rev1)"
+       select BR2_TARGET_ROOTFS_EXT2_2
 
 config BR2_TARGET_ROOTFS_EXT2_3
        bool "ext3"
@@ -27,6 +35,12 @@ config BR2_TARGET_ROOTFS_EXT2_GEN
        default 3 if BR2_TARGET_ROOTFS_EXT2_3
        default 4 if BR2_TARGET_ROOTFS_EXT2_4
 
+# All ext generations are revision 1, except ext2r0, which is revision 0
+config BR2_TARGET_ROOTFS_EXT2_REV
+    int
+    default 0   if BR2_TARGET_ROOTFS_EXT2_2r0
+    default 1   if !BR2_TARGET_ROOTFS_EXT2_2r0
+
 config BR2_TARGET_ROOTFS_EXT2_BLOCKS
        int "size in blocks (leave at 0 for auto calculation)"
        default 0
index ffb72575860202066924144291e01db3ad260dd5..d74f31e28a5e31434e8f3f8b20e639c92e1e9553 100644 (file)
@@ -20,7 +20,8 @@ endif
 
 ROOTFS_EXT2_DEPENDENCIES = host-genext2fs host-e2fsprogs
 
-EXT2_ENV = GEN=$(BR2_TARGET_ROOTFS_EXT2_GEN)
+EXT2_ENV  = GEN=$(BR2_TARGET_ROOTFS_EXT2_GEN)
+EXT2_ENV += REV=$(BR2_TARGET_ROOTFS_EXT2_REV)
 
 define ROOTFS_EXT2_CMD
        PATH=$(TARGET_PATH) $(EXT2_ENV) fs/ext2/genext2fs.sh -d $(TARGET_DIR) $(EXT2_OPTS) $@
index c2049f56c3226e892f2c98fc16855a6105a4d9fb..76f454c3cc4b5a0753feb303299944ec290878ad 100755 (executable)
@@ -78,15 +78,21 @@ e2tunefsck() {
 }
 
 # Check we know what generation to generate
-case "${GEN}" in
-    2|3|4)
+case "${GEN}:${REV}" in
+    2:0|2:1|3:1|4:1)
        ;;
     *)
-       printf "%s: unknown ext generation to generate\n" "${0##*/}" >&2
+       printf "%s: unknown ext generation '%s' and/or revision '%s'\n" \
+              "${0##*/}" "${GEN}" "${REV}" >&2
        exit 1
        ;;
 esac
 
+# Upgrade to rev1 if needed
+if [ ${REV} -ge 1 ]; then
+    EXT_OPTS_O="${EXT_OPTS_O},filetype"
+fi
+
 # Add a journal for ext3 and above
 if [ ${GEN} -ge 3 ]; then
     EXT_OPTS="${EXT_OPTS} -j -J size=1"