--- /dev/null
+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_mount2;
++ }
+ if (test_opt(sb, NOBH)) {
+ if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
+ ext4_msg(sb, KERN_WARNING, "Ignoring nobh option - "
--- /dev/null
+--- linux-stage/fs/ext4/mballoc.c 2016-11-25 15:31:40.353249364 +0530
++++ linux-stage.orig/fs/ext4/mballoc.c 2016-11-25 15:35:07.816249363 +0530
+@@ -3369,6 +3369,11 @@
+ unsigned short max = EXT4_BLOCKS_PER_GROUP(sb);
+ unsigned short i, first, free = 0;
+
++#ifdef HAVE_CLEAR_RDONLY_ON_PUT
++ /* be quiet if readonly device */
++ if (dev_check_rdonly(sb->s_bdev))
++ return 0;
++#endif
+ i = mb_find_next_zero_bit(bitmap, max, 0);
+
+ while (i < max) {
+@@ -3750,6 +3755,13 @@
+ bit = next + 1;
+ }
+
++#ifdef HAVE_CLEAR_RDONLY_ON_PUT
++ /* be quiet if readonly device */
++ if (dev_check_rdonly(sb->s_bdev)) {
++ atomic_add(free, &sbi->s_mb_discarded);
++ return err;
++ }
++#endif
+ /* "free < pa->pa_free" means we maybe double alloc the same blocks,
+ * otherwise maybe leave some free blocks unavailable, no need to BUG.*/
+ if ((free > pa->pa_free && !pa->pa_error) || (free < pa->pa_free)) {
--- /dev/null
+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,10 +3980,6 @@
+ goto failed_mount2;
+ }
+ }
+- if (!ext4_check_descriptors(sb, &first_not_zeroed)) {
+- ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
+- goto failed_mount2;
+- }
+
+ sbi->s_gdb_count = db_count;
+ get_random_bytes(&sbi->s_next_generation, sizeof(u32));
+@@ -4104,6 +4100,12 @@
+ 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_mount2;
++ }
++
+ /*
+ * Get the # of file system overhead blocks from the
+ * superblock if present.
--- /dev/null
+--- linux-stage/fs/ext4/mballoc.c 2016-11-25 04:15:25.824396109 +0530
++++ linux-stage.orig/fs/ext4/mballoc.c 2016-11-25 02:59:13.505151246 +0530
+@@ -3594,6 +3594,11 @@
+ unsigned short max = EXT4_CLUSTERS_PER_GROUP(sb);
+ unsigned short i, first, free = 0;
+
++#ifdef HAVE_CLEAR_RDONLY_ON_PUT
++ /* be quiet if readonly device */
++ if (dev_check_rdonly(sb->s_bdev))
++ return 0;
++#endif
+ i = mb_find_next_zero_bit(bitmap, max, 0);
+
+ while (i < max) {
+@@ -3969,6 +3974,14 @@
+ bit = next + 1;
+ }
+
++
++#ifdef HAVE_CLEAR_RDONLY_ON_PUT
++ /* be quiet if readonly device */
++ if (dev_check_rdonly(sb->s_bdev)) {
++ atomic_add(free, &sbi->s_mb_discarded);
++ return err;
++ }
++#endif
+ /* "free < pa->pa_free" means we maybe double alloc the same blocks,
+ * otherwise maybe leave some free blocks unavailable, no need to BUG.*/
+ if ((free > pa->pa_free && !pa->pa_error) || (free < pa->pa_free)) {
rhel6.3/ext4-recalc-percpu-counters-after-journal.patch
rhel6.3/ext4-drop-inode-from-orphan-list-if-ext4_delete_inode-fails.patch
rhel6.3/ext4-notalloc_under_idatasem.patch
+rhel6.3/ext4-dont-check-in-ro.patch
+rhel6.3/ext4-dont-check-before-replay.patch
rhel6.3/ext4-notalloc_under_idatasem.patch
rhel6.5/ext4-give-warning-with-dir-htree-growing.patch
rhel6.5/ext4-fix-journal-quota.patch
+rhel6.3/ext4-dont-check-in-ro.patch
+rhel6.3/ext4-dont-check-before-replay.patch
rhel6.3/ext4-journal-path-opt.patch
rhel6.3/ext4-recalc-percpu-counters-after-journal.patch
rhel6.3/ext4-notalloc_under_idatasem.patch
+rhel6.3/ext4-dont-check-in-ro.patch
+rhel6.3/ext4-dont-check-before-replay.patch
rhel7/ext4-jcb-optimization.patch
rhel7/ext4_s_max_ext_tree_depth.patch
rhel7.2/ext4-release-bh-in-makeinxdir.patch
+rhel7.2/ext4-dont-check-in-ro.patch
+rhel7.2/ext4-dont-check-before-replay.patch