Whamcloud - gitweb
LU-8364 ldiskfs: fixes for failover mode 54/26854/4
authorYang Sheng <yang.sheng@intel.com>
Thu, 27 Apr 2017 06:48:22 +0000 (14:48 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 9 May 2017 03:46:55 +0000 (03:46 +0000)
Port failover mode patches to other distro and
fix failure path in replay patch.

Signed-off-by: Yang Sheng <yang.sheng@intel.com>
Change-Id: I51f5ca0b906a3cbd7554fabb8b447cda4096c781
Reviewed-on: https://review.whamcloud.com/26854
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
ldiskfs/kernel_patches/patches/rhel6.3/ext4-dont-check-before-replay.patch
ldiskfs/kernel_patches/patches/rhel7.2/ext4-dont-check-before-replay.patch
ldiskfs/kernel_patches/patches/sles11sp3/ext4-dont-check-before-replay.patch [new file with mode: 0644]
ldiskfs/kernel_patches/patches/sles12sp2/ext4-dont-check-before-replay.patch [new file with mode: 0644]
ldiskfs/kernel_patches/series/ldiskfs-3.0-sles11sp3.series
ldiskfs/kernel_patches/series/ldiskfs-4.4-sles12sp2.series

index e0af295..57bf9fe 100644 (file)
@@ -24,7 +24,7 @@ journal replay.
  no_journal:
 +      if (!ext4_check_descriptors(sb, &first_not_zeroed)) {
 +              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
-+              goto failed_mount2;
++              goto failed_mount_wq;
 +      }
        if (test_opt(sb, NOBH)) {
                if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
index 9fb9fa1..de1b7f6 100644 (file)
@@ -25,7 +25,7 @@ journal replay.
 +
 +      if (!ext4_check_descriptors(sb, &first_not_zeroed)) {
 +              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
-+              goto failed_mount2;
++              goto failed_mount_wq;
 +      }
 +
        /*
diff --git a/ldiskfs/kernel_patches/patches/sles11sp3/ext4-dont-check-before-replay.patch b/ldiskfs/kernel_patches/patches/sles11sp3/ext4-dont-check-before-replay.patch
new file mode 100644 (file)
index 0000000..6357ec5
--- /dev/null
@@ -0,0 +1,31 @@
+Index: linux-stage/fs/ext4/super.c
+When ldiskfs run in failover mode whith read-only disk.
+Part of allocation updates are lost and ldiskfs may fail
+while mounting this is due to inconsistent state of
+group-descriptor. Group-descriptor check is added after
+journal replay.
+===================================================================
+--- linux-stage/fs/ext4/super.c        2016-11-24 20:50:46.736527130 +0530
++++ linux-stage.orig/fs/ext4/super.c   2016-11-24 20:54:14.941779453 +0530
+@@ -3429,10 +3429,6 @@
+                       goto failed_mount2;
+               }
+       }
+-      if (!ext4_check_descriptors(sb, &first_not_zeroed)) {
+-              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
+-              goto failed_mount2;
+-      }
+       if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG))
+               if (!ext4_fill_flex_info(sb)) {
+                       ext4_msg(sb, KERN_ERR,
+@@ -3609,6 +3605,10 @@
+       sbi->s_journal->j_commit_callback = ext4_journal_commit_callback;
+
+ no_journal:
++      if (!ext4_check_descriptors(sb, &first_not_zeroed)) {
++              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
++              goto failed_mount_wq;
++      }
+       /*
+        * The maximum number of concurrent works can be high and
+        * concurrency isn't really necessary.  Limit it to 1.
diff --git a/ldiskfs/kernel_patches/patches/sles12sp2/ext4-dont-check-before-replay.patch b/ldiskfs/kernel_patches/patches/sles12sp2/ext4-dont-check-before-replay.patch
new file mode 100644 (file)
index 0000000..c224aa2
--- /dev/null
@@ -0,0 +1,35 @@
+Index: linux-stage/fs/ext4/super.c
+When ldiskfs run in failover mode whith read-only disk.
+Part of allocation updates are lost and ldiskfs may fail
+while mounting this is due to inconsistent state of
+group-descriptor. Group-descriptor check is added after
+journal replay.
+===================================================================
+--- linux-stage/fs/ext4/super.c        2016-11-06 15:15:30.892386878 +0530
++++ linux-stage.orig.1/fs/ext4/super.c 2016-11-08 10:56:45.579892189 +0530
+@@ -3980,11 +3980,6 @@
+                       goto failed_mount2;
+               }
+       }
+-      if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
+-              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
+-              ret = -EFSCORRUPTED;
+-              goto failed_mount2;
+-      }
+
+       sbi->s_gdb_count = db_count;
+       get_random_bytes(&sbi->s_next_generation, sizeof(u32));
+@@ -4104,6 +4100,13 @@
+       sbi->s_journal->j_commit_callback = ext4_journal_commit_callback;
+
+ no_journal:
++
++      if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
++              ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
++              ret = -EFSCORRUPTED;
++              goto failed_mount_wq;
++      }
++
+       sbi->s_mb_cache = ext4_xattr_create_cache();
+       if (!sbi->s_mb_cache) {
+               ext4_msg(sb, KERN_ERR, "Failed to create an mb_cache");
index 7806d12..be27380 100644 (file)
@@ -42,3 +42,5 @@ sles11sp3/ext4-mmp-brelse.patch
 sles11sp3/ext4_s_max_ext_tree_depth.patch
 sles11sp1/ext4-notalloc_under_idatasem.patch
 rhel6.5/ext4-fix-journal-quota.patch
+sles11sp3/ext4-dont-check-before-replay.patch
+rhel6.3/ext4-dont-check-in-ro.patch
index 3fe547b..546b30d 100644 (file)
@@ -21,3 +21,5 @@ sles12sp2/ext4-give-warning-with-dir-htree-growing.patch
 sles12sp2/ext4-mmp-brelse.patch
 rhel7/ext4-jcb-optimization.patch
 sles12sp2/ext4-attach-jinode-in-writepages.patch
+sles12sp2/ext4-dont-check-before-replay.patch
+rhel7.2/ext4-dont-check-in-ro.patch