mirror of https://gitee.com/openkylin/linux.git
nvme: introduce a nvme_host_path_error helper
When using nvme native multipathing, if a path related error occurs during ->queue_rq, the request needs to be completed with NVME_SC_HOST_PATH_ERROR so that the request can be failed over. Introduce a helper to complete the command from ->queue_rq in a wait that invokes nvme_complete_rq. Signed-off-by: Chao Leng <lengchao@huawei.com> [hch: renamed, added a return value to clean up the callers a bit] Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
83fba8c811
commit
dda3248e7f
|
@ -355,6 +355,21 @@ void nvme_complete_rq(struct request *req)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(nvme_complete_rq);
|
||||
|
||||
/*
|
||||
* Called to unwind from ->queue_rq on a failed command submission so that the
|
||||
* multipathing code gets called to potentially failover to another path.
|
||||
* The caller needs to unwind all transport specific resource allocations and
|
||||
* must return propagate the return value.
|
||||
*/
|
||||
blk_status_t nvme_host_path_error(struct request *req)
|
||||
{
|
||||
nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR;
|
||||
blk_mq_set_request_complete(req);
|
||||
nvme_complete_rq(req);
|
||||
return BLK_STS_OK;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvme_host_path_error);
|
||||
|
||||
bool nvme_cancel_request(struct request *req, void *data, bool reserved)
|
||||
{
|
||||
dev_dbg_ratelimited(((struct nvme_ctrl *) data)->device,
|
||||
|
|
|
@ -575,6 +575,7 @@ static inline bool nvme_is_aen_req(u16 qid, __u16 command_id)
|
|||
}
|
||||
|
||||
void nvme_complete_rq(struct request *req);
|
||||
blk_status_t nvme_host_path_error(struct request *req);
|
||||
bool nvme_cancel_request(struct request *req, void *data, bool reserved);
|
||||
void nvme_cancel_tagset(struct nvme_ctrl *ctrl);
|
||||
void nvme_cancel_admin_tagset(struct nvme_ctrl *ctrl);
|
||||
|
|
Loading…
Reference in New Issue