summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/ctree.h12
-rw-r--r--fs/btrfs/extent-tree.c109
-rw-r--r--fs/btrfs/file.c15
-rw-r--r--fs/btrfs/inode-map.c6
-rw-r--r--fs/btrfs/inode.c34
-rw-r--r--fs/btrfs/ioctl.c6
-rw-r--r--fs/btrfs/qgroup.c18
-rw-r--r--fs/btrfs/qgroup.h8
-rw-r--r--fs/btrfs/relocation.c8
9 files changed, 60 insertions, 156 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 0f1ade133111..0d0f5d2a534a 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3452,11 +3452,9 @@ enum btrfs_reserve_flush_enum {
3452 BTRFS_RESERVE_FLUSH_ALL, 3452 BTRFS_RESERVE_FLUSH_ALL,
3453}; 3453};
3454 3454
3455int btrfs_check_data_free_space(struct inode *inode, u64 bytes, u64 write_bytes); 3455int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
3456int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
3457int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes); 3456int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes);
3458void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes); 3457void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
3459void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
3460void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, 3458void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
3461 struct btrfs_root *root); 3459 struct btrfs_root *root);
3462void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans); 3460void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
@@ -3472,10 +3470,8 @@ void btrfs_subvolume_release_metadata(struct btrfs_root *root,
3472 u64 qgroup_reserved); 3470 u64 qgroup_reserved);
3473int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); 3471int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes);
3474void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); 3472void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes);
3475int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes); 3473int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len);
3476int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len); 3474void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
3477void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes);
3478void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
3479void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type); 3475void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
3480struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root, 3476struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root,
3481 unsigned short type); 3477 unsigned short type);
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 8c8d8b386cad..3a23225e83f4 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3356,7 +3356,7 @@ again:
3356 num_pages *= 16; 3356 num_pages *= 16;
3357 num_pages *= PAGE_CACHE_SIZE; 3357 num_pages *= PAGE_CACHE_SIZE;
3358 3358
3359 ret = __btrfs_check_data_free_space(inode, 0, num_pages); 3359 ret = btrfs_check_data_free_space(inode, 0, num_pages);
3360 if (ret) 3360 if (ret)
3361 goto out_put; 3361 goto out_put;
3362 3362
@@ -3365,7 +3365,7 @@ again:
3365 &alloc_hint); 3365 &alloc_hint);
3366 if (!ret) 3366 if (!ret)
3367 dcs = BTRFS_DC_SETUP; 3367 dcs = BTRFS_DC_SETUP;
3368 __btrfs_free_reserved_data_space(inode, 0, num_pages); 3368 btrfs_free_reserved_data_space(inode, 0, num_pages);
3369 3369
3370out_put: 3370out_put:
3371 iput(inode); 3371 iput(inode);
@@ -4034,27 +4034,11 @@ commit_trans:
4034} 4034}
4035 4035
4036/* 4036/*
4037 * This will check the space that the inode allocates from to make sure we have
4038 * enough space for bytes.
4039 */
4040int btrfs_check_data_free_space(struct inode *inode, u64 bytes, u64 write_bytes)
4041{
4042 struct btrfs_root *root = BTRFS_I(inode)->root;
4043 int ret;
4044
4045 ret = btrfs_alloc_data_chunk_ondemand(inode, bytes);
4046 if (ret < 0)
4047 return ret;
4048 ret = btrfs_qgroup_reserve(root, write_bytes);
4049 return ret;
4050}
4051
4052/*
4053 * New check_data_free_space() with ability for precious data reservation 4037 * New check_data_free_space() with ability for precious data reservation
4054 * Will replace old btrfs_check_data_free_space(), but for patch split, 4038 * Will replace old btrfs_check_data_free_space(), but for patch split,
4055 * add a new function first and then replace it. 4039 * add a new function first and then replace it.
4056 */ 4040 */
4057int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len) 4041int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
4058{ 4042{
4059 struct btrfs_root *root = BTRFS_I(inode)->root; 4043 struct btrfs_root *root = BTRFS_I(inode)->root;
4060 int ret; 4044 int ret;
@@ -4074,33 +4058,13 @@ int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
4074} 4058}
4075 4059
4076/* 4060/*
4077 * Called if we need to clear a data reservation for this inode.
4078 */
4079void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
4080{
4081 struct btrfs_root *root = BTRFS_I(inode)->root;
4082 struct btrfs_space_info *data_sinfo;
4083
4084 /* make sure bytes are sectorsize aligned */
4085 bytes = ALIGN(bytes, root->sectorsize);
4086
4087 data_sinfo = root->fs_info->data_sinfo;
4088 spin_lock(&data_sinfo->lock);
4089 WARN_ON(data_sinfo->bytes_may_use < bytes);
4090 data_sinfo->bytes_may_use -= bytes;
4091 trace_btrfs_space_reservation(root->fs_info, "space_info",
4092 data_sinfo->flags, bytes, 0);
4093 spin_unlock(&data_sinfo->lock);
4094}
4095
4096/*
4097 * Called if we need to clear a data reservation for this inode 4061 * Called if we need to clear a data reservation for this inode
4098 * Normally in a error case. 4062 * Normally in a error case.
4099 * 4063 *
4100 * This one will handle the per-indoe data rsv map for accurate reserved 4064 * This one will handle the per-indoe data rsv map for accurate reserved
4101 * space framework. 4065 * space framework.
4102 */ 4066 */
4103void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len) 4067void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
4104{ 4068{
4105 struct btrfs_root *root = BTRFS_I(inode)->root; 4069 struct btrfs_root *root = BTRFS_I(inode)->root;
4106 struct btrfs_space_info *data_sinfo; 4070 struct btrfs_space_info *data_sinfo;
@@ -5715,7 +5679,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
5715} 5679}
5716 5680
5717/** 5681/**
5718 * __btrfs_delalloc_reserve_space - reserve data and metadata space for 5682 * btrfs_delalloc_reserve_space - reserve data and metadata space for
5719 * delalloc 5683 * delalloc
5720 * @inode: inode we're writing to 5684 * @inode: inode we're writing to
5721 * @start: start range we are writing to 5685 * @start: start range we are writing to
@@ -5739,53 +5703,21 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
5739 * Return 0 for success 5703 * Return 0 for success
5740 * Return <0 for error(-ENOSPC or -EQUOT) 5704 * Return <0 for error(-ENOSPC or -EQUOT)
5741 */ 5705 */
5742int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len) 5706int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
5743{ 5707{
5744 int ret; 5708 int ret;
5745 5709
5746 ret = __btrfs_check_data_free_space(inode, start, len); 5710 ret = btrfs_check_data_free_space(inode, start, len);
5747 if (ret < 0) 5711 if (ret < 0)
5748 return ret; 5712 return ret;
5749 ret = btrfs_delalloc_reserve_metadata(inode, len); 5713 ret = btrfs_delalloc_reserve_metadata(inode, len);
5750 if (ret < 0) 5714 if (ret < 0)
5751 __btrfs_free_reserved_data_space(inode, start, len); 5715 btrfs_free_reserved_data_space(inode, start, len);
5752 return ret; 5716 return ret;
5753} 5717}
5754 5718
5755/** 5719/**
5756 * btrfs_delalloc_reserve_space - reserve data and metadata space for delalloc 5720 * btrfs_delalloc_release_space - release data and metadata space for delalloc
5757 * @inode: inode we're writing to
5758 * @num_bytes: the number of bytes we want to allocate
5759 *
5760 * This will do the following things
5761 *
5762 * o reserve space in the data space info for num_bytes
5763 * o reserve space in the metadata space info based on number of outstanding
5764 * extents and how much csums will be needed
5765 * o add to the inodes ->delalloc_bytes
5766 * o add it to the fs_info's delalloc inodes list.
5767 *
5768 * This will return 0 for success and -ENOSPC if there is no space left.
5769 */
5770int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
5771{
5772 int ret;
5773
5774 ret = btrfs_check_data_free_space(inode, num_bytes, num_bytes);
5775 if (ret)
5776 return ret;
5777
5778 ret = btrfs_delalloc_reserve_metadata(inode, num_bytes);
5779 if (ret) {
5780 btrfs_free_reserved_data_space(inode, num_bytes);
5781 return ret;
5782 }
5783
5784 return 0;
5785}
5786
5787/**
5788 * __btrfs_delalloc_release_space - release data and metadata space for delalloc
5789 * @inode: inode we're releasing space for 5721 * @inode: inode we're releasing space for
5790 * @start: start position of the space already reserved 5722 * @start: start position of the space already reserved
5791 * @len: the len of the space already reserved 5723 * @len: the len of the space already reserved
@@ -5799,29 +5731,10 @@ int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
5799 * list if there are no delalloc bytes left. 5731 * list if there are no delalloc bytes left.
5800 * Also it will handle the qgroup reserved space. 5732 * Also it will handle the qgroup reserved space.
5801 */ 5733 */
5802void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len) 5734void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
5803{ 5735{
5804 btrfs_delalloc_release_metadata(inode, len); 5736 btrfs_delalloc_release_metadata(inode, len);
5805 __btrfs_free_reserved_data_space(inode, start, len); 5737 btrfs_free_reserved_data_space(inode, start, len);
5806}
5807
5808/**
5809 * btrfs_delalloc_release_space - release data and metadata space for delalloc
5810 * @inode: inode we're releasing space for
5811 * @num_bytes: the number of bytes we want to free up
5812 *
5813 * This must be matched with a call to btrfs_delalloc_reserve_space. This is
5814 * called in the case that we don't need the metadata AND data reservations
5815 * anymore. So if there is an error or we insert an inline extent.
5816 *
5817 * This function will release the metadata space that was not used and will
5818 * decrement ->delalloc_bytes and remove it from the fs_info delalloc_inodes
5819 * list if there are no delalloc bytes left.
5820 */
5821void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes)
5822{
5823 btrfs_delalloc_release_metadata(inode, num_bytes);
5824 btrfs_free_reserved_data_space(inode, num_bytes);
5825} 5738}
5826 5739
5827static int update_block_group(struct btrfs_trans_handle *trans, 5740static int update_block_group(struct btrfs_trans_handle *trans,
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 29b3702fe10d..47785c8a7d39 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1529,7 +1529,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
1529 goto reserve_metadata; 1529 goto reserve_metadata;
1530 } 1530 }
1531 } 1531 }
1532 ret = __btrfs_check_data_free_space(inode, pos, write_bytes); 1532 ret = btrfs_check_data_free_space(inode, pos, write_bytes);
1533 if (ret < 0) 1533 if (ret < 0)
1534 break; 1534 break;
1535 1535
@@ -1537,8 +1537,8 @@ reserve_metadata:
1537 ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes); 1537 ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes);
1538 if (ret) { 1538 if (ret) {
1539 if (!only_release_metadata) 1539 if (!only_release_metadata)
1540 __btrfs_free_reserved_data_space(inode, pos, 1540 btrfs_free_reserved_data_space(inode, pos,
1541 write_bytes); 1541 write_bytes);
1542 else 1542 else
1543 btrfs_end_write_no_snapshoting(root); 1543 btrfs_end_write_no_snapshoting(root);
1544 break; 1544 break;
@@ -1608,7 +1608,7 @@ again:
1608 btrfs_delalloc_release_metadata(inode, 1608 btrfs_delalloc_release_metadata(inode,
1609 release_bytes); 1609 release_bytes);
1610 else 1610 else
1611 __btrfs_delalloc_release_space(inode, pos, 1611 btrfs_delalloc_release_space(inode, pos,
1612 release_bytes); 1612 release_bytes);
1613 } 1613 }
1614 1614
@@ -1661,8 +1661,7 @@ again:
1661 btrfs_end_write_no_snapshoting(root); 1661 btrfs_end_write_no_snapshoting(root);
1662 btrfs_delalloc_release_metadata(inode, release_bytes); 1662 btrfs_delalloc_release_metadata(inode, release_bytes);
1663 } else { 1663 } else {
1664 __btrfs_delalloc_release_space(inode, pos, 1664 btrfs_delalloc_release_space(inode, pos, release_bytes);
1665 release_bytes);
1666 } 1665 }
1667 } 1666 }
1668 1667
@@ -2708,8 +2707,8 @@ static long btrfs_fallocate(struct file *file, int mode,
2708out: 2707out:
2709 mutex_unlock(&inode->i_mutex); 2708 mutex_unlock(&inode->i_mutex);
2710 /* Let go of our reservation. */ 2709 /* Let go of our reservation. */
2711 __btrfs_free_reserved_data_space(inode, alloc_start, 2710 btrfs_free_reserved_data_space(inode, alloc_start,
2712 alloc_end - alloc_start); 2711 alloc_end - alloc_start);
2713 return ret; 2712 return ret;
2714} 2713}
2715 2714
diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
index 78bc09c552ab..767a6056ac45 100644
--- a/fs/btrfs/inode-map.c
+++ b/fs/btrfs/inode-map.c
@@ -488,17 +488,17 @@ again:
488 /* Just to make sure we have enough space */ 488 /* Just to make sure we have enough space */
489 prealloc += 8 * PAGE_CACHE_SIZE; 489 prealloc += 8 * PAGE_CACHE_SIZE;
490 490
491 ret = __btrfs_delalloc_reserve_space(inode, 0, prealloc); 491 ret = btrfs_delalloc_reserve_space(inode, 0, prealloc);
492 if (ret) 492 if (ret)
493 goto out_put; 493 goto out_put;
494 494
495 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc, 495 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc,
496 prealloc, prealloc, &alloc_hint); 496 prealloc, prealloc, &alloc_hint);
497 if (ret) { 497 if (ret) {
498 __btrfs_delalloc_release_space(inode, 0, prealloc); 498 btrfs_delalloc_release_space(inode, 0, prealloc);
499 goto out_put; 499 goto out_put;
500 } 500 }
501 __btrfs_free_reserved_data_space(inode, 0, prealloc); 501 btrfs_free_reserved_data_space(inode, 0, prealloc);
502 502
503 ret = btrfs_write_out_ino_cache(root, trans, path, inode); 503 ret = btrfs_write_out_ino_cache(root, trans, path, inode);
504out_put: 504out_put:
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a3942a70f97d..a34e5a9c51cb 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1769,8 +1769,8 @@ static void btrfs_clear_bit_hook(struct inode *inode,
1769 1769
1770 if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID 1770 if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
1771 && do_list && !(state->state & EXTENT_NORESERVE)) 1771 && do_list && !(state->state & EXTENT_NORESERVE))
1772 __btrfs_free_reserved_data_space(inode, state->start, 1772 btrfs_free_reserved_data_space(inode, state->start,
1773 len); 1773 len);
1774 1774
1775 __percpu_counter_add(&root->fs_info->delalloc_bytes, -len, 1775 __percpu_counter_add(&root->fs_info->delalloc_bytes, -len,
1776 root->fs_info->delalloc_batch); 1776 root->fs_info->delalloc_batch);
@@ -1993,8 +1993,8 @@ again:
1993 goto again; 1993 goto again;
1994 } 1994 }
1995 1995
1996 ret = __btrfs_delalloc_reserve_space(inode, page_start, 1996 ret = btrfs_delalloc_reserve_space(inode, page_start,
1997 PAGE_CACHE_SIZE); 1997 PAGE_CACHE_SIZE);
1998 if (ret) { 1998 if (ret) {
1999 mapping_set_error(page->mapping, ret); 1999 mapping_set_error(page->mapping, ret);
2000 end_extent_writepage(page, ret, page_start, page_end); 2000 end_extent_writepage(page, ret, page_start, page_end);
@@ -4640,7 +4640,7 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
4640 if ((offset & (blocksize - 1)) == 0 && 4640 if ((offset & (blocksize - 1)) == 0 &&
4641 (!len || ((len & (blocksize - 1)) == 0))) 4641 (!len || ((len & (blocksize - 1)) == 0)))
4642 goto out; 4642 goto out;
4643 ret = __btrfs_delalloc_reserve_space(inode, 4643 ret = btrfs_delalloc_reserve_space(inode,
4644 round_down(from, PAGE_CACHE_SIZE), PAGE_CACHE_SIZE); 4644 round_down(from, PAGE_CACHE_SIZE), PAGE_CACHE_SIZE);
4645 if (ret) 4645 if (ret)
4646 goto out; 4646 goto out;
@@ -4648,7 +4648,7 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
4648again: 4648again:
4649 page = find_or_create_page(mapping, index, mask); 4649 page = find_or_create_page(mapping, index, mask);
4650 if (!page) { 4650 if (!page) {
4651 __btrfs_delalloc_release_space(inode, 4651 btrfs_delalloc_release_space(inode,
4652 round_down(from, PAGE_CACHE_SIZE), 4652 round_down(from, PAGE_CACHE_SIZE),
4653 PAGE_CACHE_SIZE); 4653 PAGE_CACHE_SIZE);
4654 ret = -ENOMEM; 4654 ret = -ENOMEM;
@@ -4718,8 +4718,8 @@ again:
4718 4718
4719out_unlock: 4719out_unlock:
4720 if (ret) 4720 if (ret)
4721 __btrfs_delalloc_release_space(inode, page_start, 4721 btrfs_delalloc_release_space(inode, page_start,
4722 PAGE_CACHE_SIZE); 4722 PAGE_CACHE_SIZE);
4723 unlock_page(page); 4723 unlock_page(page);
4724 page_cache_release(page); 4724 page_cache_release(page);
4725out: 4725out:
@@ -7650,7 +7650,7 @@ unlock:
7650 spin_unlock(&BTRFS_I(inode)->lock); 7650 spin_unlock(&BTRFS_I(inode)->lock);
7651 } 7651 }
7652 7652
7653 __btrfs_free_reserved_data_space(inode, start, len); 7653 btrfs_free_reserved_data_space(inode, start, len);
7654 WARN_ON(dio_data->reserve < len); 7654 WARN_ON(dio_data->reserve < len);
7655 dio_data->reserve -= len; 7655 dio_data->reserve -= len;
7656 current->journal_info = dio_data; 7656 current->journal_info = dio_data;
@@ -8440,7 +8440,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
8440 mutex_unlock(&inode->i_mutex); 8440 mutex_unlock(&inode->i_mutex);
8441 relock = true; 8441 relock = true;
8442 } 8442 }
8443 ret = __btrfs_delalloc_reserve_space(inode, offset, count); 8443 ret = btrfs_delalloc_reserve_space(inode, offset, count);
8444 if (ret) 8444 if (ret)
8445 goto out; 8445 goto out;
8446 dio_data.outstanding_extents = div64_u64(count + 8446 dio_data.outstanding_extents = div64_u64(count +
@@ -8469,11 +8469,11 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
8469 current->journal_info = NULL; 8469 current->journal_info = NULL;
8470 if (ret < 0 && ret != -EIOCBQUEUED) { 8470 if (ret < 0 && ret != -EIOCBQUEUED) {
8471 if (dio_data.reserve) 8471 if (dio_data.reserve)
8472 __btrfs_delalloc_release_space(inode, offset, 8472 btrfs_delalloc_release_space(inode, offset,
8473 dio_data.reserve); 8473 dio_data.reserve);
8474 } else if (ret >= 0 && (size_t)ret < count) 8474 } else if (ret >= 0 && (size_t)ret < count)
8475 __btrfs_delalloc_release_space(inode, offset, 8475 btrfs_delalloc_release_space(inode, offset,
8476 count - (size_t)ret); 8476 count - (size_t)ret);
8477 } 8477 }
8478out: 8478out:
8479 if (wakeup) 8479 if (wakeup)
@@ -8684,8 +8684,8 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
8684 page_start = page_offset(page); 8684 page_start = page_offset(page);
8685 page_end = page_start + PAGE_CACHE_SIZE - 1; 8685 page_end = page_start + PAGE_CACHE_SIZE - 1;
8686 8686
8687 ret = __btrfs_delalloc_reserve_space(inode, page_start, 8687 ret = btrfs_delalloc_reserve_space(inode, page_start,
8688 PAGE_CACHE_SIZE); 8688 PAGE_CACHE_SIZE);
8689 if (!ret) { 8689 if (!ret) {
8690 ret = file_update_time(vma->vm_file); 8690 ret = file_update_time(vma->vm_file);
8691 reserved = 1; 8691 reserved = 1;
@@ -8780,7 +8780,7 @@ out_unlock:
8780 } 8780 }
8781 unlock_page(page); 8781 unlock_page(page);
8782out: 8782out:
8783 __btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE); 8783 btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE);
8784out_noreserve: 8784out_noreserve:
8785 sb_end_pagefault(inode->i_sb); 8785 sb_end_pagefault(inode->i_sb);
8786 return ret; 8786 return ret;
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 70732e629b0f..7ed033a84212 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -1119,7 +1119,7 @@ static int cluster_pages_for_defrag(struct inode *inode,
1119 1119
1120 page_cnt = min_t(u64, (u64)num_pages, (u64)file_end - start_index + 1); 1120 page_cnt = min_t(u64, (u64)num_pages, (u64)file_end - start_index + 1);
1121 1121
1122 ret = __btrfs_delalloc_reserve_space(inode, 1122 ret = btrfs_delalloc_reserve_space(inode,
1123 start_index << PAGE_CACHE_SHIFT, 1123 start_index << PAGE_CACHE_SHIFT,
1124 page_cnt << PAGE_CACHE_SHIFT); 1124 page_cnt << PAGE_CACHE_SHIFT);
1125 if (ret) 1125 if (ret)
@@ -1210,7 +1210,7 @@ again:
1210 spin_lock(&BTRFS_I(inode)->lock); 1210 spin_lock(&BTRFS_I(inode)->lock);
1211 BTRFS_I(inode)->outstanding_extents++; 1211 BTRFS_I(inode)->outstanding_extents++;
1212 spin_unlock(&BTRFS_I(inode)->lock); 1212 spin_unlock(&BTRFS_I(inode)->lock);
1213 __btrfs_delalloc_release_space(inode, 1213 btrfs_delalloc_release_space(inode,
1214 start_index << PAGE_CACHE_SHIFT, 1214 start_index << PAGE_CACHE_SHIFT,
1215 (page_cnt - i_done) << PAGE_CACHE_SHIFT); 1215 (page_cnt - i_done) << PAGE_CACHE_SHIFT);
1216 } 1216 }
@@ -1237,7 +1237,7 @@ out:
1237 unlock_page(pages[i]); 1237 unlock_page(pages[i]);
1238 page_cache_release(pages[i]); 1238 page_cache_release(pages[i]);
1239 } 1239 }
1240 __btrfs_delalloc_release_space(inode, 1240 btrfs_delalloc_release_space(inode,
1241 start_index << PAGE_CACHE_SHIFT, 1241 start_index << PAGE_CACHE_SHIFT,
1242 page_cnt << PAGE_CACHE_SHIFT); 1242 page_cnt << PAGE_CACHE_SHIFT);
1243 return ret; 1243 return ret;
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 897a49d71638..7d5339da01b8 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -2035,7 +2035,7 @@ out:
2035 return ret; 2035 return ret;
2036} 2036}
2037 2037
2038int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes) 2038static int qgroup_reserve(struct btrfs_root *root, u64 num_bytes)
2039{ 2039{
2040 struct btrfs_root *quota_root; 2040 struct btrfs_root *quota_root;
2041 struct btrfs_qgroup *qgroup; 2041 struct btrfs_qgroup *qgroup;
@@ -2168,6 +2168,11 @@ out:
2168 spin_unlock(&fs_info->qgroup_lock); 2168 spin_unlock(&fs_info->qgroup_lock);
2169} 2169}
2170 2170
2171static inline void qgroup_free(struct btrfs_root *root, u64 num_bytes)
2172{
2173 return btrfs_qgroup_free_refroot(root->fs_info, root->objectid,
2174 num_bytes);
2175}
2171void assert_qgroups_uptodate(struct btrfs_trans_handle *trans) 2176void assert_qgroups_uptodate(struct btrfs_trans_handle *trans)
2172{ 2177{
2173 if (list_empty(&trans->qgroup_ref_list) && !trans->delayed_ref_elem.seq) 2178 if (list_empty(&trans->qgroup_ref_list) && !trans->delayed_ref_elem.seq)
@@ -2517,7 +2522,7 @@ int btrfs_qgroup_reserve_data(struct inode *inode, u64 start, u64 len)
2517 &changeset); 2522 &changeset);
2518 if (ret < 0) 2523 if (ret < 0)
2519 goto cleanup; 2524 goto cleanup;
2520 ret = btrfs_qgroup_reserve(root, changeset.bytes_changed); 2525 ret = qgroup_reserve(root, changeset.bytes_changed);
2521 if (ret < 0) 2526 if (ret < 0)
2522 goto cleanup; 2527 goto cleanup;
2523 2528
@@ -2553,8 +2558,7 @@ static int __btrfs_qgroup_release_data(struct inode *inode, u64 start, u64 len,
2553 goto out; 2558 goto out;
2554 2559
2555 if (free) 2560 if (free)
2556 btrfs_qgroup_free(BTRFS_I(inode)->root, 2561 qgroup_free(BTRFS_I(inode)->root, changeset.bytes_changed);
2557 changeset.bytes_changed);
2558out: 2562out:
2559 ulist_free(changeset.range_changed); 2563 ulist_free(changeset.range_changed);
2560 return ret; 2564 return ret;
@@ -2604,7 +2608,7 @@ int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes)
2604 return 0; 2608 return 0;
2605 2609
2606 BUG_ON(num_bytes != round_down(num_bytes, root->nodesize)); 2610 BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
2607 ret = btrfs_qgroup_reserve(root, num_bytes); 2611 ret = qgroup_reserve(root, num_bytes);
2608 if (ret < 0) 2612 if (ret < 0)
2609 return ret; 2613 return ret;
2610 atomic_add(num_bytes, &root->qgroup_meta_rsv); 2614 atomic_add(num_bytes, &root->qgroup_meta_rsv);
@@ -2621,7 +2625,7 @@ void btrfs_qgroup_free_meta_all(struct btrfs_root *root)
2621 reserved = atomic_xchg(&root->qgroup_meta_rsv, 0); 2625 reserved = atomic_xchg(&root->qgroup_meta_rsv, 0);
2622 if (reserved == 0) 2626 if (reserved == 0)
2623 return; 2627 return;
2624 btrfs_qgroup_free(root, reserved); 2628 qgroup_free(root, reserved);
2625} 2629}
2626 2630
2627void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes) 2631void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes)
@@ -2632,5 +2636,5 @@ void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes)
2632 BUG_ON(num_bytes != round_down(num_bytes, root->nodesize)); 2636 BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
2633 WARN_ON(atomic_read(&root->qgroup_meta_rsv) < num_bytes); 2637 WARN_ON(atomic_read(&root->qgroup_meta_rsv) < num_bytes);
2634 atomic_sub(num_bytes, &root->qgroup_meta_rsv); 2638 atomic_sub(num_bytes, &root->qgroup_meta_rsv);
2635 btrfs_qgroup_free(root, num_bytes); 2639 qgroup_free(root, num_bytes);
2636} 2640}
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index 7d1c87cd3c78..adb03da3d298 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -71,15 +71,8 @@ int btrfs_run_qgroups(struct btrfs_trans_handle *trans,
71int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, 71int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
72 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid, 72 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid,
73 struct btrfs_qgroup_inherit *inherit); 73 struct btrfs_qgroup_inherit *inherit);
74int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes);
75void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info, 74void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info,
76 u64 ref_root, u64 num_bytes); 75 u64 ref_root, u64 num_bytes);
77static inline void btrfs_qgroup_free(struct btrfs_root *root, u64 num_bytes)
78{
79 return btrfs_qgroup_free_refroot(root->fs_info, root->objectid,
80 num_bytes);
81}
82
83/* 76/*
84 * TODO: Add proper trace point for it, as btrfs_qgroup_free() is 77 * TODO: Add proper trace point for it, as btrfs_qgroup_free() is
85 * called by everywhere, can't provide good trace for delayed ref case. 78 * called by everywhere, can't provide good trace for delayed ref case.
@@ -89,7 +82,6 @@ static inline void btrfs_qgroup_free_delayed_ref(struct btrfs_fs_info *fs_info,
89{ 82{
90 btrfs_qgroup_free_refroot(fs_info, ref_root, num_bytes); 83 btrfs_qgroup_free_refroot(fs_info, ref_root, num_bytes);
91} 84}
92
93void assert_qgroups_uptodate(struct btrfs_trans_handle *trans); 85void assert_qgroups_uptodate(struct btrfs_trans_handle *trans);
94 86
95#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS 87#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 490c9e298c58..a7dc45622e90 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -3034,8 +3034,8 @@ int prealloc_file_extent_cluster(struct inode *inode,
3034 BUG_ON(cluster->start != cluster->boundary[0]); 3034 BUG_ON(cluster->start != cluster->boundary[0]);
3035 mutex_lock(&inode->i_mutex); 3035 mutex_lock(&inode->i_mutex);
3036 3036
3037 ret = __btrfs_check_data_free_space(inode, cluster->start, 3037 ret = btrfs_check_data_free_space(inode, cluster->start,
3038 cluster->end + 1 - cluster->start); 3038 cluster->end + 1 - cluster->start);
3039 if (ret) 3039 if (ret)
3040 goto out; 3040 goto out;
3041 3041
@@ -3056,8 +3056,8 @@ int prealloc_file_extent_cluster(struct inode *inode,
3056 break; 3056 break;
3057 nr++; 3057 nr++;
3058 } 3058 }
3059 __btrfs_free_reserved_data_space(inode, cluster->start, 3059 btrfs_free_reserved_data_space(inode, cluster->start,
3060 cluster->end + 1 - cluster->start); 3060 cluster->end + 1 - cluster->start);
3061out: 3061out:
3062 mutex_unlock(&inode->i_mutex); 3062 mutex_unlock(&inode->i_mutex);
3063 return ret; 3063 return ret;