blk-mq: Let drivers cancel requeue_work
Kicking requeued requests will start h/w queues in a work_queue, which may alter the driver's requested state to temporarily stop them. This patch exports a method to cancel the q->requeue_work so a driver can be assured stopped h/w queues won't be started up before it is ready. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
973c01919b
commit
c68ed59f53
|
@ -527,6 +527,12 @@ void blk_mq_add_to_requeue_list(struct request *rq, bool at_head)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(blk_mq_add_to_requeue_list);
|
EXPORT_SYMBOL(blk_mq_add_to_requeue_list);
|
||||||
|
|
||||||
|
void blk_mq_cancel_requeue_work(struct request_queue *q)
|
||||||
|
{
|
||||||
|
cancel_work_sync(&q->requeue_work);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(blk_mq_cancel_requeue_work);
|
||||||
|
|
||||||
void blk_mq_kick_requeue_list(struct request_queue *q)
|
void blk_mq_kick_requeue_list(struct request_queue *q)
|
||||||
{
|
{
|
||||||
kblockd_schedule_work(&q->requeue_work);
|
kblockd_schedule_work(&q->requeue_work);
|
||||||
|
|
|
@ -201,6 +201,7 @@ void __blk_mq_end_request(struct request *rq, int error);
|
||||||
|
|
||||||
void blk_mq_requeue_request(struct request *rq);
|
void blk_mq_requeue_request(struct request *rq);
|
||||||
void blk_mq_add_to_requeue_list(struct request *rq, bool at_head);
|
void blk_mq_add_to_requeue_list(struct request *rq, bool at_head);
|
||||||
|
void blk_mq_cancel_requeue_work(struct request_queue *q);
|
||||||
void blk_mq_kick_requeue_list(struct request_queue *q);
|
void blk_mq_kick_requeue_list(struct request_queue *q);
|
||||||
void blk_mq_complete_request(struct request *rq);
|
void blk_mq_complete_request(struct request *rq);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue