From: Christoph Hellwig <hch@lst.de>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@kernel.dk>,
Chris Mason <clm@fb.com>, Josef Bacik <josef@toxicpanda.com>,
David Sterba <dsterba@suse.com>,
Hans Holmberg <Hans.Holmberg@wdc.com>,
Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>,
linux-block@vger.kernel.org, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 1/4] block: rework bio splitting
Date: Tue, 27 Aug 2024 05:20:12 +0200 [thread overview]
Message-ID: <20240827032012.GA9357@lst.de> (raw)
In-Reply-To: <e59de073-c608-4206-8f98-9f46b1750931@kernel.org>
On Tue, Aug 27, 2024 at 07:26:40AM +0900, Damien Le Moal wrote:
> > +static struct bio *bio_submit_split(struct bio *bio, int split_sectors)
>
> Why not "unsigned int" for split_sectors ? That would avoid the need for the
> first "if" of the function. Note that bio_split() also takes an int for the
> sector count and also checks for < 0 count with a BUG_ON(). We can clean that up
> too. BIOs sector count is unsigned int...
Because we need to handle the case where we do no want to submit any
bio and error out as well, and a negative error code works nicely
for that. Note that the bios has an unsigned int byte count, so we
have the extra precision for the sign bit.
> But shouldn't this check be:
>
> if (split_sectors >= bio_sectors(bio))
> return bio;
The API is to return the split position or 0 if no split is needed.
That is needed because splits are usually done for limits singnificantly
smaller than what the bio could take.
> > +static inline struct bio *__bio_split_to_limits(struct bio *bio,
> > + const struct queue_limits *lim, unsigned int *nr_segs)
> > {
> > switch (bio_op(bio)) {
> > + default:
> > + if (bio_may_need_split(bio, lim))
> > + return bio_split_rw(bio, lim, nr_segs);
> > + *nr_segs = 1;
> > + return bio;
>
> Wouldn't it be safer to move the if check inside bio_split_rw(), so that here we
> can have:
The !bio_may_need_split case is the existing fast path optimization
without a function call that I wanted to keep because it made a
difference from some workloads that Jens was testing.
> And at the top of bio_split_rw() add:
>
> if (!bio_may_need_split(bio, lim)) {
> *nr_segs = 1;
> return bio;
> }
>
> so that bio_split_rw() always does the right thing ?
Note that bio_split_rw still always does the right thing, it'll just
do it a little slower than this fast path optimization.
next prev parent reply other threads:[~2024-08-27 3:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-26 17:37 fix unintentional splitting of zone append bios Christoph Hellwig
2024-08-26 17:37 ` [PATCH 1/4] block: rework bio splitting Christoph Hellwig
2024-08-26 20:29 ` David Sterba
2024-08-26 22:26 ` Damien Le Moal
2024-08-26 22:37 ` Damien Le Moal
2024-08-27 3:20 ` Christoph Hellwig [this message]
2024-08-27 4:08 ` Damien Le Moal
2024-08-26 17:37 ` [PATCH 2/4] block: constify the lim argument to queue_limits_max_zone_append_sectors Christoph Hellwig
2024-08-26 22:27 ` Damien Le Moal
2024-08-26 17:37 ` [PATCH 3/4] block: properly handle REQ_OP_ZONE_APPEND in __bio_split_to_limits Christoph Hellwig
2024-08-26 22:32 ` Damien Le Moal
2024-08-26 17:37 ` [PATCH 4/4] block: don't use bio_split_rw on misc operations Christoph Hellwig
2024-08-26 22:34 ` Damien Le Moal
2024-08-27 11:23 ` fix unintentional splitting of zone append bios Hans Holmberg
2024-08-27 11:43 ` Niklas Cassel
2024-08-27 12:18 ` Christoph Hellwig
2024-08-29 10:33 ` Jens Axboe
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=20240827032012.GA9357@lst.de \
--to=hch@lst.de \
--cc=Hans.Holmberg@wdc.com \
--cc=axboe@kernel.dk \
--cc=clm@fb.com \
--cc=dlemoal@kernel.org \
--cc=dsterba@suse.com \
--cc=josef@toxicpanda.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=shinichiro.kawasaki@wdc.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.