aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 3113e0b79b99..4d3774605a85 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3969,12 +3969,16 @@ commit_trans:
3969 data_sinfo->flags, bytes, 1); 3969 data_sinfo->flags, bytes, 1);
3970 return -ENOSPC; 3970 return -ENOSPC;
3971 } 3971 }
3972 ret = btrfs_qgroup_reserve(root, bytes);
3973 if (ret)
3974 goto out;
3972 data_sinfo->bytes_may_use += bytes; 3975 data_sinfo->bytes_may_use += bytes;
3973 trace_btrfs_space_reservation(root->fs_info, "space_info", 3976 trace_btrfs_space_reservation(root->fs_info, "space_info",
3974 data_sinfo->flags, bytes, 1); 3977 data_sinfo->flags, bytes, 1);
3978out:
3975 spin_unlock(&data_sinfo->lock); 3979 spin_unlock(&data_sinfo->lock);
3976 3980
3977 return 0; 3981 return ret;
3978} 3982}
3979 3983
3980/* 3984/*
@@ -3991,6 +3995,7 @@ void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
3991 data_sinfo = root->fs_info->data_sinfo; 3995 data_sinfo = root->fs_info->data_sinfo;
3992 spin_lock(&data_sinfo->lock); 3996 spin_lock(&data_sinfo->lock);
3993 WARN_ON(data_sinfo->bytes_may_use < bytes); 3997 WARN_ON(data_sinfo->bytes_may_use < bytes);
3998 btrfs_qgroup_free(root, bytes);
3994 data_sinfo->bytes_may_use -= bytes; 3999 data_sinfo->bytes_may_use -= bytes;
3995 trace_btrfs_space_reservation(root->fs_info, "space_info", 4000 trace_btrfs_space_reservation(root->fs_info, "space_info",
3996 data_sinfo->flags, bytes, 0); 4001 data_sinfo->flags, bytes, 0);
@@ -5391,8 +5396,7 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
5391 spin_unlock(&BTRFS_I(inode)->lock); 5396 spin_unlock(&BTRFS_I(inode)->lock);
5392 5397
5393 if (root->fs_info->quota_enabled) { 5398 if (root->fs_info->quota_enabled) {
5394 ret = btrfs_qgroup_reserve(root, num_bytes + 5399 ret = btrfs_qgroup_reserve(root, nr_extents * root->nodesize);
5395 nr_extents * root->nodesize);
5396 if (ret) 5400 if (ret)
5397 goto out_fail; 5401 goto out_fail;
5398 } 5402 }
@@ -5400,8 +5404,7 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
5400 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush); 5404 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
5401 if (unlikely(ret)) { 5405 if (unlikely(ret)) {
5402 if (root->fs_info->quota_enabled) 5406 if (root->fs_info->quota_enabled)
5403 btrfs_qgroup_free(root, num_bytes + 5407 btrfs_qgroup_free(root, nr_extents * root->nodesize);
5404 nr_extents * root->nodesize);
5405 goto out_fail; 5408 goto out_fail;
5406 } 5409 }
5407 5410
@@ -5522,8 +5525,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
5522 trace_btrfs_space_reservation(root->fs_info, "delalloc", 5525 trace_btrfs_space_reservation(root->fs_info, "delalloc",
5523 btrfs_ino(inode), to_free, 0); 5526 btrfs_ino(inode), to_free, 0);
5524 if (root->fs_info->quota_enabled) { 5527 if (root->fs_info->quota_enabled) {
5525 btrfs_qgroup_free(root, num_bytes + 5528 btrfs_qgroup_free(root, dropped * root->nodesize);
5526 dropped * root->nodesize);
5527 } 5529 }
5528 5530
5529 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv, 5531 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv,