Re: [PATCH 13/17] btrfs: use bdev_rw_virt in scrub_one_super
Qu Wenruo <[email protected]>
| Newsgroups | org.kernel.vger.linux-bcache,dev.linux.lists.dm-devel,dev.linux.lists.gfs2,org.kernel.vger.linux-block,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-pm,org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <[email protected]> |
在 2025/4/22 23:56, Christoph Hellwig 写道: > Replace the code building a bio from a kernel direct map address and > submitting it synchronously with the bdev_rw_virt helper. > > Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Qu Wenruo <[email protected]> In fact I'm waiting for this helper to refactor how we do super block read/write, to get rid of any page cache usage of the block device. Thanks, Qu > --- > fs/btrfs/scrub.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c > index 2c5edcee9450..7bdb2bc0a212 100644 > --- a/fs/btrfs/scrub.c > +++ b/fs/btrfs/scrub.c > @@ -2770,17 +2770,11 @@ static int scrub_one_super(struct scrub_ctx *sctx, struct btrfs_device *dev, > struct page *page, u64 physical, u64 generation) > { > struct btrfs_fs_info *fs_info = sctx->fs_info; > - struct bio_vec bvec; > - struct bio bio; > struct btrfs_super_block *sb = page_address(page); > int ret; > > - bio_init(&bio, dev->bdev, &bvec, 1, REQ_OP_READ); > - bio.bi_iter.bi_sector = physical >> SECTOR_SHIFT; > - __bio_add_page(&bio, page, BTRFS_SUPER_INFO_SIZE, 0); > - ret = submit_bio_wait(&bio); > - bio_uninit(&bio); > - > + ret = bdev_rw_virt(dev->bdev, physical >> SECTOR_SHIFT, sb, > + BTRFS_SUPER_INFO_SIZE, REQ_OP_READ); > if (ret < 0) > return ret; > ret = btrfs_check_super_csum(fs_info, sb);