return err;
 }
 
+static void ext4_add_overhead(struct super_block *sb,
+                              const ext4_fsblk_t overhead)
+{
+       struct ext4_sb_info *sbi = EXT4_SB(sb);
+       struct ext4_super_block *es = sbi->s_es;
+
+       sbi->s_overhead += overhead;
+       es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead);
+       smp_wmb();
+}
+
 /*
  * ext4_update_super() updates the super block so that the newly added
  * groups can be seen by the filesystem.
        }
 
        /*
-        * Update the fs overhead information
+        * Update the fs overhead information.
+        *
+        * For bigalloc, if the superblock already has a properly calculated
+        * overhead, update it with a value based on numbers already computed
+        * above for the newly allocated capacity.
         */
-       ext4_calculate_overhead(sb);
+       if (ext4_has_feature_bigalloc(sb) && (sbi->s_overhead != 0))
+               ext4_add_overhead(sb,
+                       EXT4_NUM_B2C(sbi, blocks_count - free_blocks));
+       else
+               ext4_calculate_overhead(sb);
        es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead);
 
        if (test_opt(sb, DEBUG))