Message ID | 20210121070330.19701-3-lengchao@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | avoid double request completion and IO error | expand |
> +static inline void nvme_complete_failed_req(struct request *req) I think the name is too generic, and the function also needs a little comment, especially as it forces a specific error code. > +{ > + nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR; > + blk_mq_set_request_complete(req); > + nvme_complete_rq(req); > +} Also no need to mark this as an inline function.
On 2021/1/21 16:41, Christoph Hellwig wrote: >> +static inline void nvme_complete_failed_req(struct request *req) > > I think the name is too generic, and the function also needs a little > comment, especially as it forces a specific error code. Ok, thank you for your suggestion. Use error status as a parameter may be a better choice. > >> +{ >> + nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR; >> + blk_mq_set_request_complete(req); >> + nvme_complete_rq(req); >> +} > > Also no need to mark this as an inline function. Yes, export the function is ok. > . >
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 88a6b97247f5..01fb54ba3d1f 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -575,6 +575,14 @@ static inline bool nvme_is_aen_req(u16 qid, __u16 command_id) } void nvme_complete_rq(struct request *req); + +static inline void nvme_complete_failed_req(struct request *req) +{ + nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR; + blk_mq_set_request_complete(req); + nvme_complete_rq(req); +} + bool nvme_cancel_request(struct request *req, void *data, bool reserved); bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, enum nvme_ctrl_state new_state);
Work with nvme native multipath, if a path related error occurs when queue_rq call HBA drive to send request, queue_rq need complete the request with NVME_SC_HOST_PATH_ERROR, the request will fail over to retry if needed. So introduce nvme_complete_failed_req for queue_rq and nvmf_fail_nonready_command. Signed-off-by: Chao Leng <lengchao@huawei.com> --- drivers/nvme/host/nvme.h | 8 ++++++++ 1 file changed, 8 insertions(+)