diff options
Diffstat (limited to 'fs/ext4/balloc.c')
-rw-r--r-- | fs/ext4/balloc.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index edef0023e6e6..a425e78c73eb 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
@@ -1603,10 +1603,10 @@ out: | |||
1603 | } | 1603 | } |
1604 | 1604 | ||
1605 | int ext4_claim_free_blocks(struct ext4_sb_info *sbi, | 1605 | int ext4_claim_free_blocks(struct ext4_sb_info *sbi, |
1606 | ext4_fsblk_t nblocks) | 1606 | s64 nblocks) |
1607 | { | 1607 | { |
1608 | s64 free_blocks, dirty_blocks; | 1608 | s64 free_blocks, dirty_blocks; |
1609 | ext4_fsblk_t root_blocks = 0; | 1609 | s64 root_blocks = 0; |
1610 | struct percpu_counter *fbc = &sbi->s_freeblocks_counter; | 1610 | struct percpu_counter *fbc = &sbi->s_freeblocks_counter; |
1611 | struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; | 1611 | struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; |
1612 | 1612 | ||
@@ -1631,7 +1631,7 @@ int ext4_claim_free_blocks(struct ext4_sb_info *sbi, | |||
1631 | /* Check whether we have space after | 1631 | /* Check whether we have space after |
1632 | * accounting for current dirty blocks | 1632 | * accounting for current dirty blocks |
1633 | */ | 1633 | */ |
1634 | if (free_blocks < ((s64)(root_blocks + nblocks) + dirty_blocks)) | 1634 | if (free_blocks < ((root_blocks + nblocks) + dirty_blocks)) |
1635 | /* we don't have free space */ | 1635 | /* we don't have free space */ |
1636 | return -ENOSPC; | 1636 | return -ENOSPC; |
1637 | 1637 | ||
@@ -1650,10 +1650,10 @@ int ext4_claim_free_blocks(struct ext4_sb_info *sbi, | |||
1650 | * On success, return nblocks | 1650 | * On success, return nblocks |
1651 | */ | 1651 | */ |
1652 | ext4_fsblk_t ext4_has_free_blocks(struct ext4_sb_info *sbi, | 1652 | ext4_fsblk_t ext4_has_free_blocks(struct ext4_sb_info *sbi, |
1653 | ext4_fsblk_t nblocks) | 1653 | s64 nblocks) |
1654 | { | 1654 | { |
1655 | ext4_fsblk_t free_blocks, dirty_blocks; | 1655 | s64 free_blocks, dirty_blocks; |
1656 | ext4_fsblk_t root_blocks = 0; | 1656 | s64 root_blocks = 0; |
1657 | struct percpu_counter *fbc = &sbi->s_freeblocks_counter; | 1657 | struct percpu_counter *fbc = &sbi->s_freeblocks_counter; |
1658 | struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; | 1658 | struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; |
1659 | 1659 | ||
@@ -1667,14 +1667,15 @@ ext4_fsblk_t ext4_has_free_blocks(struct ext4_sb_info *sbi, | |||
1667 | 1667 | ||
1668 | if (free_blocks - (nblocks + root_blocks + dirty_blocks) < | 1668 | if (free_blocks - (nblocks + root_blocks + dirty_blocks) < |
1669 | EXT4_FREEBLOCKS_WATERMARK) { | 1669 | EXT4_FREEBLOCKS_WATERMARK) { |
1670 | free_blocks = percpu_counter_sum_positive(fbc); | 1670 | free_blocks = percpu_counter_sum(fbc); |
1671 | dirty_blocks = percpu_counter_sum_positive(dbc); | 1671 | dirty_blocks = percpu_counter_sum(dbc); |
1672 | } | 1672 | } |
1673 | if (free_blocks <= (root_blocks + dirty_blocks)) | 1673 | if (free_blocks <= (root_blocks + dirty_blocks)) |
1674 | /* we don't have free space */ | 1674 | /* we don't have free space */ |
1675 | return 0; | 1675 | return 0; |
1676 | |||
1676 | if (free_blocks - (root_blocks + dirty_blocks) < nblocks) | 1677 | if (free_blocks - (root_blocks + dirty_blocks) < nblocks) |
1677 | return free_blocks - root_blocks; | 1678 | return free_blocks - (root_blocks + dirty_blocks); |
1678 | return nblocks; | 1679 | return nblocks; |
1679 | } | 1680 | } |
1680 | 1681 | ||