|
@@ -4541,7 +4541,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
|
|
|
}
|
|
|
if (ar->len == 0) {
|
|
|
*errp = -EDQUOT;
|
|
|
- return 0;
|
|
|
+ goto out3;
|
|
|
}
|
|
|
inquota = ar->len;
|
|
|
|
|
@@ -4614,6 +4614,13 @@ out2:
|
|
|
out1:
|
|
|
if (ar->len < inquota)
|
|
|
DQUOT_FREE_BLOCK(ar->inode, inquota - ar->len);
|
|
|
+out3:
|
|
|
+ if (!ar->len) {
|
|
|
+ if (!EXT4_I(ar->inode)->i_delalloc_reserved_flag)
|
|
|
+ /* release all the reserved blocks if non delalloc */
|
|
|
+ percpu_counter_sub(&sbi->s_dirtyblocks_counter,
|
|
|
+ reserv_blks);
|
|
|
+ }
|
|
|
|
|
|
return block;
|
|
|
}
|