|
@@ -4418,8 +4418,7 @@ static int should_alloc_chunk(struct btrfs_fs_info *fs_info,
|
|
|
struct btrfs_space_info *sinfo, int force)
|
|
|
{
|
|
|
struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
|
|
|
- u64 num_bytes = sinfo->total_bytes - sinfo->bytes_readonly;
|
|
|
- u64 num_allocated = sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned;
|
|
|
+ u64 bytes_used = btrfs_space_info_used(sinfo, false);
|
|
|
u64 thresh;
|
|
|
|
|
|
if (force == CHUNK_ALLOC_FORCE)
|
|
@@ -4431,7 +4430,7 @@ static int should_alloc_chunk(struct btrfs_fs_info *fs_info,
|
|
|
* global_rsv, it doesn't change except when the transaction commits.
|
|
|
*/
|
|
|
if (sinfo->flags & BTRFS_BLOCK_GROUP_METADATA)
|
|
|
- num_allocated += calc_global_rsv_need_space(global_rsv);
|
|
|
+ bytes_used += calc_global_rsv_need_space(global_rsv);
|
|
|
|
|
|
/*
|
|
|
* in limited mode, we want to have some free space up to
|
|
@@ -4441,11 +4440,11 @@ static int should_alloc_chunk(struct btrfs_fs_info *fs_info,
|
|
|
thresh = btrfs_super_total_bytes(fs_info->super_copy);
|
|
|
thresh = max_t(u64, SZ_64M, div_factor_fine(thresh, 1));
|
|
|
|
|
|
- if (num_bytes - num_allocated < thresh)
|
|
|
+ if (sinfo->total_bytes - bytes_used < thresh)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- if (num_allocated + SZ_2M < div_factor(num_bytes, 8))
|
|
|
+ if (bytes_used + SZ_2M < div_factor(sinfo->total_bytes, 8))
|
|
|
return 0;
|
|
|
return 1;
|
|
|
}
|