diff --git a/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel4.patch b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel4.patch new file mode 100644 index 0000000000000000000000000000000000000000..10959fcf88f28fefd81c04f2b81e6b95f89fd0b6 --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel4.patch @@ -0,0 +1,57 @@ +Index: linux-2.6.9-67.0.22/fs/ext3/super.c +=================================================================== +--- linux-2.6.9-67.0.22.orig/fs/ext3/super.c ++++ linux-2.6.9-67.0.22/fs/ext3/super.c +@@ -89,6 +89,8 @@ handle_t *ext3_journal_start_sb(struct s + return journal_start(journal, nblocks); + } + ++static int bigendian_extents; ++ + /* + * The only special thing we need to do here is to make sure that all + * journal_stop calls result in the superblock being marked dirty, so +@@ -657,7 +659,7 @@ enum { + Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, + Opt_ignore, Opt_barrier, Opt_err, Opt_resize, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, +- Opt_extents, Opt_noextents, Opt_extdebug, ++ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, + Opt_mballoc, Opt_nomballoc, Opt_stripe, + }; + +@@ -711,6 +713,7 @@ static match_table_t tokens = { + {Opt_iopen_nopriv, "iopen_nopriv"}, + {Opt_extents, "extents"}, + {Opt_noextents, "noextents"}, ++ {Opt_bigendian_extents, "bigendian_extents"}, + {Opt_extdebug, "extdebug"}, + {Opt_barrier, "barrier=%u"}, + {Opt_mballoc, "mballoc"}, +@@ -1036,6 +1039,9 @@ clear_qf_name: + case Opt_noextents: + clear_opt (sbi->s_mount_opt, EXTENTS); + break; ++ case Opt_bigendian_extents: ++ bigendian_extents = 1; ++ break; + case Opt_extdebug: + set_opt (sbi->s_mount_opt, EXTDEBUG); + break; +@@ -1952,6 +1958,16 @@ static int ext3_fill_super (struct super + NULL, 0)) + goto failed_mount; + ++#ifdef __BIG_ENDIAN ++ if (bigendian_extents == 0) { ++ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work " ++ "correctly on the filesystem if EXTENTS feature is " ++ "used on big-endian systems. Use \"bigendian_extents\" " ++ "mount option to override.\n"); ++ goto failed_mount; ++ } ++#endif ++ + set_sb_time_gran(sb, 1000000000U); + sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | + ((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); diff --git a/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel5.patch b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel5.patch new file mode 100644 index 0000000000000000000000000000000000000000..30c5ce0da2e3c032a0dda81283dded5c17b33f4b --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-rhel5.patch @@ -0,0 +1,56 @@ +Index: linux-2.6.18-92.1.6/fs/ext3/super.c +=================================================================== +--- linux-2.6.18-92.1.6.orig/fs/ext3/super.c ++++ linux-2.6.18-92.1.6/fs/ext3/super.c +@@ -71,6 +71,8 @@ static void ext3_unlockfs(struct super_b + static void ext3_write_super (struct super_block * sb); + static void ext3_write_super_lockfs(struct super_block *sb); + ++static int bigendian_extents; ++ + /* + * Wrappers for journal_start/end. + * +@@ -706,7 +708,7 @@ enum { + Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, + Opt_grpquota, +- Opt_extents, Opt_noextents, Opt_extdebug, ++ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, + Opt_mballoc, Opt_nomballoc, Opt_stripe, + }; + +@@ -766,6 +768,7 @@ static match_table_t tokens = { + {Opt_barrier, "barrier=%u"}, + {Opt_extents, "extents"}, + {Opt_noextents, "noextents"}, ++ {Opt_bigendian_extents, "bigendian_extents"}, + {Opt_extdebug, "extdebug"}, + {Opt_mballoc, "mballoc"}, + {Opt_nomballoc, "nomballoc"}, +@@ -1129,6 +1132,9 @@ clear_qf_name: + case Opt_noextents: + clear_opt (sbi->s_mount_opt, EXTENTS); + break; ++ case Opt_bigendian_extents: ++ bigendian_extents = 1; ++ break; + case Opt_extdebug: + set_opt (sbi->s_mount_opt, EXTDEBUG); + break; +@@ -2224,6 +2230,15 @@ static int ext3_fill_super (struct super + goto failed_mount; + } + ++#ifdef __BIG_ENDIAN ++ if (bigendian_extents == 0) { ++ printk(KERN_ERR "EXT3-fs: extents feature is not guaranteed to " ++ "work on big-endian systems. Use \"bigendian_extents\" " ++ "mount option to override.\n"); ++ goto failed_mount; ++ } ++#endif ++ + bgl_lock_init(&sbi->s_blockgroup_lock); + + sbi->s_last_alloc_group = -1; diff --git a/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-sles10.patch b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-sles10.patch new file mode 100644 index 0000000000000000000000000000000000000000..2ac0aee3b728aede1fd14f1c68338a9466a757cf --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-sles10.patch @@ -0,0 +1,57 @@ +Index: linux-2.6.16.60-0.27/fs/ext3/super.c +=================================================================== +--- linux-2.6.16.60-0.27.orig/fs/ext3/super.c ++++ linux-2.6.16.60-0.27/fs/ext3/super.c +@@ -100,6 +100,8 @@ handle_t *ext3_journal_start_sb(struct s + return journal_start(journal, nblocks); + } + ++static int bigendian_extents; ++ + /* + * The only special thing we need to do here is to make sure that all + * journal_stop calls result in the superblock being marked dirty, so +@@ -703,7 +705,7 @@ enum { + Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota, + Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, +- Opt_extents, Opt_noextents, Opt_extdebug, ++ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, + Opt_mballoc, Opt_nomballoc, Opt_stripe, + Opt_grpquota + }; +@@ -762,6 +764,7 @@ static match_table_t tokens = { + {Opt_iopen_nopriv, "iopen_nopriv"}, + {Opt_extents, "extents"}, + {Opt_noextents, "noextents"}, ++ {Opt_bigendian_extents, "bigendian_extents"}, + {Opt_extdebug, "extdebug"}, + {Opt_barrier, "barrier=%u"}, + {Opt_mballoc, "mballoc"}, +@@ -1122,6 +1125,9 @@ clear_qf_name: + case Opt_noextents: + clear_opt (sbi->s_mount_opt, EXTENTS); + break; ++ case Opt_bigendian_extents: ++ bigendian_extents = 1; ++ break; + case Opt_extdebug: + set_opt (sbi->s_mount_opt, EXTDEBUG); + break; +@@ -2052,6 +2058,16 @@ static int ext3_fill_super (struct super + NULL, 0)) + goto failed_mount; + ++#ifdef __BIG_ENDIAN ++ if (bigendian_extents == 0) { ++ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work " ++ "correctly on the filesystem if EXTENTS feature is " ++ "used on big-endian systems. Use \"bigendian_extents\" " ++ "mount option to override.\n"); ++ goto failed_mount; ++ } ++#endif ++ + sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | + ((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); + diff --git a/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-suse.patch b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-suse.patch new file mode 100644 index 0000000000000000000000000000000000000000..a35ec6c1a23dbceeee7a95cb42d807df20f87631 --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6-suse.patch @@ -0,0 +1,57 @@ +Index: linux-2.6.5-7.312/fs/ext3/super.c +=================================================================== +--- linux-2.6.5-7.312.orig/fs/ext3/super.c ++++ linux-2.6.5-7.312/fs/ext3/super.c +@@ -84,6 +84,8 @@ handle_t *ext3_journal_start(struct inod + return journal_start(journal, nblocks); + } + ++static int bigendian_extents; ++ + /* + * The only special thing we need to do here is to make sure that all + * journal_stop calls result in the superblock being marked dirty, so +@@ -601,7 +603,7 @@ enum { + Opt_ignore, Opt_barrier, + Opt_err, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, +- Opt_extents, Opt_noextents, Opt_extdebug, ++ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, + Opt_mballoc, Opt_nomballoc, Opt_stripe, + }; + +@@ -649,6 +651,7 @@ static match_table_t tokens = { + {Opt_iopen_nopriv, "iopen_nopriv"}, + {Opt_extents, "extents"}, + {Opt_noextents, "noextents"}, ++ {Opt_bigendian_extents, "bigendian_extents"}, + {Opt_extdebug, "extdebug"}, + {Opt_barrier, "barrier=%u"}, + {Opt_mballoc, "mballoc"}, +@@ -886,6 +889,9 @@ static int parse_options (char * options + case Opt_noextents: + clear_opt (sbi->s_mount_opt, EXTENTS); + break; ++ case Opt_bigendian_extents: ++ bigendian_extents = 1; ++ break; + case Opt_extdebug: + set_opt (sbi->s_mount_opt, EXTDEBUG); + break; +@@ -1450,6 +1456,16 @@ static int ext3_fill_super (struct super + 0)) + goto failed_mount; + ++#ifdef __BIG_ENDIAN ++ if (bigendian_extents == 0) { ++ printk(KERN_ERR "EXT3-fs: e2fsck is not guaranteed to work " ++ "correctly on the filesystem if EXTENTS feature is " ++ "used on big-endian systems. Use \"bigendian_extents\" " ++ "mount option to override.\n"); ++ goto failed_mount; ++ } ++#endif ++ + sb->s_flags |= MS_ONE_SECOND; + sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | + ((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); diff --git a/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6.22-vanilla.patch b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6.22-vanilla.patch new file mode 100644 index 0000000000000000000000000000000000000000..20c8d1d8f59fa84048358ecdc08d2bc3d1aa2391 --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3-big-endian-check-2.6.22-vanilla.patch @@ -0,0 +1,56 @@ +Index: linux-2.6.22.14/fs/ext3/super.c +=================================================================== +--- linux-2.6.22.14.orig/fs/ext3/super.c ++++ linux-2.6.22.14/fs/ext3/super.c +@@ -71,6 +71,8 @@ static void ext3_unlockfs(struct super_b + static void ext3_write_super (struct super_block * sb); + static void ext3_write_super_lockfs(struct super_block *sb); + ++static int bigendian_extents; ++ + /* + * Wrappers for journal_start/end. + * +@@ -700,7 +702,7 @@ enum { + Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, + Opt_grpquota, +- Opt_extents, Opt_noextents, Opt_extdebug, ++ Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, + Opt_mballoc, Opt_nomballoc, Opt_stripe, + }; + +@@ -756,6 +758,7 @@ static match_table_t tokens = { + {Opt_barrier, "barrier=%u"}, + {Opt_extents, "extents"}, + {Opt_noextents, "noextents"}, ++ {Opt_bigendian_extents, "bigendian_extents"}, + {Opt_extdebug, "extdebug"}, + {Opt_mballoc, "mballoc"}, + {Opt_nomballoc, "nomballoc"}, +@@ -1110,6 +1113,9 @@ clear_qf_name: + case Opt_noextents: + clear_opt (sbi->s_mount_opt, EXTENTS); + break; ++ case Opt_bigendian_extents: ++ bigendian_extents = 1; ++ break; + case Opt_extdebug: + set_opt (sbi->s_mount_opt, EXTDEBUG); + break; +@@ -2208,6 +2214,15 @@ static int ext3_fill_super (struct super + goto failed_mount; + } + ++#ifdef __BIG_ENDIAN ++ if (bigendian_extents == 0) { ++ printk(KERN_ERR "EXT3-fs: extents feature is not guaranteed to " ++ "work on big-endian systems. Use \"bigendian_extents\" " ++ "mount option to override.\n"); ++ goto failed_mount; ++ } ++#endif ++ + bgl_lock_init(&sbi->s_blockgroup_lock); + + sbi->s_last_alloc_group = -1; diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series index 6554da59e239258fca739bc14715994a133823ea..5cfd3770009807860947b62e4b77e78ed25b924a 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series @@ -28,3 +28,4 @@ ext3-xattr-no-update-ctime-rhel4.patch ext3-check-bad-inode.patch ext3-fiemap-2.6-rhel4.patch ext3-get-raid-stripe-from-sb.patch +ext3-big-endian-check-2.6-rhel4.patch diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series index 534a7e8beb051ffc255adf6910e9508d9c8c491d..bd414b6c7cb99a9f3b31b6f50ea5ad5cace7b3a1 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series @@ -25,3 +25,4 @@ ext3-block-bitmap-validation-2.6-rhel5.patch ext3-xattr-no-update-ctime-2.6.22-vanilla.patch ext3-journal-chksum-2.6.18-vanilla.patch ext3-get-raid-stripe-from-sb.patch +ext3-big-endian-check-2.6-rhel5.patch diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series index 96d3c32fe0150539c25aee0059aad7133a875b9c..c6934bbd8664536184fe7df3bc0da6df88cfeb16 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series @@ -30,3 +30,4 @@ ext3-xattr-no-update-ctime-2.6-sles10.patch ext3-check-bad-inode.patch ext3-journal-chksum-2.6.18-vanilla.patch ext3-get-raid-stripe-from-sb.patch +ext3-big-endian-check-2.6-sles10.patch diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series index 86d27c43390ce5bfc8dc76097000710b212a3468..5e7c0f2691a9e1efc37a294c8265a262577f613b 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series @@ -27,3 +27,4 @@ ext3-print-inum-in-htree-warning.patch ext3-xattr-no-update-ctime-suse.patch ext3-check-bad-inode.patch ext3-get-raid-stripe-from-sb-2.6-suse.patch +ext3-big-endian-check-2.6-suse.patch diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series index a95833e594c116295c5ba8ad802ae8e9f2d855c5..05ea5a418ac3c7dd8c8779e47680cba304f25bbf 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series @@ -25,3 +25,4 @@ ext3-print-inum-in-htree-warning.patch ext3-xattr-no-update-ctime-2.6.22-vanilla.patch ext3-check-bad-inode.patch ext3-get-raid-stripe-from-sb.patch +ext3-big-endian-check-2.6.22-vanilla.patch