Commit 7c9acd44 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

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: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent c0707c9e
......@@ -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))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment