Thread (19 messages) 19 messages, 2 authors, 2017-06-02

Re: [PATCH v3 5/9] blk-mq: fix blk_mq_quiesce_queue

From: Ming Lei <hidden>
Date: 2017-06-02 02:02:26

On Thu, Jun 01, 2017 at 11:19:11PM +0000, Bart Van Assche wrote:
On Thu, 2017-06-01 at 10:21 +0800, Ming Lei wrote:
quoted
On Wed, May 31, 2017 at 03:37:30PM +0000, Bart Van Assche wrote:
quoted
On Wed, 2017-05-31 at 20:37 +0800, Ming Lei wrote:
quoted
+	/* wait until queue is unquiesced */
+	wait_event_cmd(q->quiesce_wq, !blk_queue_quiesced(q),
+			may_sleep ?
+			srcu_read_unlock(&hctx->queue_rq_srcu, *srcu_idx) :
+			rcu_read_unlock(),
+			may_sleep ?
+			*srcu_idx = srcu_read_lock(&hctx->queue_rq_srcu) :
+			rcu_read_lock());
+
 	if (q->elevator)
 		goto insert;
What I see is that in this patch a new waitqueue has been introduced
(quiesce_wq) and also that an explanation of why you think this new waitqueue
is needed is missing completely. Why is it that you think that the
synchronize_scru() and synchronize_rcu() calls in blk_mq_quiesce_queue() are
not sufficient? If this new waitqueue is not needed, please remove that
waitqueue again.
OK, the reason is simple, and it is only related with direct issue.

Under this situation, when the queue is quiesced, we have to

	- insert the current request into sw queue(scheduler queue)
	OR
	-wait until queue becomes unquiesced like what this patch is doing

The disadvantage of the 1st way is that we have to consider to run queue
again in blk_mq_unquiesce_queue() for the queued requests during quiescing.

For the 2nd way(what this patch is doing), one benefit is that application
can avoid to submit I/O to a quiesced queue. Another benefit is that we
needn't to consider to run queue in blk_mq_unquiesce_queue(). But with cost
of one waitqueue, the cost should be cheap, but if you persist on the 1st
approach, I am fine to change to that.
Hello Ming,

Since the runtime overhead of the alternative approach (insert into queue) is
significantly smaller and since it will result in a simpler implementation I
prefer the alternative approach.
OK, no problem, will change to the way of insert & run queue.

Thanks,
Ming
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help