diff options
-rw-r--r-- | fs/ext4/mballoc.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index fd2294de404c..05d9f81956c6 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
@@ -4541,7 +4541,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle, | |||
4541 | } | 4541 | } |
4542 | if (ar->len == 0) { | 4542 | if (ar->len == 0) { |
4543 | *errp = -EDQUOT; | 4543 | *errp = -EDQUOT; |
4544 | return 0; | 4544 | goto out3; |
4545 | } | 4545 | } |
4546 | inquota = ar->len; | 4546 | inquota = ar->len; |
4547 | 4547 | ||
@@ -4614,6 +4614,13 @@ out2: | |||
4614 | out1: | 4614 | out1: |
4615 | if (ar->len < inquota) | 4615 | if (ar->len < inquota) |
4616 | DQUOT_FREE_BLOCK(ar->inode, inquota - ar->len); | 4616 | DQUOT_FREE_BLOCK(ar->inode, inquota - ar->len); |
4617 | out3: | ||
4618 | if (!ar->len) { | ||
4619 | if (!EXT4_I(ar->inode)->i_delalloc_reserved_flag) | ||
4620 | /* release all the reserved blocks if non delalloc */ | ||
4621 | percpu_counter_sub(&sbi->s_dirtyblocks_counter, | ||
4622 | reserv_blks); | ||
4623 | } | ||
4617 | 4624 | ||
4618 | return block; | 4625 | return block; |
4619 | } | 4626 | } |