Message ID | 20210121070330.19701-2-lengchao@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | avoid double request completion and IO error | expand |
On Thu, Jan 21, 2021 at 03:03:26PM +0800, Chao Leng wrote: > 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. So I'm not happy with this helper. It should at least: a) be named and documented to only apply for the ->queue_rq faіlure case b) check that the request is in MQ_RQ_IDLE state
On 2021/1/21 16:40, Christoph Hellwig wrote: > On Thu, Jan 21, 2021 at 03:03:26PM +0800, Chao Leng wrote: >> 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. > > So I'm not happy with this helper. It should at least: > > a) be named and documented to only apply for the ->queue_rq faіlure case Although blk_mq_complete_request_remote can set the markup directly, blk_mq_complete_request_remote can also use this helper. This helper do not need special processing for ->queue_rq failure. > b) check that the request is in MQ_RQ_IDLE state No, the request may also be in MQ_RQ_IN_FLIGHT state. Do not need to care whether the original state is MQ_RQ_IDLE or MQ_RQ_IN_FLIGHT. > . >
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 47b021952ac7..fc096b04bb7a 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -494,6 +494,11 @@ static inline int blk_mq_request_completed(struct request *rq) return blk_mq_rq_state(rq) == MQ_RQ_COMPLETE; } +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);
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> --- include/linux/blk-mq.h | 5 +++++ 1 file changed, 5 insertions(+)