btrfs: don't check for uptodate pages in read_extent_buffer_pages
authorChristoph Hellwig <hch@lst.de>
Wed, 3 May 2023 15:24:38 +0000 (17:24 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Jun 2023 11:59:28 +0000 (13:59 +0200)
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>
fs/btrfs/extent_io.c

index 16e439f..40f0639 100644 (file)
@@ -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;
@@ -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))
@@ -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);