Index: linux-2.6.18-128.1.6/fs/ext4/super.c =================================================================== --- linux-2.6.18-128.1.6.orig/fs/ext4/super.c +++ linux-2.6.18-128.1.6/fs/ext4/super.c @@ -70,6 +70,8 @@ struct page *ext4_zero_page; struct proc_dir_entry *proc_root_ext4; +static int bigendian_extents; + ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, struct ext4_group_desc *bg) { @@ -1222,7 +1224,7 @@ enum { Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, Opt_grpquota, Opt_extents, Opt_noextents, Opt_i_version, Opt_inode_readahead_blks, Opt_journal_ioprio, - Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, + Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, Opt_bigendian_extents, }; static match_table_t tokens = { @@ -1284,6 +1286,7 @@ static match_table_t tokens = { {Opt_auto_da_alloc, "auto_da_alloc=%u"}, {Opt_auto_da_alloc, "auto_da_alloc"}, {Opt_noauto_da_alloc, "noauto_da_alloc"}, + {Opt_bigendian_extents, "bigendian_extents"}, {Opt_err, NULL}, }; @@ -1682,6 +1685,9 @@ clear_qf_name: return 0; sbi->s_stripe = option; break; + case Opt_bigendian_extents: + bigendian_extents = 1; + break; default: printk(KERN_ERR "EXT4-fs: Unrecognized mount option \"%s\" " @@ -2561,6 +2567,15 @@ static int ext4_fill_super(struct super_ goto failed_mount; } +#ifdef __BIG_ENDIAN + if (bigendian_extents == 0) { + printk(KERN_ERR "EXT4-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;