diff options
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r-- | fs/btrfs/extent-tree.c | 16 |
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); |
3978 | out: | ||
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, |