Skip to content

Commit

Permalink
btrfs: stop using lock_extent in btrfs_buffer_uptodate
Browse files Browse the repository at this point in the history
The only other place that locks extents on the btree inode is
read_extent_buffer_subpage while reading in the partial page for a
buffer.  This means locking the extent in btrfs_buffer_uptodate does not
synchronize with anything on non-subpage file systems, and on subpage
file systems it only waits for a parallel read(-ahead) to finish,
which seems to be counter to what the callers actually expect.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Christoph Hellwig authored and David Sterba committed Jun 19, 2023
1 parent f3d315e commit 9e2aff9
Showing 1 changed file with 2 additions and 10 deletions.
12 changes: 2 additions & 10 deletions fs/btrfs/disk-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,6 @@ static void csum_tree_block(struct extent_buffer *buf, u8 *result)
*/
int btrfs_buffer_uptodate(struct extent_buffer *eb, u64 parent_transid, int atomic)
{
struct inode *btree_inode = eb->pages[0]->mapping->host;
struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
struct extent_state *cached_state = NULL;
int ret = 1;

if (!extent_buffer_uptodate(eb))
return 0;

Expand All @@ -126,19 +121,16 @@ int btrfs_buffer_uptodate(struct extent_buffer *eb, u64 parent_transid, int atom
if (atomic)
return -EAGAIN;

lock_extent(io_tree, eb->start, eb->start + eb->len - 1, &cached_state);
if (!extent_buffer_uptodate(eb) ||
btrfs_header_generation(eb) != parent_transid) {
btrfs_err_rl(eb->fs_info,
"parent transid verify failed on logical %llu mirror %u wanted %llu found %llu",
eb->start, eb->read_mirror,
parent_transid, btrfs_header_generation(eb));
clear_extent_buffer_uptodate(eb);
ret = 0;
return 0;
}
unlock_extent(io_tree, eb->start, eb->start + eb->len - 1,
&cached_state);
return ret;
return 1;
}

static bool btrfs_supported_super_csum(u16 csum_type)
Expand Down

0 comments on commit 9e2aff9

Please sign in to comment.