blk-mq: introduce blk_mq_set_request_complete
authorChao Leng <lengchao@huawei.com>
Mon, 1 Feb 2021 03:49:38 +0000 (11:49 +0800)
committerChristoph Hellwig <hch@lst.de>
Wed, 10 Feb 2021 15:38:02 +0000 (16:38 +0100)
nvme drivers need to set the state of request to MQ_RQ_COMPLETE when
directly complete request in queue_rq.
So add blk_mq_set_request_complete.

Signed-off-by: Chao Leng <lengchao@huawei.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
include/linux/blk-mq.h

index aabbf68..2c473c9 100644 (file)
@@ -490,6 +490,18 @@ static inline int blk_mq_request_completed(struct request *rq)
        return blk_mq_rq_state(rq) == MQ_RQ_COMPLETE;
 }
 
+/*
+ * 
+ * Set the state to complete when completing a request from inside ->queue_rq.
+ * This is used by drivers that want to ensure special complete actions that
+ * need access to the request are called on failure, e.g. by nvme for
+ * multipathing.
+ */
+static inline void blk_mq_set_request_complete(struct request *rq)
+{
+       WRITE_ONCE(rq->state, MQ_RQ_COMPLETE);
+}
+
 void blk_mq_start_request(struct request *rq);
 void blk_mq_end_request(struct request *rq, blk_status_t error);
 void __blk_mq_end_request(struct request *rq, blk_status_t error);