Re: [PATCH 13/17] btrfs: use bdev_rw_virt in scrub_one_super

Qu Wenruo
2025-04-28T09:23:08Z

在 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 <hch@lst.de>

Reviewed-by: Qu Wenruo <wqu@suse.com>

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);