All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Christoph Hellwig <hch@lst.de>, Chris Mason <clm@fb.com>,
	Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>
Cc: Damien Le Moal <damien.lemoal@wdc.com>,
	Naohiro Aota <naohiro.aota@wdc.com>,
	Johannes Thumshirn <johannes.thumshirn@wdc.com>,
	Qu Wenruo <wqu@suse.com>, Jens Axboe <axboe@kernel.dk>,
	"Darrick J. Wong" <djwong@kernel.org>,
	linux-block@vger.kernel.org, linux-btrfs@vger.kernel.org,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 01/17] block: export bio_split_rw
Date: Thu, 1 Sep 2022 16:54:32 +0800	[thread overview]
Message-ID: <de16bd58-3f14-01d9-9de5-6a79792c62c7@gmx.com> (raw)
In-Reply-To: <20220901074216.1849941-2-hch@lst.de>



On 2022/9/1 15:42, Christoph Hellwig wrote:
> bio_split_rw can be used by file systems to split and incoming write
> bio into multiple bios fitting the hardware limit for use as ZONE_APPEND
> bios.  Export it for initial use in btrfs.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   block/blk-merge.c   | 3 ++-
>   include/linux/bio.h | 4 ++++
>   2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/block/blk-merge.c b/block/blk-merge.c
> index ff04e9290715a..e68295462977b 100644
> --- a/block/blk-merge.c
> +++ b/block/blk-merge.c
> @@ -267,7 +267,7 @@ static bool bvec_split_segs(struct queue_limits *lim, const struct bio_vec *bv,
>    * responsible for ensuring that @bs is only destroyed after processing of the
>    * split bio has finished.
>    */
> -static struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim,
> +struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim,

I found the queue_limits structure pretty scary, while we only have very
limited members used in this case:

- lim->virt_boundary_mask
   Used in bvec_gap_to_prev()

- lim->max_segments

- lim->seg_boundary_mask
- lim->max_segment_size
   Used in bvec_split_segs()

- lim->logical_block_size

Not familiar with block layer, thus I'm wondering do btrfs really need a
full queue_limits structure to call bio_split_rw().

Or can we have a simplified wrapper?

IIRC inside btrfs we only need two cases for bio split:

- Split for stripe boundary

- Split for OE/zoned boundary

Thanks,
Qu

>   		unsigned *segs, struct bio_set *bs, unsigned max_bytes)
>   {
>   	struct bio_vec bv, bvprv, *bvprvp = NULL;
> @@ -317,6 +317,7 @@ static struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim,
>   	bio_clear_polled(bio);
>   	return bio_split(bio, bytes >> SECTOR_SHIFT, GFP_NOIO, bs);
>   }
> +EXPORT_SYMBOL_GPL(bio_split_rw);
>
>   /**
>    * __bio_split_to_limits - split a bio to fit the queue limits
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index ca22b06700a94..46890f8235401 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -12,6 +12,8 @@
>
>   #define BIO_MAX_VECS		256U
>
> +struct queue_limits;
> +
>   static inline unsigned int bio_max_segs(unsigned int nr_segs)
>   {
>   	return min(nr_segs, BIO_MAX_VECS);
> @@ -375,6 +377,8 @@ static inline void bip_set_seed(struct bio_integrity_payload *bip,
>   void bio_trim(struct bio *bio, sector_t offset, sector_t size);
>   extern struct bio *bio_split(struct bio *bio, int sectors,
>   			     gfp_t gfp, struct bio_set *bs);
> +struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim,
> +		unsigned *segs, struct bio_set *bs, unsigned max_bytes);
>
>   /**
>    * bio_next_split - get next @sectors from a bio, splitting if necessary

  parent reply	other threads:[~2022-09-01  8:55 UTC|newest]

Thread overview: 108+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01  7:41 consolidate btrfs checksumming, repair and bio splitting Christoph Hellwig
2022-09-01  7:42 ` [PATCH 01/17] block: export bio_split_rw Christoph Hellwig
2022-09-01  8:02   ` Johannes Thumshirn
2022-09-01  8:54   ` Qu Wenruo [this message]
2022-09-05  6:44     ` Christoph Hellwig
2022-09-05  6:51       ` Qu Wenruo
2022-09-07 17:51   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 02/17] btrfs: stop tracking failed reads in the I/O tree Christoph Hellwig
2022-09-01  8:55   ` Qu Wenruo
2022-09-07 17:52   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 03/17] btrfs: move repair_io_failure to volumes.c Christoph Hellwig
2022-09-07 17:54   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 04/17] btrfs: handle checksum validation and repair at the storage layer Christoph Hellwig
2022-09-01  9:04   ` Qu Wenruo
2022-09-05  6:48     ` Christoph Hellwig
2022-09-05  6:59       ` Qu Wenruo
2022-09-05 14:31         ` Christoph Hellwig
2022-09-05 22:34           ` Qu Wenruo
2022-09-06  4:34             ` Christoph Hellwig
2022-09-07 18:15   ` Josef Bacik
2022-09-12 13:57     ` Christoph Hellwig
2022-09-01  7:42 ` [PATCH 05/17] btrfs: handle checksum generation in " Christoph Hellwig
2022-09-07 20:33   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 06/17] btrfs: handle recording of zoned writes " Christoph Hellwig
2022-09-01  9:44   ` Johannes Thumshirn
2022-09-07 20:36   ` Josef Bacik
2022-09-12  6:11   ` Naohiro Aota
2022-09-01  7:42 ` [PATCH 07/17] btrfs: allow btrfs_submit_bio to split bios Christoph Hellwig
2022-09-01  9:47   ` Johannes Thumshirn
2022-09-07 20:55   ` Josef Bacik
2022-09-12 13:58     ` Christoph Hellwig
2022-09-12  0:20   ` Qu Wenruo
2022-09-12 13:55     ` Christoph Hellwig
2022-09-12 22:23       ` Qu Wenruo
2022-09-01  7:42 ` [PATCH 08/17] btrfs: pass the iomap bio to btrfs_submit_bio Christoph Hellwig
2022-09-07 21:00   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 09/17] btrfs: remove stripe boundary calculation for buffered I/O Christoph Hellwig
2022-09-07 21:04   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 10/17] btrfs: remove stripe boundary calculation for compressed I/O Christoph Hellwig
2022-09-01  9:56   ` Johannes Thumshirn
2022-09-05  6:49     ` Christoph Hellwig
2022-09-07 21:07   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 11/17] btrfs: remove stripe boundary calculation for encoded I/O Christoph Hellwig
2022-09-01  9:58   ` Johannes Thumshirn
2022-09-07 21:08   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 12/17] btrfs: remove struct btrfs_io_geometry Christoph Hellwig
2022-09-07 21:10   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 13/17] btrfs: remove submit_encoded_read_bio Christoph Hellwig
2022-09-01 10:02   ` Johannes Thumshirn
2022-09-07 21:11   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 14/17] btrfs: remove now spurious bio submission helpers Christoph Hellwig
2022-09-01 10:14   ` Johannes Thumshirn
2022-09-07 21:12   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 15/17] btrfs: calculate file system wide queue limit for zoned mode Christoph Hellwig
2022-09-01 11:28   ` Johannes Thumshirn
2022-09-05  6:50     ` Christoph Hellwig
2022-09-02  1:56   ` Damien Le Moal
2022-09-02  1:59     ` Damien Le Moal
2022-09-05  6:54     ` Christoph Hellwig
2022-09-01  7:42 ` [PATCH 16/17] btrfs: split zone append bios in btrfs_submit_bio Christoph Hellwig
2022-09-02  1:46   ` Damien Le Moal
2022-09-05  6:55     ` Christoph Hellwig
2022-09-05 13:15   ` Johannes Thumshirn
2022-09-05 14:25     ` Christoph Hellwig
2022-09-05 14:31       ` Johannes Thumshirn
2022-09-05 14:39         ` Christoph Hellwig
2022-09-05 14:43           ` Johannes Thumshirn
2022-09-05 15:30           ` Johannes Thumshirn
2022-09-07 21:17   ` Josef Bacik
2022-09-01  7:42 ` [PATCH 17/17] iomap: remove IOMAP_F_ZONE_APPEND Christoph Hellwig
2022-09-01 10:46   ` Johannes Thumshirn
2022-09-02  1:38   ` Damien Le Moal
2022-09-05  6:50     ` Christoph Hellwig
2022-09-05  6:57       ` Damien Le Moal
2022-09-07 21:18   ` Josef Bacik
2022-09-02 15:18 ` consolidate btrfs checksumming, repair and bio splitting Johannes Thumshirn
2022-09-07  9:10 ` code placement for bio / storage layer code Christoph Hellwig
2022-09-07  9:46   ` Johannes Thumshirn
2022-09-07 10:28   ` Qu Wenruo
2022-09-07 11:10     ` Christoph Hellwig
2022-09-07 11:27       ` Qu Wenruo
2022-09-07 11:35         ` Christoph Hellwig
2022-10-10  8:01   ` Johannes Thumshirn
2022-10-24  8:12 ` consolidate btrfs checksumming, repair and bio splitting Johannes Thumshirn
2022-10-24  8:20   ` Qu Wenruo
2022-10-24  9:07     ` Johannes Thumshirn
2022-10-24  9:18       ` Qu Wenruo
2022-10-24 10:21         ` Johannes Thumshirn
2022-10-24 14:44   ` Christoph Hellwig
2022-10-24 15:25     ` Chris Mason
2022-10-24 17:10       ` David Sterba
2022-10-24 17:34         ` Chris Mason
2022-10-24 22:18           ` Damien Le Moal
2022-10-26  7:36         ` Johannes Thumshirn
2022-10-26 11:41           ` Steven Rostedt
2022-10-27 13:54             ` Johannes Thumshirn
2022-10-31 12:19             ` David Sterba
2022-10-31 16:06               ` Chris Mason
2022-11-02  4:00               ` Steven Rostedt
2022-11-02  6:29                 ` Christoph Hellwig
2022-11-02 14:00                   ` Chris Mason
2022-11-02 14:05                   ` Josef Bacik
2022-11-02 14:06                     ` Christoph Hellwig
2022-11-02 20:20                   ` Andreas Dilger
2022-11-02 22:07                     ` Chris Mason
2022-11-03  8:49                       ` Christoph Hellwig
2022-11-03  2:54               ` Theodore Ts'o
2022-11-11 17:57             ` David Sterba

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=de16bd58-3f14-01d9-9de5-6a79792c62c7@gmx.com \
    --to=quwenruo.btrfs@gmx.com \
    --cc=axboe@kernel.dk \
    --cc=clm@fb.com \
    --cc=damien.lemoal@wdc.com \
    --cc=djwong@kernel.org \
    --cc=dsterba@suse.com \
    --cc=hch@lst.de \
    --cc=johannes.thumshirn@wdc.com \
    --cc=josef@toxicpanda.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=naohiro.aota@wdc.com \
    --cc=wqu@suse.com \
    /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.