Message ID | 7c8af8d2-2ac9-2767-5e5f-8de72eba3814@sandisk.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Sep 26, 2016 at 11:27:49AM -0700, Bart Van Assche wrote: > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > --- Looks good, Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
On Tue, Sep 27, 2016 at 2:27 AM, Bart Van Assche <bart.vanassche@sandisk.com> wrote: > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > --- > block/blk-core.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/block/blk-core.c b/block/blk-core.c > index 8cc8006..5ecc7ab 100644 > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -689,7 +689,10 @@ void blk_freeze_queue_start(struct request_queue *q) > freeze_depth = atomic_inc_return(&q->mq_freeze_depth); > if (freeze_depth == 1) { > percpu_ref_kill(&q->q_usage_counter); > - blk_mq_run_hw_queues(q, false); > + if (q->mq_ops) > + blk_mq_run_hw_queues(q, false); > + else if (q->request_fn) > + blk_run_queue(q); Just wondering if you have a non-blk-mq drivers which need this change, cause we only hold .q_usage_counter for sync bio. > } > } > > @@ -700,17 +703,11 @@ void blk_freeze_queue_wait(struct request_queue *q) > > /* > * Guarantee no request is in use, so we can change any data structure of > - * the queue afterward. > + * the queue afterward. Increases q->mq_freeze_depth and waits until > + * q->q_usage_counter drops to zero. > */ > void blk_freeze_queue(struct request_queue *q) > { > - /* > - * In the !blk_mq case we are only calling this to kill the > - * q_usage_counter, otherwise this increases the freeze depth > - * and waits for it to return to zero. For this reason there is > - * no blk_unfreeze_queue(), and blk_freeze_queue() is not > - * exported to drivers as the only user for unfreeze is blk_mq. > - */ > blk_freeze_queue_start(q); > blk_freeze_queue_wait(q); > } > -- > 2.10.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On 09/27/16 06:22, Ming Lei wrote: > On Tue, Sep 27, 2016 at 2:27 AM, Bart Van Assche > <bart.vanassche@sandisk.com> wrote: >> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> >> --- >> block/blk-core.c | 15 ++++++--------- >> 1 file changed, 6 insertions(+), 9 deletions(-) >> >> diff --git a/block/blk-core.c b/block/blk-core.c >> index 8cc8006..5ecc7ab 100644 >> --- a/block/blk-core.c >> +++ b/block/blk-core.c >> @@ -689,7 +689,10 @@ void blk_freeze_queue_start(struct request_queue *q) >> freeze_depth = atomic_inc_return(&q->mq_freeze_depth); >> if (freeze_depth == 1) { >> percpu_ref_kill(&q->q_usage_counter); >> - blk_mq_run_hw_queues(q, false); >> + if (q->mq_ops) >> + blk_mq_run_hw_queues(q, false); >> + else if (q->request_fn) >> + blk_run_queue(q); > > Just wondering if you have a non-blk-mq drivers which need this change, > cause we only hold .q_usage_counter for sync bio. Hello Ming Lei, Patch 8/9 calls blk_quiesce_queue() and blk_resume_queue() from a code path that is used in both blk-mq and non-blk-mq mode. Although it wouldn't be hard to modify that patch such that it only uses these two functions in blk-mq mode, that wouldn't be very elegant. Jens, regarding non-blk-mq mode and q_usage_counter: do you prefer that I rework patch 8/9 such that blk_quiesce_queue() and blk_resume_queue() are only used in blk-mq mode or are you OK with adding a blk_queue_enter() call in get_request() and a blk_queue_exit() call to __blk_put_request()? Bart. -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 09/27/2016 07:42 AM, Bart Van Assche wrote: > Jens, regarding non-blk-mq mode and q_usage_counter: do you prefer that > I rework patch 8/9 such that blk_quiesce_queue() and blk_resume_queue() > are only used in blk-mq mode or are you OK with adding a > blk_queue_enter() call in get_request() and a blk_queue_exit() call to > __blk_put_request()? (replying to my own e-mail) Although it is easy to make q_usage_counter count non-blk-mq requests, extending the blk_quiesce_queue() waiting mechanism to the non-blk-mq path is non-trivial. To limit the number of changes in this patch series I will drop the non-blk-mq changes from this patch series. Bart. -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/block/blk-core.c b/block/blk-core.c index 8cc8006..5ecc7ab 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -689,7 +689,10 @@ void blk_freeze_queue_start(struct request_queue *q) freeze_depth = atomic_inc_return(&q->mq_freeze_depth); if (freeze_depth == 1) { percpu_ref_kill(&q->q_usage_counter); - blk_mq_run_hw_queues(q, false); + if (q->mq_ops) + blk_mq_run_hw_queues(q, false); + else if (q->request_fn) + blk_run_queue(q); } } @@ -700,17 +703,11 @@ void blk_freeze_queue_wait(struct request_queue *q) /* * Guarantee no request is in use, so we can change any data structure of - * the queue afterward. + * the queue afterward. Increases q->mq_freeze_depth and waits until + * q->q_usage_counter drops to zero. */ void blk_freeze_queue(struct request_queue *q) { - /* - * In the !blk_mq case we are only calling this to kill the - * q_usage_counter, otherwise this increases the freeze depth - * and waits for it to return to zero. For this reason there is - * no blk_unfreeze_queue(), and blk_freeze_queue() is not - * exported to drivers as the only user for unfreeze is blk_mq. - */ blk_freeze_queue_start(q); blk_freeze_queue_wait(q); }
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> --- block/blk-core.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)