@@ -375,10 +375,16 @@ void ext4_da_update_reserve_space(struct inode *inode,
* We can release all of the reserved metadata blocks
* only when we have written all of the delayed
* allocation blocks.
+ * When bigalloc and delalloc are enabled, we couldn't release
+ * all of reserved metadata blocks, although all delay blocks
+ * are written out, because it still has some metadata blocks
+ * which are allocated.
*/
- percpu_counter_sub(&sbi->s_dirtyclusters_counter,
- ei->i_reserved_meta_blocks);
- ei->i_reserved_meta_blocks = 0;
+ if (sbi->s_cluster_ratio == 1) {
+ percpu_counter_sub(&sbi->s_dirtyclusters_counter,
+ ei->i_reserved_meta_blocks);
+ ei->i_reserved_meta_blocks = 0;
+ }
ei->i_da_metadata_calc_len = 0;
}
spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);