Resend: [PATCH]: Make JFFS2 endianness configurable

Rod Whitby rod at
Thu Jan 12 16:10:01 EST 2006

[Sorry for the bad formatting of the previous message.]

This patch allows the endianness of the JFSS2 filesystem to be
specified by config options.

It defaults to native-endian (the previously hard-coded option).

Some architectures (in particular, the NSLU2) benefit from having a
single known endianness of JFFS2 filesystem (for data, not
executables) independent of the endianness of the processor (ARM
processors can be switched to either endianness at run-time).

Signed-off-by: Rod Whitby <rod at>

--- linux-2.6.15/fs/Kconfig~    2006-01-03 13:51:10.000000000 +1030
+++ linux-2.6.15/fs/Kconfig     2006-01-05 01:35:36.000000000 +1030
@@ -1132,6 +1132,31 @@ config JFFS2_CMODE_SIZE


+        prompt "JFFS2 endianness"
+        default JFFS2_NATIVE_ENDIAN
+        depends on JFFS2_FS
+        help
+          You can set here the default endianness of JFFS2 from
+          the available options. Don't touch if unsure.
+        bool "native endian"
+        help
+          Uses a native endian bytestream.
+        bool "big endian"
+        help
+          Uses a big endian bytestream.
+        bool "little endian"
+        help
+          Uses a little endian bytestream.
 config CRAMFS
        tristate "Compressed ROM file system support (cramfs)"
        select ZLIB_INFLATE
--- linux-2.6.15/fs/jffs2/nodelist.h~   2006-01-05 01:37:06.000000000 +1030
+++ linux-2.6.15/fs/jffs2/nodelist.h    2006-01-05 01:37:54.000000000 +1030
@@ -29,12 +29,10 @@
 #include "os-linux.h"

 /* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from
    whatever OS we're actually running on here too. */

-#if defined(JFFS2_NATIVE_ENDIAN)
 #define cpu_to_je16(x) ((jint16_t){x})
 #define cpu_to_je32(x) ((jint32_t){x})
 #define cpu_to_jemode(x) ((jmode_t){os_to_jffs2_mode(x)})
@@ -42,7 +40,7 @@
 #define je16_to_cpu(x) ((x).v16)
 #define je32_to_cpu(x) ((x).v32)
 #define jemode_to_cpu(x) (jffs2_to_os_mode((x).m))
-#elif defined(JFFS2_BIG_ENDIAN)
+#elif defined(CONFIG_JFFS2_BIG_ENDIAN)
 #define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)})
 #define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)})
 #define cpu_to_jemode(x) ((jmode_t){cpu_to_be32(os_to_jffs2_mode(x))})
@@ -50,7 +48,7 @@
 #define je16_to_cpu(x) (be16_to_cpu(x.v16))
 #define je32_to_cpu(x) (be32_to_cpu(x.v32))
 #define jemode_to_cpu(x) (be32_to_cpu(jffs2_to_os_mode((x).m)))
-#elif defined(JFFS2_LITTLE_ENDIAN)
 #define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)})
 #define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)})
 #define cpu_to_jemode(x) ((jmode_t){cpu_to_le32(os_to_jffs2_mode(x))})

-- Rod Whitby
-- NSLU2-Linux Project Lead

More information about the linux-mtd mailing list