All of lore.kernel.org
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.com>
To: Jens Axboe <axboe@kernel.dk>, Jack Wang <jinpu.wang@profitbricks.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Lars Ellenberg <lars.ellenberg@linbit.com>,
	Kent Overstreet <kent.overstreet@gmail.com>,
	Pavel Machek <pavel@ucw.cz>, Mike Snitzer <snitzer@redhat.com>,
	Mikulas Patocka <mpatocka@redhat.com>,
	linux-raid@vger.kernel.org,
	device-mapper development <dm-devel@redhat.com>,
	linux-block@vger.kernel.org
Subject: [PATCH 4/5] blk: use non-rescuing bioset for q->bio_split.
Date: Fri, 10 Mar 2017 15:36:20 +1100	[thread overview]
Message-ID: <871su5hhob.fsf@notabene.neil.brown.name> (raw)
In-Reply-To: <87d1dphhuy.fsf@notabene.neil.brown.name>

[-- Attachment #1: Type: text/plain, Size: 1967 bytes --]


A rescuing bioset is only useful if there might be bios from
that same bioset on the bio_list_on_stack queue at a time
when bio_alloc_bioset() is called.  This never applies to
q->bio_split.

Allocations from q->bio_split are only ever made from
blk_queue_split() which is only ever called early in each of
various make_request_fn()s.  The original bio (call this A)
is then passed to generic_make_request() and is placed on
the bio_list_on_stack queue, and the bio that was allocated
from q->bio_split (B) is processed.

The processing of this may cause other bios to be passed to
generic_make_request() or may even cause the bio B itself to
be passed, possible after some prefix has been split off
(using some other bioset).

generic_make_request() now guarantees that all of these bios
(B and dependants) will be fully processed before the tail
of the original bio A gets handled.  None of these early bios
can possible trigger an allocation from the original
q->bio_split as they are either too small to require
splitting or (more likely) are destined for a different queue.

The next time that the original q->bio_split might be used
by this thread is when A is processed again, as it might
still be too big to handle directly.  By this time there
cannot be and other bios allocated fro q->bio_split in the
generic_make_request() queue.  So no rescuing will ever be
needed.

Signed-off-by: NeilBrown <neilb@suse.com>
---
 block/blk-core.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index c3992d17dc2c..375006c94c15 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -714,7 +714,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
 	if (q->id < 0)
 		goto fail_q;
 
-	q->bio_split = bioset_create_rescued(BIO_POOL_SIZE, 0);
+	q->bio_split = bioset_create(BIO_POOL_SIZE, 0);
 	if (!q->bio_split)
 		goto fail_id;
 



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

  parent reply	other threads:[~2017-03-10  4:36 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-03  5:14 [PATCH] blk: improve order of bio handling in generic_make_request() NeilBrown
2017-03-03  9:28 ` Jack Wang
2017-03-06  4:40   ` NeilBrown
2017-03-06  9:43     ` Jack Wang
2017-03-07 15:46       ` Pavel Machek
2017-03-07 15:53         ` Jack Wang
2017-03-07 16:21         ` Jens Axboe
2017-03-06 20:18     ` Jens Axboe
2017-03-07  8:49       ` Jack Wang
2017-03-07 16:52         ` Mike Snitzer
2017-03-07 17:05           ` Jens Axboe
2017-03-07 17:14             ` Mike Snitzer
2017-03-07 20:29               ` NeilBrown
2017-03-07 23:01                 ` Mike Snitzer
2017-03-08 16:40                 ` Mikulas Patocka
2017-03-08 17:15                   ` Lars Ellenberg
2017-03-09  6:08                   ` NeilBrown
2017-03-08 11:46           ` Lars Ellenberg
2017-03-07 20:38       ` [PATCH v2] " NeilBrown
2017-03-07 20:38         ` NeilBrown
2017-03-10  4:32         ` NeilBrown
2017-03-10  4:33           ` [PATCH 1/5 v3] " NeilBrown
2017-03-10  4:34           ` [PATCH 2/5] blk: remove bio_set arg from blk_queue_split() NeilBrown
2017-03-10  4:35           ` [PATCH 3/5] blk: make the bioset rescue_workqueue optional NeilBrown
2017-03-10  4:36           ` NeilBrown [this message]
2017-03-10  4:37           ` [PATCH 5/5] block_dev: make blkdev_dio_pool a non-rescuing bioset NeilBrown
2017-03-10  4:38           ` [PATCH v2] blk: improve order of bio handling in generic_make_request() Jens Axboe
2017-03-10  4:40             ` Jens Axboe
2017-03-10  5:19             ` NeilBrown
2017-03-10 12:34               ` Lars Ellenberg
2017-03-10 14:38                 ` Mike Snitzer
2017-03-10 14:55                   ` Mikulas Patocka
2017-03-10 15:07                     ` Jack Wang
2017-03-10 15:35                       ` Mike Snitzer
2017-03-10 18:51                       ` Lars Ellenberg
2017-03-11  0:47                 ` NeilBrown
2017-03-11  0:47                   ` NeilBrown
2017-03-10  6:00 [PATCH 0/5] Updates following recent generic_make_request improvement NeilBrown
2017-03-10  6:00 ` [PATCH 4/5] blk: use non-rescuing bioset for q->bio_split NeilBrown
2017-03-10  6:00   ` NeilBrown

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=871su5hhob.fsf@notabene.neil.brown.name \
    --to=neilb@suse.com \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@redhat.com \
    --cc=jinpu.wang@profitbricks.com \
    --cc=kent.overstreet@gmail.com \
    --cc=lars.ellenberg@linbit.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=mpatocka@redhat.com \
    --cc=pavel@ucw.cz \
    --cc=snitzer@redhat.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.