All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
	linux-block@vger.kernel.org,
	"Md. Haris Iqbal" <haris.iqbal@ionos.com>,
	Jack Wang <jinpu.wang@ionos.com>, Coly Li <colyli@kernel.org>,
	Kent Overstreet <kent.overstreet@linux.dev>,
	Mike Snitzer <snitzer@kernel.org>,
	Mikulas Patocka <mpatocka@redhat.com>, Chris Mason <clm@fb.com>,
	Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>,
	Andreas Gruenbacher <agruenba@redhat.com>,
	Carlos Maiolino <cem@kernel.org>,
	Damien Le Moal <dlemoal@kernel.org>,
	Naohiro Aota <naohiro.aota@wdc.com>,
	Johannes Thumshirn <jth@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Pavel Machek <pavel@kernel.org>,
	slava@dubeyko.com, glaubitz@physik.fu-berlin.de,
	frank.li@vivo.com, linux-bcache@vger.kernel.org,
	dm-devel@lists.linux.dev, linux-btrfs@vger.kernel.org,
	gfs2@lists.linux.dev, linux-fsdevel@vger.kernel.org,
	linux-xfs@vger.kernel.org, linux-pm@vger.kernel.org
Subject: Re: [PATCH 15/19] xfs: simplify xfs_buf_submit_bio
Date: Thu, 1 May 2025 12:51:03 -0700	[thread overview]
Message-ID: <20250501195103.GD25675@frogsfrogsfrogs> (raw)
In-Reply-To: <20250430212159.2865803-16-hch@lst.de>

On Wed, Apr 30, 2025 at 04:21:45PM -0500, Christoph Hellwig wrote:
> Convert the __bio_add_page(..., virt_to_page(), ...) pattern to the
> bio_add_virt_nofail helper implementing it and use bio_add_vmalloc
> to insulate xfs from the details of adding vmalloc memory to a bio.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  fs/xfs/xfs_buf.c | 43 ++++++++-----------------------------------
>  1 file changed, 8 insertions(+), 35 deletions(-)
> 
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index 1a2b3f06fa71..f2d00774a84f 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -1333,45 +1333,18 @@ static void
>  xfs_buf_submit_bio(
>  	struct xfs_buf		*bp)
>  {
> +	unsigned int		len = BBTOB(bp->b_length);
> +	unsigned int		nr_vecs = bio_add_max_vecs(bp->b_addr, len);
>  	unsigned int		map = 0;
>  	struct blk_plug		plug;
>  	struct bio		*bio;
>  
> -	if (is_vmalloc_addr(bp->b_addr)) {
> -		unsigned int	size = BBTOB(bp->b_length);
> -		unsigned int	alloc_size = roundup(size, PAGE_SIZE);
> -		void		*data = bp->b_addr;
> -
> -		bio = bio_alloc(bp->b_target->bt_bdev, alloc_size >> PAGE_SHIFT,
> -				xfs_buf_bio_op(bp), GFP_NOIO);
> -
> -		do {
> -			unsigned int	len = min(size, PAGE_SIZE);
> -
> -			ASSERT(offset_in_page(data) == 0);
> -			__bio_add_page(bio, vmalloc_to_page(data), len, 0);
> -			data += len;
> -			size -= len;
> -		} while (size);
> -
> -		flush_kernel_vmap_range(bp->b_addr, alloc_size);
> -	} else {
> -		/*
> -		 * Single folio or slab allocation.  Must be contiguous and thus
> -		 * only a single bvec is needed.
> -		 *
> -		 * This uses the page based bio add helper for now as that is
> -		 * the lowest common denominator between folios and slab
> -		 * allocations.  To be replaced with a better block layer
> -		 * helper soon (hopefully).
> -		 */
> -		bio = bio_alloc(bp->b_target->bt_bdev, 1, xfs_buf_bio_op(bp),
> -				GFP_NOIO);
> -		__bio_add_page(bio, virt_to_page(bp->b_addr),
> -				BBTOB(bp->b_length),
> -				offset_in_page(bp->b_addr));
> -	}
> -
> +	bio = bio_alloc(bp->b_target->bt_bdev, nr_vecs, xfs_buf_bio_op(bp),
> +			GFP_NOIO);
> +	if (is_vmalloc_addr(bp->b_addr))
> +		bio_add_vmalloc(bio, bp->b_addr, len);

I wonder, do we need a debug assertion on the return value?  AFAICT,
bio_add_max_vecs should result in a bio that's big enough to handle the
vmalloc area, but those could be famous last words. :P

Other than that, the code is much cleaner than before. :)

--D

> +	else
> +		bio_add_virt_nofail(bio, bp->b_addr, len);
>  	bio->bi_private = bp;
>  	bio->bi_end_io = xfs_buf_bio_end_io;
>  
> -- 
> 2.47.2
> 
> 

  parent reply	other threads:[~2025-05-01 19:51 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-30 21:21 add more bio helpers v2 Christoph Hellwig
2025-04-30 21:21 ` [PATCH 01/19] block: add a bio_add_virt_nofail helper Christoph Hellwig
2025-04-30 21:21 ` [PATCH 02/19] block: add a bdev_rw_virt helper Christoph Hellwig
2025-04-30 21:21 ` [PATCH 03/19] block: add a bio_add_max_vecs helper Christoph Hellwig
2025-05-01 18:50   ` Damien Le Moal
2025-05-02  8:11   ` Johannes Thumshirn
2025-05-02  9:16   ` Johannes Thumshirn
2025-04-30 21:21 ` [PATCH 04/19] block: add a bio_add_vmalloc helpers Christoph Hellwig
2025-05-01 18:52   ` Damien Le Moal
2025-05-02  9:20   ` Johannes Thumshirn
2025-04-30 21:21 ` [PATCH 05/19] block: remove the q argument from blk_rq_map_kern Christoph Hellwig
2025-04-30 21:21 ` [PATCH 06/19] block: pass the operation to bio_{map,copy}_kern Christoph Hellwig
2025-04-30 21:21 ` [PATCH 07/19] block: simplify bio_map_kern Christoph Hellwig
2025-05-01 18:56   ` Damien Le Moal
2025-05-02  7:05     ` Christoph Hellwig
2025-05-02  8:52   ` Johannes Thumshirn
2025-04-30 21:21 ` [PATCH 08/19] bcache: use bio_add_virt_nofail Christoph Hellwig
2025-04-30 21:21 ` [PATCH 09/19] rnbd-srv: " Christoph Hellwig
2025-04-30 21:21 ` [PATCH 10/19] gfs2: use bdev_rw_virt in gfs2_read_super Christoph Hellwig
2025-04-30 21:21 ` [PATCH 11/19] zonefs: use bdev_rw_virt in zonefs_read_super Christoph Hellwig
2025-04-30 21:21 ` [PATCH 12/19] PM: hibernate: split and simplify hib_submit_io Christoph Hellwig
2025-04-30 21:21 ` [PATCH 13/19] dm-bufio: use bio_add_virt_nofail Christoph Hellwig
2025-05-06  9:36   ` Mikulas Patocka
2025-04-30 21:21 ` [PATCH 14/19] dm-integrity: " Christoph Hellwig
2025-05-06  9:37   ` Mikulas Patocka
2025-04-30 21:21 ` [PATCH 15/19] xfs: simplify xfs_buf_submit_bio Christoph Hellwig
2025-05-01 18:57   ` Damien Le Moal
2025-05-01 19:51   ` Darrick J. Wong [this message]
2025-05-02  7:07     ` Christoph Hellwig
2025-04-30 21:21 ` [PATCH 16/19] xfs: simplify xfs_rw_bdev Christoph Hellwig
2025-04-30 21:21 ` [PATCH 17/19] xfs: simplify building the bio in xlog_write_iclog Christoph Hellwig
2025-05-01 18:58   ` Damien Le Moal
2025-05-01 19:51   ` Darrick J. Wong
2025-04-30 21:21 ` [PATCH 18/19] btrfs: use bdev_rw_virt in scrub_one_super Christoph Hellwig
2025-05-06 10:05   ` David Sterba
2025-04-30 21:21 ` [PATCH 19/19] hfsplus: use bdev_rw_virt in hfsplus_submit_bio Christoph Hellwig
2025-05-06  4:39   ` 回复: " 李扬韬
2025-05-06  4:47 ` add more bio helpers v2 Christoph Hellwig
2025-05-06  9:39   ` Mikulas Patocka
  -- strict thread matches above, loose matches on Subject: below --
2025-05-07 12:04 add more bio helpers v3 Christoph Hellwig
2025-05-07 12:04 ` [PATCH 15/19] xfs: simplify xfs_buf_submit_bio Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250501195103.GD25675@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=agruenba@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=cem@kernel.org \
    --cc=clm@fb.com \
    --cc=colyli@kernel.org \
    --cc=dlemoal@kernel.org \
    --cc=dm-devel@lists.linux.dev \
    --cc=dsterba@suse.com \
    --cc=frank.li@vivo.com \
    --cc=gfs2@lists.linux.dev \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=haris.iqbal@ionos.com \
    --cc=hch@lst.de \
    --cc=jinpu.wang@ionos.com \
    --cc=josef@toxicpanda.com \
    --cc=jth@kernel.org \
    --cc=kent.overstreet@linux.dev \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=mpatocka@redhat.com \
    --cc=naohiro.aota@wdc.com \
    --cc=pavel@kernel.org \
    --cc=rafael@kernel.org \
    --cc=slava@dubeyko.com \
    --cc=snitzer@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.