+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);
+