Whamcloud - gitweb
LU-1812 ldiskfs: Add kernel patch series for SLES11SP2
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / sles11sp2 / ext4-force_over_128tb.patch
diff --git a/ldiskfs/kernel_patches/patches/sles11sp2/ext4-force_over_128tb.patch b/ldiskfs/kernel_patches/patches/sles11sp2/ext4-force_over_128tb.patch
new file mode 100644 (file)
index 0000000..5bfaa38
--- /dev/null
@@ -0,0 +1,56 @@
+diff -r -u linux-stage.orig/fs/ext4/super.c linux-stage/fs/ext4/super.c
+--- linux-stage.orig/fs/ext4/super.c   2012-12-31 12:55:18.000000000 -0500
++++ linux-stage/fs/ext4/super.c        2012-12-31 12:56:14.000000000 -0500
+@@ -59,6 +59,8 @@
+ static struct mutex ext4_li_mtx;
+ static struct ext4_features *ext4_feat;
+
++static int force_over_128tb;
++
+ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
+                            unsigned long journal_devnum);
+ static int ext4_commit_super(struct super_block *sb, int sync);
+@@ -1298,7 +1300,7 @@
+       Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
+       Opt_inode_readahead_blks, Opt_journal_ioprio,
+       Opt_dioread_nolock, Opt_dioread_lock,
+-      Opt_mballoc, Opt_bigendian_extents,
++      Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
+       Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
+ };
+
+@@ -1374,6 +1376,7 @@
+       {Opt_dioread_nolock, "dioread_nolock"},
+       {Opt_dioread_lock, "dioread_lock"},
+       {Opt_bigendian_extents, "bigendian_extents"},
++      {Opt_force_over_128tb, "force_over_128tb"},
+       {Opt_mballoc, "mballoc"},
+       {Opt_discard, "discard"},
+       {Opt_nodiscard, "nodiscard"},
+@@ -1879,6 +1882,9 @@
+                       break;
+               case Opt_mballoc:
+                       break;
++              case Opt_force_over_128tb:
++                      force_over_128tb = 1;
++                      break;
+               default:
+                       ext4_msg(sb, KERN_ERR,
+                              "Unrecognized mount option \"%s\" "
+@@ -3394,6 +3400,16 @@
+               goto failed_mount;
+       }
+
++      if (ext4_blocks_count(es) > (8ULL << 32)) {
++              if (force_over_128tb == 0) {
++                      printk(KERN_ERR "EXT4-fs does not support filesystems "
++                             "greater than 128TB and can cause data corruption."
++                             "Use \"force_over_128tb\" mount option to override."
++                             "\n");
++                      goto failed_mount;
++              }
++      }
++
+       if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
+               goto cantfind_ext4;
+