diff options
Diffstat (limited to 'fs/ext2')
-rw-r--r-- | fs/ext2/balloc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c index ea88181932df..132da4c0692f 100644 --- a/fs/ext2/balloc.c +++ b/fs/ext2/balloc.c | |||
@@ -568,8 +568,11 @@ do_more: | |||
568 | } | 568 | } |
569 | error_return: | 569 | error_return: |
570 | brelse(bitmap_bh); | 570 | brelse(bitmap_bh); |
571 | release_blocks(sb, freed); | 571 | if (freed) { |
572 | dquot_free_block_nodirty(inode, freed); | 572 | release_blocks(sb, freed); |
573 | dquot_free_block_nodirty(inode, freed); | ||
574 | mark_inode_dirty(inode); | ||
575 | } | ||
573 | } | 576 | } |
574 | 577 | ||
575 | /** | 578 | /** |
@@ -1412,9 +1415,11 @@ allocated: | |||
1412 | 1415 | ||
1413 | *errp = 0; | 1416 | *errp = 0; |
1414 | brelse(bitmap_bh); | 1417 | brelse(bitmap_bh); |
1415 | dquot_free_block_nodirty(inode, *count-num); | 1418 | if (num < *count) { |
1416 | mark_inode_dirty(inode); | 1419 | dquot_free_block_nodirty(inode, *count-num); |
1417 | *count = num; | 1420 | mark_inode_dirty(inode); |
1421 | *count = num; | ||
1422 | } | ||
1418 | return ret_block; | 1423 | return ret_block; |
1419 | 1424 | ||
1420 | io_error: | 1425 | io_error: |