+++ /dev/null
---- linux-stage.orig/fs/ext4/super.c 2014-02-14 04:48:50.707992991 +0800
-+++ linux-stage/fs/ext4/super.c 2014-02-14 04:49:53.341999568 +0800
-@@ -3456,24 +3456,6 @@ static int ext4_fill_super(struct super_
- get_random_bytes(&sbi->s_next_generation, sizeof(u32));
- spin_lock_init(&sbi->s_next_gen_lock);
-
-- err = percpu_counter_init(&sbi->s_freeblocks_counter,
-- ext4_count_free_blocks(sb));
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_freeinodes_counter,
-- ext4_count_free_inodes(sb));
-- }
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_dirs_counter,
-- ext4_count_dirs(sb));
-- }
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
-- }
-- if (err) {
-- ext4_msg(sb, KERN_ERR, "insufficient memory");
-- goto failed_mount3;
-- }
--
- sbi->s_stripe = ext4_get_stripe_size(sbi);
- sbi->s_max_writeback_mb_bump = 128;
-
-@@ -3555,6 +3537,24 @@ static int ext4_fill_super(struct super_
- goto no_journal;
- }
-
-+ err = percpu_counter_init(&sbi->s_freeblocks_counter,
-+ ext4_count_free_blocks(sb));
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_freeinodes_counter,
-+ ext4_count_free_inodes(sb));
-+ }
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_dirs_counter,
-+ ext4_count_dirs(sb));
-+ }
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
-+ }
-+ if (err) {
-+ ext4_msg(sb, KERN_ERR, "insufficient memory");
-+ goto failed_mount4;
-+ }
-+
- if (ext4_blocks_count(es) > 0xffffffffULL &&
- !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
- JBD2_FEATURE_INCOMPAT_64BIT)) {
--- /dev/null
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -3613,6 +3613,18 @@ static int ext4_fill_super(struct super_
+
+ sbi->s_journal->j_commit_callback = ext4_journal_commit_callback;
+
++ /*
++ * The journal may have updated the bg summary counts, so we
++ * need to update the global counters.
++ */
++ percpu_counter_set(&sbi->s_freeblocks_counter,
++ ext4_count_free_blocks(sb));
++ percpu_counter_set(&sbi->s_freeinodes_counter,
++ ext4_count_free_inodes(sb));
++ percpu_counter_set(&sbi->s_dirs_counter,
++ ext4_count_dirs(sb));
++ percpu_counter_set(&sbi->s_dirtyblocks_counter, 0);
++
+ no_journal:
+
+ if (test_opt(sb, NOBH)) {
+++ /dev/null
---- linux-stage.orig/fs/ext4/super.c
-+++ linux-stage/fs/ext4/super.c
-@@ -3383,24 +3424,6 @@ static int ext4_fill_super(struct super_
- get_random_bytes(&sbi->s_next_generation, sizeof(u32));
- spin_lock_init(&sbi->s_next_gen_lock);
-
-- err = percpu_counter_init(&sbi->s_freeblocks_counter,
-- ext4_count_free_blocks(sb));
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_freeinodes_counter,
-- ext4_count_free_inodes(sb));
-- }
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_dirs_counter,
-- ext4_count_dirs(sb));
-- }
-- if (!err) {
-- err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
-- }
-- if (err) {
-- ext4_msg(sb, KERN_ERR, "insufficient memory");
-- goto failed_mount3;
-- }
--
- sbi->s_stripe = ext4_get_stripe_size(sbi);
- sbi->s_max_writeback_mb_bump = 128;
-
-@@ -3482,6 +3505,24 @@ static int ext4_fill_super(struct super_
- goto no_journal;
- }
-
-+ err = percpu_counter_init(&sbi->s_freeblocks_counter,
-+ ext4_count_free_blocks(sb));
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_freeinodes_counter,
-+ ext4_count_free_inodes(sb));
-+ }
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_dirs_counter,
-+ ext4_count_dirs(sb));
-+ }
-+ if (!err) {
-+ err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
-+ }
-+ if (err) {
-+ ext4_msg(sb, KERN_ERR, "insufficient memory");
-+ goto failed_mount3;
-+ }
-+
- if (ext4_blocks_count(es) > 0xffffffffULL &&
- !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
- JBD2_FEATURE_INCOMPAT_64BIT)) {
rhel6.4/ext4-max-dir-size-options.patch
rhel6.3/ext4-not-discard-preallocation-umount.patch
rhel6.3/ext4-journal-path-opt.patch
-rhel6.3/ext4-init-statfs-after-journal.patch
+rhel6.3/ext4-recalc-percpu-counters-after-journal.patch
rhel6.4/ext4-max-dir-size-options.patch
rhel6.3/ext4-not-discard-preallocation-umount.patch
rhel6.3/ext4-journal-path-opt.patch
-rhel6.3/ext4-init-statfs-after-journal.patch
rhel6.3/ext4-max-dir-size-options.patch
rhel6.3/ext4-not-discard-preallocation-umount.patch
rhel6.3/ext4-journal-path-opt.patch
-rhel6.3/ext4-init-statfs-after-journal.patch
+rhel6.3/ext4-recalc-percpu-counters-after-journal.patch
sles11sp1/ext4-max-dir-size-options.patch
rhel6.3/ext4-not-discard-preallocation-umount.patch
rhel6.3/ext4-journal-path-opt.patch
-rhel6.3/ext4-init-statfs-after-journal.patch
+rhel6.3/ext4-recalc-percpu-counters-after-journal.patch
sles11sp2/ext4-max-dir-size-options.patch
rhel6.3/ext4-not-discard-preallocation-umount.patch
rhel6.3/ext4-journal-path-opt.patch
-sles11sp2/ext4-init-statfs-after-journal.patch