All of lore.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] dm: fix bio splitting and its bio completion order for" failed to apply to 5.4-stable tree
@ 2020-09-28 13:56 gregkh
  2020-09-28 15:29 ` [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO Mike Snitzer
  0 siblings, 1 reply; 6+ messages in thread
From: gregkh @ 2020-09-28 13:56 UTC (permalink / raw)
  To: snitzer, ming.lei; +Cc: stable


The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
From: Mike Snitzer <snitzer@redhat.com>
Date: Mon, 14 Sep 2020 13:04:19 -0400
Subject: [PATCH] dm: fix bio splitting and its bio completion order for
 regular IO

dm_queue_split() is removed because __split_and_process_bio() _must_
handle splitting bios to ensure proper bio submission and completion
ordering as a bio is split.

Otherwise, multiple recursive calls to ->submit_bio will cause multiple
split bios to be allocated from the same ->bio_split mempool at the same
time. This would result in deadlock in low memory conditions because no
progress could be made (only one bio is available in ->bio_split
mempool).

This fix has been verified to still fix the loss of performance, due
to excess splitting, that commit 120c9257f5f1 provided.

Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
Reported-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 4a40df8af7d3..d948cd522431 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1724,23 +1724,6 @@ static blk_qc_t __process_bio(struct mapped_device *md, struct dm_table *map,
 	return ret;
 }
 
-static void dm_queue_split(struct mapped_device *md, struct dm_target *ti, struct bio **bio)
-{
-	unsigned len, sector_count;
-
-	sector_count = bio_sectors(*bio);
-	len = min_t(sector_t, max_io_len((*bio)->bi_iter.bi_sector, ti), sector_count);
-
-	if (sector_count > len) {
-		struct bio *split = bio_split(*bio, len, GFP_NOIO, &md->queue->bio_split);
-
-		bio_chain(split, *bio);
-		trace_block_split(md->queue, split, (*bio)->bi_iter.bi_sector);
-		submit_bio_noacct(*bio);
-		*bio = split;
-	}
-}
-
 static blk_qc_t dm_process_bio(struct mapped_device *md,
 			       struct dm_table *map, struct bio *bio)
 {
@@ -1768,14 +1751,12 @@ static blk_qc_t dm_process_bio(struct mapped_device *md,
 	if (current->bio_list) {
 		if (is_abnormal_io(bio))
 			blk_queue_split(&bio);
-		else
-			dm_queue_split(md, ti, &bio);
+		/* regular IO is split by __split_and_process_bio */
 	}
 
 	if (dm_get_md_type(md) == DM_TYPE_NVME_BIO_BASED)
 		return __process_bio(md, map, bio, ti);
-	else
-		return __split_and_process_bio(md, map, bio);
+	return __split_and_process_bio(md, map, bio);
 }
 
 static blk_qc_t dm_submit_bio(struct bio *bio)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO
  2020-09-28 13:56 FAILED: patch "[PATCH] dm: fix bio splitting and its bio completion order for" failed to apply to 5.4-stable tree gregkh
@ 2020-09-28 15:29 ` Mike Snitzer
  2020-09-28 17:31   ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Mike Snitzer @ 2020-09-28 15:29 UTC (permalink / raw)
  To: gregkh; +Cc: ming.lei, stable

This backport applies (with mild offset) to both v5.4.67 and v5.8.11:

From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
From: Mike Snitzer <snitzer@redhat.com>
Date: Mon, 14 Sep 2020 13:04:19 -0400
Subject: [PATCH] dm: fix bio splitting and its bio completion order for regular IO

dm_queue_split() is removed because __split_and_process_bio() _must_
handle splitting bios to ensure proper bio submission and completion
ordering as a bio is split.

Otherwise, multiple recursive calls to ->submit_bio will cause multiple
split bios to be allocated from the same ->bio_split mempool at the same
time. This would result in deadlock in low memory conditions because no
progress could be made (only one bio is available in ->bio_split
mempool).

This fix has been verified to still fix the loss of performance, due
to excess splitting, that commit 120c9257f5f1 provided.

Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
Reported-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>

--- a/drivers/md/dm.c	2020-09-21 18:46:16.000000000 -0400
+++ b/drivers/md/dm.c	2020-09-21 18:33:21.000000000 -0400
@@ -1727,23 +1727,6 @@
 	return ret;
 }
 
-static void dm_queue_split(struct mapped_device *md, struct dm_target *ti, struct bio **bio)
-{
-	unsigned len, sector_count;
-
-	sector_count = bio_sectors(*bio);
-	len = min_t(sector_t, max_io_len((*bio)->bi_iter.bi_sector, ti), sector_count);
-
-	if (sector_count > len) {
-		struct bio *split = bio_split(*bio, len, GFP_NOIO, &md->queue->bio_split);
-
-		bio_chain(split, *bio);
-		trace_block_split(md->queue, split, (*bio)->bi_iter.bi_sector);
-		generic_make_request(*bio);
-		*bio = split;
-	}
-}
-
 static blk_qc_t dm_process_bio(struct mapped_device *md,
 			       struct dm_table *map, struct bio *bio)
 {
@@ -1773,14 +1756,12 @@
 	if (current->bio_list) {
 		if (is_abnormal_io(bio))
 			blk_queue_split(md->queue, &bio);
-		else
-			dm_queue_split(md, ti, &bio);
+		/* regular IO is split by __split_and_process_bio */
 	}
 
 	if (dm_get_md_type(md) == DM_TYPE_NVME_BIO_BASED)
 		return __process_bio(md, map, bio, ti);
-	else
-		return __split_and_process_bio(md, map, bio);
+	return __split_and_process_bio(md, map, bio);
 }
 
 static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO
  2020-09-28 15:29 ` [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO Mike Snitzer
@ 2020-09-28 17:31   ` Greg KH
  2020-09-28 17:52     ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2020-09-28 17:31 UTC (permalink / raw)
  To: Mike Snitzer; +Cc: ming.lei, stable

On Mon, Sep 28, 2020 at 11:29:41AM -0400, Mike Snitzer wrote:
> This backport applies (with mild offset) to both v5.4.67 and v5.8.11:
> 
> >From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
> From: Mike Snitzer <snitzer@redhat.com>
> Date: Mon, 14 Sep 2020 13:04:19 -0400
> Subject: [PATCH] dm: fix bio splitting and its bio completion order for regular IO
> 
> dm_queue_split() is removed because __split_and_process_bio() _must_
> handle splitting bios to ensure proper bio submission and completion
> ordering as a bio is split.
> 
> Otherwise, multiple recursive calls to ->submit_bio will cause multiple
> split bios to be allocated from the same ->bio_split mempool at the same
> time. This would result in deadlock in low memory conditions because no
> progress could be made (only one bio is available in ->bio_split
> mempool).
> 
> This fix has been verified to still fix the loss of performance, due
> to excess splitting, that commit 120c9257f5f1 provided.
> 
> Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
> Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
> Reported-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Mike Snitzer <snitzer@redhat.com>

What is the git id of this patch in Linus's tree?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO
  2020-09-28 17:31   ` Greg KH
@ 2020-09-28 17:52     ` Greg KH
  2020-09-28 18:03       ` Mike Snitzer
  0 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2020-09-28 17:52 UTC (permalink / raw)
  To: Mike Snitzer; +Cc: ming.lei, stable

On Mon, Sep 28, 2020 at 07:31:44PM +0200, Greg KH wrote:
> On Mon, Sep 28, 2020 at 11:29:41AM -0400, Mike Snitzer wrote:
> > This backport applies (with mild offset) to both v5.4.67 and v5.8.11:
> > 
> > >From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
> > From: Mike Snitzer <snitzer@redhat.com>
> > Date: Mon, 14 Sep 2020 13:04:19 -0400
> > Subject: [PATCH] dm: fix bio splitting and its bio completion order for regular IO
> > 
> > dm_queue_split() is removed because __split_and_process_bio() _must_
> > handle splitting bios to ensure proper bio submission and completion
> > ordering as a bio is split.
> > 
> > Otherwise, multiple recursive calls to ->submit_bio will cause multiple
> > split bios to be allocated from the same ->bio_split mempool at the same
> > time. This would result in deadlock in low memory conditions because no
> > progress could be made (only one bio is available in ->bio_split
> > mempool).
> > 
> > This fix has been verified to still fix the loss of performance, due
> > to excess splitting, that commit 120c9257f5f1 provided.
> > 
> > Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
> > Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
> > Reported-by: Ming Lei <ming.lei@redhat.com>
> > Signed-off-by: Mike Snitzer <snitzer@redhat.com>
> 
> What is the git id of this patch in Linus's tree?

I dug it up:
	ee1dfad5325f ("dm: fix bio splitting and its bio completion order for regular IO")



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO
  2020-09-28 17:52     ` Greg KH
@ 2020-09-28 18:03       ` Mike Snitzer
  2020-09-28 18:43         ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Mike Snitzer @ 2020-09-28 18:03 UTC (permalink / raw)
  To: Greg KH; +Cc: ming.lei, stable

On Mon, Sep 28 2020 at  1:52pm -0400,
Greg KH <gregkh@linuxfoundation.org> wrote:

> On Mon, Sep 28, 2020 at 07:31:44PM +0200, Greg KH wrote:
> > On Mon, Sep 28, 2020 at 11:29:41AM -0400, Mike Snitzer wrote:
> > > This backport applies (with mild offset) to both v5.4.67 and v5.8.11:
> > > 
> > > >From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
> > > From: Mike Snitzer <snitzer@redhat.com>
> > > Date: Mon, 14 Sep 2020 13:04:19 -0400
> > > Subject: [PATCH] dm: fix bio splitting and its bio completion order for regular IO
> > > 
> > > dm_queue_split() is removed because __split_and_process_bio() _must_
> > > handle splitting bios to ensure proper bio submission and completion
> > > ordering as a bio is split.
> > > 
> > > Otherwise, multiple recursive calls to ->submit_bio will cause multiple
> > > split bios to be allocated from the same ->bio_split mempool at the same
> > > time. This would result in deadlock in low memory conditions because no
> > > progress could be made (only one bio is available in ->bio_split
> > > mempool).
> > > 
> > > This fix has been verified to still fix the loss of performance, due
> > > to excess splitting, that commit 120c9257f5f1 provided.
> > > 
> > > Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
> > > Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
> > > Reported-by: Ming Lei <ming.lei@redhat.com>
> > > Signed-off-by: Mike Snitzer <snitzer@redhat.com>
> > 
> > What is the git id of this patch in Linus's tree?
> 
> I dug it up:
> 	ee1dfad5325f ("dm: fix bio splitting and its bio completion order for regular IO")

I thought this line was adequate in my original email:
"From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001"

Maybe it was too subtle?  For future knowledge, how would you like to
see the git id of Linus's tree referenced?

Thanks,
Mike


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO
  2020-09-28 18:03       ` Mike Snitzer
@ 2020-09-28 18:43         ` Greg KH
  0 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2020-09-28 18:43 UTC (permalink / raw)
  To: Mike Snitzer; +Cc: ming.lei, stable

On Mon, Sep 28, 2020 at 02:03:26PM -0400, Mike Snitzer wrote:
> On Mon, Sep 28 2020 at  1:52pm -0400,
> Greg KH <gregkh@linuxfoundation.org> wrote:
> 
> > On Mon, Sep 28, 2020 at 07:31:44PM +0200, Greg KH wrote:
> > > On Mon, Sep 28, 2020 at 11:29:41AM -0400, Mike Snitzer wrote:
> > > > This backport applies (with mild offset) to both v5.4.67 and v5.8.11:
> > > > 
> > > > >From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
> > > > From: Mike Snitzer <snitzer@redhat.com>
> > > > Date: Mon, 14 Sep 2020 13:04:19 -0400
> > > > Subject: [PATCH] dm: fix bio splitting and its bio completion order for regular IO
> > > > 
> > > > dm_queue_split() is removed because __split_and_process_bio() _must_
> > > > handle splitting bios to ensure proper bio submission and completion
> > > > ordering as a bio is split.
> > > > 
> > > > Otherwise, multiple recursive calls to ->submit_bio will cause multiple
> > > > split bios to be allocated from the same ->bio_split mempool at the same
> > > > time. This would result in deadlock in low memory conditions because no
> > > > progress could be made (only one bio is available in ->bio_split
> > > > mempool).
> > > > 
> > > > This fix has been verified to still fix the loss of performance, due
> > > > to excess splitting, that commit 120c9257f5f1 provided.
> > > > 
> > > > Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
> > > > Cc: stable@vger.kernel.org # 5.0+, requires custom backport due to 5.9 changes
> > > > Reported-by: Ming Lei <ming.lei@redhat.com>
> > > > Signed-off-by: Mike Snitzer <snitzer@redhat.com>
> > > 
> > > What is the git id of this patch in Linus's tree?
> > 
> > I dug it up:
> > 	ee1dfad5325f ("dm: fix bio splitting and its bio completion order for regular IO")
> 
> I thought this line was adequate in my original email:
> "From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001"
> 
> Maybe it was too subtle?  For future knowledge, how would you like to
> see the git id of Linus's tree referenced?

Oh, that was subtle, sorry, missed it :)

Better ways can be in that sentence that said what trees to backport it
to, right?  Explicit is good, especially when having to deal with as
many patches as we deal with, right?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-09-28 18:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-28 13:56 FAILED: patch "[PATCH] dm: fix bio splitting and its bio completion order for" failed to apply to 5.4-stable tree gregkh
2020-09-28 15:29 ` [PATCH 5.4, 5.8] dm: fix bio splitting and its bio completion order for regular IO Mike Snitzer
2020-09-28 17:31   ` Greg KH
2020-09-28 17:52     ` Greg KH
2020-09-28 18:03       ` Mike Snitzer
2020-09-28 18:43         ` Greg KH

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.