Skip to content

Commit

Permalink
blk-cgroup: don't quiesce the queue on policy activate/deactivate
Browse files Browse the repository at this point in the history
There's no potential harm in quiescing the queue, but it also doesn't
buy us anything. And we can't run the queue async for policy
deactivate, since we could be in the path of tearing the queue down.
If we schedule an async run of the queue at that time, we're racing
with queue teardown AFTER having we've already torn most of it down.

Reported-by: Omar Sandoval <osandov@fb.com>
Fixes: 4d199c6 ("blk-cgroup: ensure that we clear the stop bit on quiesced queues")
Tested-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
axboe committed Jan 18, 2017
1 parent 6c0ca7a commit 38dbb7d
Showing 1 changed file with 8 additions and 12 deletions.
20 changes: 8 additions & 12 deletions block/blk-cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1223,10 +1223,9 @@ int blkcg_activate_policy(struct request_queue *q,
if (blkcg_policy_enabled(q, pol))
return 0;

if (q->mq_ops) {
if (q->mq_ops)
blk_mq_freeze_queue(q);
blk_mq_quiesce_queue(q);
} else
else
blk_queue_bypass_start(q);
pd_prealloc:
if (!pd_prealloc) {
Expand Down Expand Up @@ -1265,10 +1264,9 @@ int blkcg_activate_policy(struct request_queue *q,

spin_unlock_irq(q->queue_lock);
out_bypass_end:
if (q->mq_ops) {
if (q->mq_ops)
blk_mq_unfreeze_queue(q);
blk_mq_start_stopped_hw_queues(q, true);
} else
else
blk_queue_bypass_end(q);
if (pd_prealloc)
pol->pd_free_fn(pd_prealloc);
Expand All @@ -1292,10 +1290,9 @@ void blkcg_deactivate_policy(struct request_queue *q,
if (!blkcg_policy_enabled(q, pol))
return;

if (q->mq_ops) {
if (q->mq_ops)
blk_mq_freeze_queue(q);
blk_mq_quiesce_queue(q);
} else
else
blk_queue_bypass_start(q);

spin_lock_irq(q->queue_lock);
Expand All @@ -1318,10 +1315,9 @@ void blkcg_deactivate_policy(struct request_queue *q,

spin_unlock_irq(q->queue_lock);

if (q->mq_ops) {
if (q->mq_ops)
blk_mq_unfreeze_queue(q);
blk_mq_start_stopped_hw_queues(q, true);
} else
else
blk_queue_bypass_end(q);
}
EXPORT_SYMBOL_GPL(blkcg_deactivate_policy);
Expand Down

0 comments on commit 38dbb7d

Please sign in to comment.