Skip to content

Commit 7cf5b97

Browse files
Qu Wenruomasoncl
authored andcommitted
btrfs: qgroup: Cleanup old inaccurate facilities
Cleanup the old facilities which use old btrfs_qgroup_reserve() function call, replace them with the newer version, and remove the "__" prefix in them. Also, make btrfs_qgroup_reserve/free() functions private, as they are now only used inside qgroup codes. Now, the whole btrfs qgroup is swithed to use the new reserve facilities. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: Chris Mason <clm@fb.com>
1 parent df48063 commit 7cf5b97

File tree

9 files changed

+60
-156
lines changed

9 files changed

+60
-156
lines changed

fs/btrfs/ctree.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3452,11 +3452,9 @@ enum btrfs_reserve_flush_enum {
34523452
BTRFS_RESERVE_FLUSH_ALL,
34533453
};
34543454

3455-
int btrfs_check_data_free_space(struct inode *inode, u64 bytes, u64 write_bytes);
3456-
int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
3455+
int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
34573456
int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes);
3458-
void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes);
3459-
void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
3457+
void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
34603458
void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
34613459
struct btrfs_root *root);
34623460
void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
@@ -3472,10 +3470,8 @@ void btrfs_subvolume_release_metadata(struct btrfs_root *root,
34723470
u64 qgroup_reserved);
34733471
int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes);
34743472
void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes);
3475-
int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes);
3476-
int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len);
3477-
void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes);
3478-
void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
3473+
int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len);
3474+
void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
34793475
void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
34803476
struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root,
34813477
unsigned short type);

fs/btrfs/extent-tree.c

Lines changed: 11 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -3356,7 +3356,7 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,
33563356
num_pages *= 16;
33573357
num_pages *= PAGE_CACHE_SIZE;
33583358

3359-
ret = __btrfs_check_data_free_space(inode, 0, num_pages);
3359+
ret = btrfs_check_data_free_space(inode, 0, num_pages);
33603360
if (ret)
33613361
goto out_put;
33623362

@@ -3365,7 +3365,7 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,
33653365
&alloc_hint);
33663366
if (!ret)
33673367
dcs = BTRFS_DC_SETUP;
3368-
__btrfs_free_reserved_data_space(inode, 0, num_pages);
3368+
btrfs_free_reserved_data_space(inode, 0, num_pages);
33693369

33703370
out_put:
33713371
iput(inode);
@@ -4033,28 +4033,12 @@ int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes)
40334033
return ret;
40344034
}
40354035

4036-
/*
4037-
* This will check the space that the inode allocates from to make sure we have
4038-
* enough space for bytes.
4039-
*/
4040-
int 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-
40524036
/*
40534037
* New check_data_free_space() with ability for precious data reservation
40544038
* Will replace old btrfs_check_data_free_space(), but for patch split,
40554039
* add a new function first and then replace it.
40564040
*/
4057-
int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
4041+
int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
40584042
{
40594043
struct btrfs_root *root = BTRFS_I(inode)->root;
40604044
int ret;
@@ -4073,34 +4057,14 @@ int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
40734057
return ret;
40744058
}
40754059

4076-
/*
4077-
* Called if we need to clear a data reservation for this inode.
4078-
*/
4079-
void 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-
40964060
/*
40974061
* Called if we need to clear a data reservation for this inode
40984062
* Normally in a error case.
40994063
*
41004064
* This one will handle the per-indoe data rsv map for accurate reserved
41014065
* space framework.
41024066
*/
4103-
void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
4067+
void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
41044068
{
41054069
struct btrfs_root *root = BTRFS_I(inode)->root;
41064070
struct btrfs_space_info *data_sinfo;
@@ -5715,7 +5679,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
57155679
}
57165680

57175681
/**
5718-
* __btrfs_delalloc_reserve_space - reserve data and metadata space for
5682+
* btrfs_delalloc_reserve_space - reserve data and metadata space for
57195683
* delalloc
57205684
* @inode: inode we're writing to
57215685
* @start: start range we are writing to
@@ -5739,53 +5703,21 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
57395703
* Return 0 for success
57405704
* Return <0 for error(-ENOSPC or -EQUOT)
57415705
*/
5742-
int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
5706+
int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
57435707
{
57445708
int ret;
57455709

5746-
ret = __btrfs_check_data_free_space(inode, start, len);
5710+
ret = btrfs_check_data_free_space(inode, start, len);
57475711
if (ret < 0)
57485712
return ret;
57495713
ret = btrfs_delalloc_reserve_metadata(inode, len);
57505714
if (ret < 0)
5751-
__btrfs_free_reserved_data_space(inode, start, len);
5715+
btrfs_free_reserved_data_space(inode, start, len);
57525716
return ret;
57535717
}
57545718

57555719
/**
5756-
* btrfs_delalloc_reserve_space - reserve 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-
*/
5770-
int 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
5720+
* btrfs_delalloc_release_space - release data and metadata space for delalloc
57895721
* @inode: inode we're releasing space for
57905722
* @start: start position of the space already reserved
57915723
* @len: the len of the space already reserved
@@ -5799,29 +5731,10 @@ int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
57995731
* list if there are no delalloc bytes left.
58005732
* Also it will handle the qgroup reserved space.
58015733
*/
5802-
void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
5734+
void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
58035735
{
58045736
btrfs_delalloc_release_metadata(inode, len);
5805-
__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-
*/
5821-
void 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);
5737+
btrfs_free_reserved_data_space(inode, start, len);
58255738
}
58265739

58275740
static int update_block_group(struct btrfs_trans_handle *trans,

fs/btrfs/file.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,16 +1529,16 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
15291529
goto reserve_metadata;
15301530
}
15311531
}
1532-
ret = __btrfs_check_data_free_space(inode, pos, write_bytes);
1532+
ret = btrfs_check_data_free_space(inode, pos, write_bytes);
15331533
if (ret < 0)
15341534
break;
15351535

15361536
reserve_metadata:
15371537
ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes);
15381538
if (ret) {
15391539
if (!only_release_metadata)
1540-
__btrfs_free_reserved_data_space(inode, pos,
1541-
write_bytes);
1540+
btrfs_free_reserved_data_space(inode, pos,
1541+
write_bytes);
15421542
else
15431543
btrfs_end_write_no_snapshoting(root);
15441544
break;
@@ -1608,7 +1608,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
16081608
btrfs_delalloc_release_metadata(inode,
16091609
release_bytes);
16101610
else
1611-
__btrfs_delalloc_release_space(inode, pos,
1611+
btrfs_delalloc_release_space(inode, pos,
16121612
release_bytes);
16131613
}
16141614

@@ -1661,8 +1661,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
16611661
btrfs_end_write_no_snapshoting(root);
16621662
btrfs_delalloc_release_metadata(inode, release_bytes);
16631663
} else {
1664-
__btrfs_delalloc_release_space(inode, pos,
1665-
release_bytes);
1664+
btrfs_delalloc_release_space(inode, pos, release_bytes);
16661665
}
16671666
}
16681667

@@ -2708,8 +2707,8 @@ static long btrfs_fallocate(struct file *file, int mode,
27082707
out:
27092708
mutex_unlock(&inode->i_mutex);
27102709
/* Let go of our reservation. */
2711-
__btrfs_free_reserved_data_space(inode, alloc_start,
2712-
alloc_end - alloc_start);
2710+
btrfs_free_reserved_data_space(inode, alloc_start,
2711+
alloc_end - alloc_start);
27132712
return ret;
27142713
}
27152714

fs/btrfs/inode-map.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -488,17 +488,17 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
488488
/* Just to make sure we have enough space */
489489
prealloc += 8 * PAGE_CACHE_SIZE;
490490

491-
ret = __btrfs_delalloc_reserve_space(inode, 0, prealloc);
491+
ret = btrfs_delalloc_reserve_space(inode, 0, prealloc);
492492
if (ret)
493493
goto out_put;
494494

495495
ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc,
496496
prealloc, prealloc, &alloc_hint);
497497
if (ret) {
498-
__btrfs_delalloc_release_space(inode, 0, prealloc);
498+
btrfs_delalloc_release_space(inode, 0, prealloc);
499499
goto out_put;
500500
}
501-
__btrfs_free_reserved_data_space(inode, 0, prealloc);
501+
btrfs_free_reserved_data_space(inode, 0, prealloc);
502502

503503
ret = btrfs_write_out_ino_cache(root, trans, path, inode);
504504
out_put:

fs/btrfs/inode.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,8 +1769,8 @@ static void btrfs_clear_bit_hook(struct inode *inode,
17691769

17701770
if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
17711771
&& do_list && !(state->state & EXTENT_NORESERVE))
1772-
__btrfs_free_reserved_data_space(inode, state->start,
1773-
len);
1772+
btrfs_free_reserved_data_space(inode, state->start,
1773+
len);
17741774

17751775
__percpu_counter_add(&root->fs_info->delalloc_bytes, -len,
17761776
root->fs_info->delalloc_batch);
@@ -1993,8 +1993,8 @@ static void btrfs_writepage_fixup_worker(struct btrfs_work *work)
19931993
goto again;
19941994
}
19951995

1996-
ret = __btrfs_delalloc_reserve_space(inode, page_start,
1997-
PAGE_CACHE_SIZE);
1996+
ret = btrfs_delalloc_reserve_space(inode, page_start,
1997+
PAGE_CACHE_SIZE);
19981998
if (ret) {
19991999
mapping_set_error(page->mapping, ret);
20002000
end_extent_writepage(page, ret, page_start, page_end);
@@ -4640,15 +4640,15 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
46404640
if ((offset & (blocksize - 1)) == 0 &&
46414641
(!len || ((len & (blocksize - 1)) == 0)))
46424642
goto out;
4643-
ret = __btrfs_delalloc_reserve_space(inode,
4643+
ret = btrfs_delalloc_reserve_space(inode,
46444644
round_down(from, PAGE_CACHE_SIZE), PAGE_CACHE_SIZE);
46454645
if (ret)
46464646
goto out;
46474647

46484648
again:
46494649
page = find_or_create_page(mapping, index, mask);
46504650
if (!page) {
4651-
__btrfs_delalloc_release_space(inode,
4651+
btrfs_delalloc_release_space(inode,
46524652
round_down(from, PAGE_CACHE_SIZE),
46534653
PAGE_CACHE_SIZE);
46544654
ret = -ENOMEM;
@@ -4718,8 +4718,8 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
47184718

47194719
out_unlock:
47204720
if (ret)
4721-
__btrfs_delalloc_release_space(inode, page_start,
4722-
PAGE_CACHE_SIZE);
4721+
btrfs_delalloc_release_space(inode, page_start,
4722+
PAGE_CACHE_SIZE);
47234723
unlock_page(page);
47244724
page_cache_release(page);
47254725
out:
@@ -7650,7 +7650,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
76507650
spin_unlock(&BTRFS_I(inode)->lock);
76517651
}
76527652

7653-
__btrfs_free_reserved_data_space(inode, start, len);
7653+
btrfs_free_reserved_data_space(inode, start, len);
76547654
WARN_ON(dio_data->reserve < len);
76557655
dio_data->reserve -= len;
76567656
current->journal_info = dio_data;
@@ -8440,7 +8440,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
84408440
mutex_unlock(&inode->i_mutex);
84418441
relock = true;
84428442
}
8443-
ret = __btrfs_delalloc_reserve_space(inode, offset, count);
8443+
ret = btrfs_delalloc_reserve_space(inode, offset, count);
84448444
if (ret)
84458445
goto out;
84468446
dio_data.outstanding_extents = div64_u64(count +
@@ -8469,11 +8469,11 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
84698469
current->journal_info = NULL;
84708470
if (ret < 0 && ret != -EIOCBQUEUED) {
84718471
if (dio_data.reserve)
8472-
__btrfs_delalloc_release_space(inode, offset,
8473-
dio_data.reserve);
8472+
btrfs_delalloc_release_space(inode, offset,
8473+
dio_data.reserve);
84748474
} else if (ret >= 0 && (size_t)ret < count)
8475-
__btrfs_delalloc_release_space(inode, offset,
8476-
count - (size_t)ret);
8475+
btrfs_delalloc_release_space(inode, offset,
8476+
count - (size_t)ret);
84778477
}
84788478
out:
84798479
if (wakeup)
@@ -8684,8 +8684,8 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
86848684
page_start = page_offset(page);
86858685
page_end = page_start + PAGE_CACHE_SIZE - 1;
86868686

8687-
ret = __btrfs_delalloc_reserve_space(inode, page_start,
8688-
PAGE_CACHE_SIZE);
8687+
ret = btrfs_delalloc_reserve_space(inode, page_start,
8688+
PAGE_CACHE_SIZE);
86898689
if (!ret) {
86908690
ret = file_update_time(vma->vm_file);
86918691
reserved = 1;
@@ -8780,7 +8780,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
87808780
}
87818781
unlock_page(page);
87828782
out:
8783-
__btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE);
8783+
btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE);
87848784
out_noreserve:
87858785
sb_end_pagefault(inode->i_sb);
87868786
return ret;

0 commit comments

Comments
 (0)