blk-mq: Return true if request was completed
authorKeith Busch <keith.busch@intel.com>
Mon, 26 Nov 2018 16:54:28 +0000 (09:54 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 26 Nov 2018 17:34:24 +0000 (10:34 -0700)
A driver may have internal state to cleanup if we're pretending a request
didn't complete. Return 'false' if the command wasn't actually completed
due to the timeout error injection, and true otherwise.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c
include/linux/blk-mq.h

index 37674c1766a754375740ae781ebb17664b01925a..7c8cfa0cd420e2fb4f231ef16bda720bff671817 100644 (file)
@@ -638,11 +638,12 @@ static void hctx_lock(struct blk_mq_hw_ctx *hctx, int *srcu_idx)
  *     Ends all I/O on a request. It does not handle partial completions.
  *     The actual completion happens out-of-order, through a IPI handler.
  **/
-void blk_mq_complete_request(struct request *rq)
+bool blk_mq_complete_request(struct request *rq)
 {
        if (unlikely(blk_should_fake_timeout(rq->q)))
-               return;
+               return false;
        __blk_mq_complete_request(rq);
+       return true;
 }
 EXPORT_SYMBOL(blk_mq_complete_request);
 
index ca0520ca64377f42ba37e43e2d1f3eaaecb2538f..6e3da356a8eb1f4bb90f92cabe28ec576a1aa786 100644 (file)
@@ -298,7 +298,7 @@ void blk_mq_add_to_requeue_list(struct request *rq, bool at_head,
                                bool kick_requeue_list);
 void blk_mq_kick_requeue_list(struct request_queue *q);
 void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
-void blk_mq_complete_request(struct request *rq);
+bool blk_mq_complete_request(struct request *rq);
 bool blk_mq_bio_list_merge(struct request_queue *q, struct list_head *list,
                           struct bio *bio);
 bool blk_mq_queue_stopped(struct request_queue *q);