Skip to contentSkip to conversation

Patch "blk-mq: really fix plug list flushing for nomerge queues" has been added to the 4.4-stable tree

PATCH [email protected] 1 participant 1 message Feb 23, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

blk-mq: really fix plug list flushing for nomerge queues

to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
blk-mq-really-fix-plug-list-flushing-for-nomerge-queues.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 87c279e613f848c691111b29d49de8df3f4f56da Mon Sep 17 00:00:00 2001

From: Omar Sandoval <[email protected]>
Date: Wed, 1 Jun 2016 22:18:48 -0700
Subject: blk-mq: really fix plug list flushing for nomerge queues

From: Omar Sandoval <[email protected]>

commit 87c279e613f848c691111b29d49de8df3f4f56da upstream.

Commit 0809e3ac6231 ("block: fix plug list flushing for nomerge queues") updated blk_mq_make_request() to set request_count even when blk_queue_nomerges() returns true. However, blk_mq_make_request() only does limited plugging and doesn't use request_count; blk_sq_make_request() is the one that should have been fixed. Do that and get rid of the unnecessary work in the mq version.

Fixes 0809e3ac6231 ("block: fix plug list flushing for nomerge queues")
Cc Sumit Semwal <[email protected]>
---
 block/blk-mq.c |   17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)
block/blk-mq.c +8 -9
@@ -1259,12 +1259,9 @@ static blk_qc_t blk_mq_make_request(stru
 
 	blk_queue_split(q, &bio, q->bio_split);
 
-	if (!is_flush_fua && !blk_queue_nomerges(q)) {
-		if (blk_attempt_plug_merge(q, bio, &request_count,
-					   &same_queue_rq))
-			return BLK_QC_T_NONE;
-	} else
-		request_count = blk_plug_queued_count(q);
+	if (!is_flush_fua && !blk_queue_nomerges(q) &&
+	    blk_attempt_plug_merge(q, bio, &request_count, &same_queue_rq))
+		return BLK_QC_T_NONE;
 
 	rq = blk_mq_map_request(q, bio, &data);
 	if (unlikely(!rq))
@@ -1355,9 +1352,11 @@ static blk_qc_t blk_sq_make_request(stru
 
 	blk_queue_split(q, &bio, q->bio_split);
 
-	if (!is_flush_fua && !blk_queue_nomerges(q) &&
-	    blk_attempt_plug_merge(q, bio, &request_count, NULL))
-		return BLK_QC_T_NONE;
+	if (!is_flush_fua && !blk_queue_nomerges(q)) {
+		if (blk_attempt_plug_merge(q, bio, &request_count, NULL))
+			return BLK_QC_T_NONE;
+	} else
+		request_count = blk_plug_queued_count(q);
 
 	rq = blk_mq_map_request(q, bio, &data);
 	if (unlikely(!rq))

Patches currently in stable-queue which might be from [email protected] are

queue-4.4/blk-mq-really-fix-plug-list-flushing-for-nomerge-queues.patch