Index: linux-2.6.18-128.1.6/fs/ext3/super.c =================================================================== --- linux-2.6.18-128.1.6.orig/fs/ext3/super.c +++ linux-2.6.18-128.1.6/fs/ext3/super.c @@ -51,6 +51,8 @@ #define EXT3_DEFAULT_MAX_DIR_SIZE 0 #define EXT3_MAX_DIR_SIZE_NAME "max_dir_size" +static int force_over_8tb; + static int ext3_load_journal(struct super_block *, struct ext3_super_block *, unsigned long journal_devnum); static int ext3_create_journal(struct super_block *, struct ext3_super_block *, @@ -715,7 +717,7 @@ enum { Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, Opt_grpquota, Opt_extents, Opt_noextents, Opt_bigendian_extents, Opt_extdebug, - Opt_mballoc, Opt_nomballoc, Opt_stripe, + Opt_mballoc, Opt_nomballoc, Opt_stripe, Opt_force_over_8tb, }; static match_table_t tokens = { @@ -779,6 +781,7 @@ static match_table_t tokens = { {Opt_mballoc, "mballoc"}, {Opt_nomballoc, "nomballoc"}, {Opt_stripe, "stripe=%u"}, + {Opt_force_over_8tb, "force_over_8tb"}, {Opt_err, NULL}, {Opt_resize, "resize"}, }; @@ -1157,6 +1160,9 @@ clear_qf_name: return 0; sbi->s_stripe = option; break; + case Opt_force_over_8tb: + force_over_8tb = 1; + break; default: printk (KERN_ERR "EXT3-fs: Unrecognized mount option \"%s\" " @@ -2248,6 +2254,17 @@ static int ext3_fill_super (struct super goto failed_mount; } + if (le32_to_cpu(es->s_blocks_count) > + ((0x80000000000ULL >> sb->s_blocksize_bits) - 1)) { + if (force_over_8tb == 0) { + printk(KERN_ERR "EXT3-fs does not support filesystems " + "greater than 8TB and can cause data corruption." + "Use \"force_over_8tb\" mount option to override." + "\n"); + goto failed_mount; + } + } + if (EXT3_BLOCKS_PER_GROUP(sb) == 0) goto cantfind_ext3; sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -