mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
btrfs: push extent lock into run_delalloc_nocow
run_delalloc_nocow is a bit special as it walks through the file extents for the inode and determines what it can nocow and what it can't. This is the more complicated area for extent locking, so start with this function. Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c0707c9e1e
commit
7c9acd440f
1 changed files with 7 additions and 5 deletions
|
@ -1977,6 +1977,8 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode,
|
|||
*/
|
||||
ASSERT(!btrfs_is_zoned(fs_info) || btrfs_is_data_reloc_root(root));
|
||||
|
||||
lock_extent(&inode->io_tree, start, end, NULL);
|
||||
|
||||
path = btrfs_alloc_path();
|
||||
if (!path) {
|
||||
ret = -ENOMEM;
|
||||
|
@ -2249,11 +2251,6 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
|
|||
const bool zoned = btrfs_is_zoned(inode->root->fs_info);
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* We're unlocked by the different fill functions below.
|
||||
*/
|
||||
lock_extent(&inode->io_tree, start, end, NULL);
|
||||
|
||||
/*
|
||||
* The range must cover part of the @locked_page, or a return of 1
|
||||
* can confuse the caller.
|
||||
|
@ -2266,6 +2263,11 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
|
|||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* We're unlocked by the different fill functions below.
|
||||
*/
|
||||
lock_extent(&inode->io_tree, start, end, NULL);
|
||||
|
||||
if (btrfs_inode_can_compress(inode) &&
|
||||
inode_need_compress(inode, start, end) &&
|
||||
run_delalloc_compressed(inode, locked_page, start, end, wbc))
|
||||
|
|
Loading…
Reference in a new issue