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.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index c08337a83ace..2ce16f97730a 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4565,6 +4565,13 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
4565 csum_bytes = BTRFS_I(inode)->csum_bytes; 4565 csum_bytes = BTRFS_I(inode)->csum_bytes;
4566 spin_unlock(&BTRFS_I(inode)->lock); 4566 spin_unlock(&BTRFS_I(inode)->lock);
4567 4567
4568 if (root->fs_info->quota_enabled) {
4569 ret = btrfs_qgroup_reserve(root, num_bytes +
4570 nr_extents * root->leafsize);
4571 if (ret)
4572 return ret;
4573 }
4574
4568 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush); 4575 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
4569 if (ret) { 4576 if (ret) {
4570 u64 to_free = 0; 4577 u64 to_free = 0;
@@ -4643,6 +4650,11 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
4643 4650
4644 trace_btrfs_space_reservation(root->fs_info, "delalloc", 4651 trace_btrfs_space_reservation(root->fs_info, "delalloc",
4645 btrfs_ino(inode), to_free, 0); 4652 btrfs_ino(inode), to_free, 0);
4653 if (root->fs_info->quota_enabled) {
4654 btrfs_qgroup_free(root, num_bytes +
4655 dropped * root->leafsize);
4656 }
4657
4646 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv, 4658 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv,
4647 to_free); 4659 to_free);
4648} 4660}