From: Sagi Grimberg <sagi@grimberg.me>
To: Ming Lei <ming.lei@redhat.com>, Hannes Reinecke <hare@suse.de>
Cc: Jens Axboe <axboe@kernel.dk>, Hannes Reinecke <hare@suse.com>,
Bart van Assche <bvanassche@acm.org>,
Ming Lei <ming.lei@gmail.com>,
neilb@suse.com, linux-nvme@lists.infradead.org,
linux-block@vger.kernel.org, Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH] block: use static bio_set for bio_split() calls
Date: Wed, 24 Apr 2019 10:20:46 -0700 [thread overview]
Message-ID: <98d8549a-2663-b404-e38a-6f55dfb575bf@grimberg.me> (raw)
In-Reply-To: <20190418143429.GA19175@ming.t460p>
> per-queue bioset is used originally for avoiding deadlock, are you
> sure the static bioset is safe?
Can you explain this? I didn't find any indication of that in the change
log history...
Originally introduced by Kent:
--
commit 54efd50bfd873e2dbf784e0b21a8027ba4299a3e
Author: Kent Overstreet <kent.overstreet@gmail.com>
Date: Thu Apr 23 22:37:18 2015 -0700
block: make generic_make_request handle arbitrarily sized bios
The way the block layer is currently written, it goes to great lengths
to avoid having to split bios; upper layer code (such as
bio_add_page())
checks what the underlying device can handle and tries to always create
bios that don't need to be split.
But this approach becomes unwieldy and eventually breaks down with
stacked devices and devices with dynamic limits, and it adds a lot of
complexity. If the block layer could split bios as needed, we could
eliminate a lot of complexity elsewhere - particularly in stacked
drivers. Code that creates bios can then create whatever size bios are
convenient, and more importantly stacked drivers don't have to deal
with
both their own bio size limitations and the limitations of the
(potentially multiple) devices underneath them. In the future this
will
let us delete merge_bvec_fn and a bunch of other code.
We do this by adding calls to blk_queue_split() to the various
make_request functions that need it - a few can already handle
arbitrary
size bios. Note that we add the call _after_ any call to
blk_queue_bounce(); this means that blk_queue_split() and
blk_recalc_rq_segments() don't need to be concerned with bouncing
affecting segment merging.
Some make_request_fn() callbacks were simple enough to audit and verify
they don't need blk_queue_split() calls. The skipped ones are:
* nfhd_make_request (arch/m68k/emu/nfblock.c)
* axon_ram_make_request (arch/powerpc/sysdev/axonram.c)
* simdisk_make_request (arch/xtensa/platforms/iss/simdisk.c)
* brd_make_request (ramdisk - drivers/block/brd.c)
* mtip_submit_request (drivers/block/mtip32xx/mtip32xx.c)
* loop_make_request
* null_queue_bio
* bcache's make_request fns
Some others are almost certainly safe to remove now, but will be left
for future patches.
--
WARNING: multiple messages have this Message-ID (diff)
From: sagi@grimberg.me (Sagi Grimberg)
Subject: [PATCH] block: use static bio_set for bio_split() calls
Date: Wed, 24 Apr 2019 10:20:46 -0700 [thread overview]
Message-ID: <98d8549a-2663-b404-e38a-6f55dfb575bf@grimberg.me> (raw)
In-Reply-To: <20190418143429.GA19175@ming.t460p>
> per-queue bioset is used originally for avoiding deadlock, are you
> sure the static bioset is safe?
Can you explain this? I didn't find any indication of that in the change
log history...
Originally introduced by Kent:
--
commit 54efd50bfd873e2dbf784e0b21a8027ba4299a3e
Author: Kent Overstreet <kent.overstreet at gmail.com>
Date: Thu Apr 23 22:37:18 2015 -0700
block: make generic_make_request handle arbitrarily sized bios
The way the block layer is currently written, it goes to great lengths
to avoid having to split bios; upper layer code (such as
bio_add_page())
checks what the underlying device can handle and tries to always create
bios that don't need to be split.
But this approach becomes unwieldy and eventually breaks down with
stacked devices and devices with dynamic limits, and it adds a lot of
complexity. If the block layer could split bios as needed, we could
eliminate a lot of complexity elsewhere - particularly in stacked
drivers. Code that creates bios can then create whatever size bios are
convenient, and more importantly stacked drivers don't have to deal
with
both their own bio size limitations and the limitations of the
(potentially multiple) devices underneath them. In the future this
will
let us delete merge_bvec_fn and a bunch of other code.
We do this by adding calls to blk_queue_split() to the various
make_request functions that need it - a few can already handle
arbitrary
size bios. Note that we add the call _after_ any call to
blk_queue_bounce(); this means that blk_queue_split() and
blk_recalc_rq_segments() don't need to be concerned with bouncing
affecting segment merging.
Some make_request_fn() callbacks were simple enough to audit and verify
they don't need blk_queue_split() calls. The skipped ones are:
* nfhd_make_request (arch/m68k/emu/nfblock.c)
* axon_ram_make_request (arch/powerpc/sysdev/axonram.c)
* simdisk_make_request (arch/xtensa/platforms/iss/simdisk.c)
* brd_make_request (ramdisk - drivers/block/brd.c)
* mtip_submit_request (drivers/block/mtip32xx/mtip32xx.c)
* loop_make_request
* null_queue_bio
* bcache's make_request fns
Some others are almost certainly safe to remove now, but will be left
for future patches.
--
next prev parent reply other threads:[~2019-04-24 17:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-18 14:06 [PATCH] block: use static bio_set for bio_split() calls Hannes Reinecke
2019-04-18 14:06 ` Hannes Reinecke
2019-04-18 14:34 ` Ming Lei
2019-04-18 14:34 ` Ming Lei
2019-04-18 15:02 ` Hannes Reinecke
2019-04-18 15:02 ` Hannes Reinecke
2019-04-18 18:26 ` Edmund Nadolski (Microsoft)
2019-04-18 18:26 ` Edmund Nadolski (Microsoft)
2019-04-24 17:20 ` Sagi Grimberg [this message]
2019-04-24 17:20 ` Sagi Grimberg
2019-04-24 18:56 ` Hannes Reinecke
2019-04-24 18:56 ` Hannes Reinecke
2019-04-24 18:58 ` Sagi Grimberg
2019-04-24 18:58 ` Sagi Grimberg
2019-04-24 22:14 ` Ming Lei
2019-04-24 22:14 ` Ming Lei
2019-04-25 0:41 ` Ming Lei
2019-04-25 0:41 ` Ming Lei
2019-04-25 14:32 ` Hannes Reinecke
2019-04-25 14:32 ` Hannes Reinecke
2019-04-25 15:36 ` Ming Lei
2019-04-25 15:36 ` Ming Lei
2019-04-30 11:48 ` Hannes Reinecke
2019-04-30 11:48 ` Hannes Reinecke
2019-04-24 19:49 ` Bart Van Assche
2019-04-24 19:49 ` Bart Van Assche
2019-04-25 6:06 ` Hannes Reinecke
2019-04-25 6:06 ` Hannes Reinecke
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=98d8549a-2663-b404-e38a-6f55dfb575bf@grimberg.me \
--to=sagi@grimberg.me \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=hare@suse.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=ming.lei@gmail.com \
--cc=ming.lei@redhat.com \
--cc=neilb@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.