All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xen-blkfront: fix mq start/stop race
@ 2017-06-22  1:36 Junxiao Bi
  2017-06-23  4:58 ` Junxiao Bi
  2017-06-23 12:57 ` Roger Pau Monné
  0 siblings, 2 replies; 9+ messages in thread
From: Junxiao Bi @ 2017-06-22  1:36 UTC (permalink / raw)
  To: xen-devel

When ring buf full, hw queue will be stopped. While blkif interrupt consume
request and make free space in ring buf, hw queue will be started again.
But since start queue is protected by spin lock while stop not, that will
cause a race.

interrupt:                                      process:
blkif_interrupt()                               blkif_queue_rq()
 kick_pending_request_queues_locked()
  blk_mq_start_stopped_hw_queues()
   clear_bit(BLK_MQ_S_STOPPED, &hctx->state)
                                                 blk_mq_stop_hw_queue(hctx)
   blk_mq_run_hw_queue(hctx, async)

If ring buf is made empty in this case, interrupt will never come, then the
hw queue will be stopped forever, all processes waiting for the pending io
in the queue will hung.

Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
Reviewed-by: Ankur Arora <ankur.a.arora@oracle.com>
---
 drivers/block/xen-blkfront.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8bb160cd00e1..4767b82b2cf6 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -912,8 +912,8 @@ out_err:
 	return BLK_MQ_RQ_QUEUE_ERROR;
 
 out_busy:
-	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 	blk_mq_stop_hw_queue(hctx);
+	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 	return BLK_MQ_RQ_QUEUE_BUSY;
 }
 
-- 
1.7.9.5


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

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

end of thread, other threads:[~2017-07-20  1:26 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-22  1:36 [PATCH] xen-blkfront: fix mq start/stop race Junxiao Bi
2017-06-23  4:58 ` Junxiao Bi
2017-06-23 12:22   ` Boris Ostrovsky
2017-06-23 12:57 ` Roger Pau Monné
2017-07-19  1:19   ` Junxiao Bi
2017-07-19  7:37     ` Roger Pau Monné
2017-07-19  7:51       ` Junxiao Bi
2017-07-19 14:08         ` Konrad Rzeszutek Wilk
2017-07-20  1:29           ` Junxiao Bi

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.