]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
blk-mq: Provide freeze queue timeout
authorKeith Busch <keith.busch@intel.com>
Wed, 1 Mar 2017 19:22:11 +0000 (14:22 -0500)
committerAshok Vairavan <ashok.vairavan@oracle.com>
Wed, 19 Jul 2017 20:03:53 +0000 (13:03 -0700)
A driver may wish to take corrective action if queued requests do not
complete within a set time.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
(cherry picked from commit f91328c40a559362b6e7b7bfee01ca17fda87592)

Orabug: 26486098

Signed-off-by: Ashok Vairavan <ashok.vairavan@oracle.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
block/blk-mq.c
include/linux/blk-mq.h

index e6377ea56c9c72c9012187f6c86bcba2efe908ea..bebb92640a6c9efbd7242900e4904bfb6c90d5ef 100644 (file)
@@ -94,6 +94,15 @@ static void blk_mq_freeze_queue_wait(struct request_queue *q)
        wait_event(q->mq_freeze_wq, percpu_ref_is_zero(&q->q_usage_counter));
 }
 
+int blk_mq_freeze_queue_wait_timeout(struct request_queue *q,
+                                    unsigned long timeout)
+{
+       return wait_event_timeout(q->mq_freeze_wq,
+                                       percpu_ref_is_zero(&q->q_usage_counter),
+                                       timeout);
+}
+EXPORT_SYMBOL_GPL(blk_mq_freeze_queue_wait_timeout);
+
 /*
  * Guarantee no request is in use, so we can change any data structure of
  * the queue afterward.
index 6953e53cc839eb576d9008071a41674a02160fd9..6de02be8f349de27b9ca95b4de0f9c9350830307 100644 (file)
@@ -238,6 +238,8 @@ void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
 void blk_mq_freeze_queue(struct request_queue *q);
 void blk_mq_unfreeze_queue(struct request_queue *q);
 void blk_mq_freeze_queue_start(struct request_queue *q);
+int blk_mq_freeze_queue_wait_timeout(struct request_queue *q,
+                                    unsigned long timeout);
 
 void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues);