Skip to content

Commit

Permalink
btrfs: don't check for uptodate pages in read_extent_buffer_pages
Browse files Browse the repository at this point in the history
The only place that reads in pages and thus marks them uptodate for
the btree inode is read_extent_buffer_pages.  Which means that either
pages are already uptodate from an old buffer when creating a new
one in alloc_extent_buffer, or they will be updated by ca call
to read_extent_buffer_pages.  This means the checks for uptodate
pages in read_extent_buffer_pages and read_extent_buffer_subpage are
superfluous and can be removed.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
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 011134f commit f3d315e
Showing 1 changed file with 1 addition and 20 deletions.
21 changes: 1 addition & 20 deletions fs/btrfs/extent_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -4136,10 +4136,7 @@ static int read_extent_buffer_subpage(struct extent_buffer *eb, int wait,
return ret;
}

if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags) ||
PageUptodate(page) ||
btrfs_subpage_test_uptodate(fs_info, page, eb->start, eb->len)) {
set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags);
if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) {
unlock_extent(io_tree, eb->start, eb->start + eb->len - 1,
&cached_state);
return 0;
Expand All @@ -4166,7 +4163,6 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
int i;
struct page *page;
int locked_pages = 0;
int all_uptodate = 1;
int num_pages;

if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags))
Expand Down Expand Up @@ -4201,21 +4197,6 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
}
locked_pages++;
}
/*
* We need to firstly lock all pages to make sure that
* the uptodate bit of our pages won't be affected by
* clear_extent_buffer_uptodate().
*/
for (i = 0; i < num_pages; i++) {
page = eb->pages[i];
if (!PageUptodate(page))
all_uptodate = 0;
}

if (all_uptodate) {
set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags);
goto unlock_exit;
}

__read_extent_buffer_pages(eb, mirror_num, check);

Expand Down

0 comments on commit f3d315e

Please sign in to comment.