aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm.c
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2015-07-08 16:08:24 -0400
committerMike Snitzer <snitzer@redhat.com>2015-07-08 16:16:07 -0400
commit621739b00e16ca2d80411dc9b111cb15b91f3ba9 (patch)
tree76870c96eaa41113cb8f99669531c9f53dba12a5 /drivers/md/dm.c
parent1c7518794a3647eb345d59ee52844e8a40405198 (diff)
Revert "dm: only run the queue on completion if congested or no requests pending"
This reverts commit 9a0e609e3fd8a95c96629b9fbde6b8c5b9a1456a. (Resolved a conflict during revert due to commit bfebd1cdb4 that came after) This revert is motivated by a couple failure reports on request-based DM multipath testbeds: 1) Netapp reported that their multipath fault injection test under heavy IO load can stall longer than 300 seconds. 2) IBM reported elevated lock contention in their testbed (likely due to increased back pressure due to IO not being dispatched as quickly): https://www.redhat.com/archives/dm-devel/2015-July/msg00057.html Signed-off-by: Mike Snitzer <snitzer@redhat.com> Cc: stable@vger.kernel.org # 4.1+
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r--drivers/md/dm.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index f331d888e7f5..de703778d39f 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1067,13 +1067,10 @@ static void rq_end_stats(struct mapped_device *md, struct request *orig)
1067 */ 1067 */
1068static void rq_completed(struct mapped_device *md, int rw, bool run_queue) 1068static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
1069{ 1069{
1070 int nr_requests_pending;
1071
1072 atomic_dec(&md->pending[rw]); 1070 atomic_dec(&md->pending[rw]);
1073 1071
1074 /* nudge anyone waiting on suspend queue */ 1072 /* nudge anyone waiting on suspend queue */
1075 nr_requests_pending = md_in_flight(md); 1073 if (!md_in_flight(md))
1076 if (!nr_requests_pending)
1077 wake_up(&md->wait); 1074 wake_up(&md->wait);
1078 1075
1079 /* 1076 /*
@@ -1085,8 +1082,7 @@ static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
1085 if (run_queue) { 1082 if (run_queue) {
1086 if (md->queue->mq_ops) 1083 if (md->queue->mq_ops)
1087 blk_mq_run_hw_queues(md->queue, true); 1084 blk_mq_run_hw_queues(md->queue, true);
1088 else if (!nr_requests_pending || 1085 else
1089 (nr_requests_pending >= md->queue->nr_congestion_on))
1090 blk_run_queue_async(md->queue); 1086 blk_run_queue_async(md->queue);
1091 } 1087 }
1092 1088