Message ID | dcacf1177cd31b969bb61910e49ed3397d796ee3.1685411033.git.wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: small cleanups mostly for subpage cases | expand |
On Tue, May 30, 2023 at 09:45:27AM +0800, Qu Wenruo wrote: > Currently alloc_extent_buffer() would make the extent buffer uptodate if > the corresponding pages are also uptodate. > > But this check is only checking PageUptodate, which is fine for regular > cases, but not for subpage cases, as we can have multiple extent buffers > in the same page. > > So here we go btrfs_page_test_uptodate() instead. > > The old code doesn't cause any problem, but not efficient, as it would > cause extra metadata read even if the range is already uptodate. Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index bbf212c7a43f..9afdcf0c70dd 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3708,7 +3708,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, WARN_ON(btrfs_page_test_dirty(fs_info, p, eb->start, eb->len)); eb->pages[i] = p; - if (!PageUptodate(p)) + if (!btrfs_page_test_uptodate(fs_info, p, eb->start, eb->len)) uptodate = 0; /*
Currently alloc_extent_buffer() would make the extent buffer uptodate if the corresponding pages are also uptodate. But this check is only checking PageUptodate, which is fine for regular cases, but not for subpage cases, as we can have multiple extent buffers in the same page. So here we go btrfs_page_test_uptodate() instead. The old code doesn't cause any problem, but not efficient, as it would cause extra metadata read even if the range is already uptodate. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/extent_io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)