summaryrefslogtreecommitdiff
path: root/fs/btrfs/scrub.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2025-04-09 14:10:38 +0300
committerDavid Sterba <dsterba@suse.com>2025-05-15 15:30:46 +0300
commit959ddf28390bae9019f0681ea8a239181be1c0f9 (patch)
treeaa746644c1cb90b15459aa7f3fe7043b7003ab34 /fs/btrfs/scrub.c
parent3240b2c97bb862352411713592d4094420691abd (diff)
downloadlinux-959ddf28390bae9019f0681ea8a239181be1c0f9.tar.xz
btrfs: move kmapping out of btrfs_check_sector_csum()
Move kmapping the page out of btrfs_check_sector_csum(). This allows using bvec_kmap_local() where suitable and reduces the number of kmap*() calls in the raid56 code. This also means btrfs_check_sector_csum() will only accept a properly kmapped address. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/scrub.c')
-rw-r--r--fs/btrfs/scrub.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index c3b2e29e3e01..3794205a47a4 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -694,6 +694,7 @@ static void scrub_verify_one_sector(struct scrub_stripe *stripe, int sector_nr)
struct page *page = scrub_stripe_get_page(stripe, sector_nr);
unsigned int pgoff = scrub_stripe_get_page_offset(stripe, sector_nr);
u8 csum_buf[BTRFS_CSUM_SIZE];
+ void *kaddr;
int ret;
ASSERT(sector_nr >= 0 && sector_nr < stripe->nr_sectors);
@@ -737,7 +738,9 @@ static void scrub_verify_one_sector(struct scrub_stripe *stripe, int sector_nr)
return;
}
- ret = btrfs_check_sector_csum(fs_info, page, pgoff, csum_buf, sector->csum);
+ kaddr = kmap_local_page(page) + pgoff;
+ ret = btrfs_check_sector_csum(fs_info, kaddr, csum_buf, sector->csum);
+ kunmap_local(kaddr);
if (ret < 0) {
set_bit(sector_nr, &stripe->csum_error_bitmap);
set_bit(sector_nr, &stripe->error_bitmap);