Message ID | 20201113125149.140836-17-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: preparation patches for subpage support | expand |
On Fri, Nov 13, 2020 at 08:51:41PM +0800, Qu Wenruo wrote: > In btrfs_lookup_bio_sums() if the bio is pretty large, we want to > readahead the csum tree. > > However the threshold is an immediate number, (PAGE_SIZE * 8), from the > initial btrfs merge. > > The value itself is pretty hard to guess the meaning, especially when > the immediate number is from the age where 4K sectorsize is the default > and only CRC32 is supported. > > For the most common btrfs setup, CRC32 csum and 4K sectorsize, > it means just 32K read would kick readahead, while the csum itself is > only 32 bytes in size. > > Now let's be more reasonable by taking both csum size and node size into > consideration. > > If the csum size for the bio is larger than one leaf, then we kick the > readahead. > This means for current default btrfs, the threshold will be 16M. > > This change should not change performance observably, thus this is mostly > a readability enhancement. > > Reviewed-by: Nikolay Borisov <nborisov@suse.com> > Signed-off-by: Qu Wenruo <wqu@suse.com> Added to misc-next.
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index 40daf1a4b46c..73896eb9ead0 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -297,7 +297,11 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio, csum = dst; } - if (bio->bi_iter.bi_size > PAGE_SIZE * 8) + /* + * If needed number of sectors is larger than one leaf can contain, + * kick the readahead for csum tree would be a good idea. + */ + if (nblocks > fs_info->csums_per_leaf) path->reada = READA_FORWARD; /*