diff options
Diffstat (limited to 'fs/btrfs/extent-tree.c')
| -rw-r--r-- | fs/btrfs/extent-tree.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 4669c6f8a44d..0f27f7b48804 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3213,7 +3213,8 @@ static int reserve_metadata_bytes(struct btrfs_block_rsv *block_rsv,  	spin_lock(&space_info->lock);  	unused = space_info->bytes_used + space_info->bytes_reserved + -		 space_info->bytes_pinned + space_info->bytes_readonly; +		 space_info->bytes_pinned + space_info->bytes_readonly + +		 space_info->bytes_may_use;  	if (unused < space_info->total_bytes)  		unused = space_info->total_bytes - unused; @@ -3507,6 +3508,8 @@ static u64 calc_global_metadata_size(struct btrfs_fs_info *fs_info)  	sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);  	spin_lock(&sinfo->lock); +	if (sinfo->flags & BTRFS_BLOCK_GROUP_DATA) +		data_used = 0;  	meta_used = sinfo->bytes_used;  	spin_unlock(&sinfo->lock); @@ -3534,7 +3537,8 @@ static void update_global_block_rsv(struct btrfs_fs_info *fs_info)  	block_rsv->size = num_bytes;  	num_bytes = sinfo->bytes_used + sinfo->bytes_pinned + -		    sinfo->bytes_reserved + sinfo->bytes_readonly; +		    sinfo->bytes_reserved + sinfo->bytes_readonly + +		    sinfo->bytes_may_use;  	if (sinfo->total_bytes > num_bytes) {  		num_bytes = sinfo->total_bytes - num_bytes;  | 
