]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
btrfs: push extent lock down in submit_one_async_extent
authorJosef Bacik <josef@toxicpanda.com>
Wed, 3 Apr 2024 20:28:45 +0000 (16:28 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 May 2024 19:31:10 +0000 (21:31 +0200)
We don't need to include the time we spend in the allocator under our
extent lock protection, move it after the allocator and make sure we
lock the extent in the error case to ensure we're not clearing these
bits without the extent lock held.

Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index 549a5f32742881605972e8101de390b023d6b45d..944877a363faf9f41ce720f9e3852ad2607c4507 100644 (file)
@@ -1179,7 +1179,6 @@ static void submit_one_async_extent(struct async_chunk *async_chunk,
                goto done;
        }
 
-       lock_extent(io_tree, start, end, NULL);
        ret = btrfs_reserve_extent(root, async_extent->ram_size,
                                   async_extent->compressed_size,
                                   async_extent->compressed_size,
@@ -1195,6 +1194,8 @@ static void submit_one_async_extent(struct async_chunk *async_chunk,
                goto done;
        }
 
+       lock_extent(io_tree, start, end, NULL);
+
        /* Here we're doing allocation and writeback of the compressed pages */
        em = create_io_em(inode, start,
                          async_extent->ram_size,       /* len */