diff mbox

block: early return from blk_queue_split() if q->bio_split is NULL

Message ID 20171120165401.GA10608@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mike Snitzer Nov. 20, 2017, 4:54 p.m. UTC
DM appears to be the only block driver that doesn't lean on the block
core's bio splitting.  My hope is to fix that but in the meantime it
doesn't make sense for a device that doesn't need blk_queue_split() to
go through the associated work.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
---
 block/blk-merge.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Mike Snitzer Nov. 21, 2017, 2:24 p.m. UTC | #1
On Mon, Nov 20 2017 at 11:54am -0500,
Mike Snitzer <snitzer@redhat.com> wrote:

> DM appears to be the only block driver that doesn't lean on the block
> core's bio splitting.  My hope is to fix that but in the meantime it
> doesn't make sense for a device that doesn't need blk_queue_split() to
> go through the associated work.
> 
> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
> ---
>  block/blk-merge.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/block/blk-merge.c b/block/blk-merge.c
> index f5dedd5..212004c 100644
> --- a/block/blk-merge.c
> +++ b/block/blk-merge.c
> @@ -186,6 +186,9 @@ void blk_queue_split(struct request_queue *q, struct bio **bio)
>  	struct bio *split, *res;
>  	unsigned nsegs;
>  
> +	if (!q->bio_split)
> +		return;
> +
>  	switch (bio_op(*bio)) {
>  	case REQ_OP_DISCARD:
>  	case REQ_OP_SECURE_ERASE:
> -- 
> 2.10.1
> 

Please ignore this patch.  While the patch is perfectly valid, it
doesn't have an existing consumer.  Ming pointed out that, in constrat
to blk_queue_bio(), bio-based DM's dm_make_request() makes it so that
DM never calls blk_queue_split().

Mike
diff mbox

Patch

diff --git a/block/blk-merge.c b/block/blk-merge.c
index f5dedd5..212004c 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -186,6 +186,9 @@  void blk_queue_split(struct request_queue *q, struct bio **bio)
 	struct bio *split, *res;
 	unsigned nsegs;
 
+	if (!q->bio_split)
+		return;
+
 	switch (bio_op(*bio)) {
 	case REQ_OP_DISCARD:
 	case REQ_OP_SECURE_ERASE: