From patchwork Thu Jan 7 03:31:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002811 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E6E4C43381 for ; Thu, 7 Jan 2021 03:32:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DF27C22D01 for ; Thu, 7 Jan 2021 03:32:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726821AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:10030 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725803AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DBBb804xqzj4ZZ; Thu, 7 Jan 2021 11:31:00 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:50 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 1/6] blk-mq: introduce blk_mq_set_request_complete Date: Thu, 7 Jan 2021 11:31:44 +0800 Message-ID: <20210107033149.15701-2-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org In some scenarios, nvme need setting the state of request to MQ_RQ_COMPLETE. So add an inline function blk_mq_set_request_complete. For details, see the subsequent patches. Signed-off-by: Chao Leng --- include/linux/blk-mq.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index e7482e6ad3ec..cee72d31054d 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -493,6 +493,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); From patchwork Thu Jan 7 03:31:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002819 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0476BC433E0 for ; Thu, 7 Jan 2021 03:32:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BB4B922D01 for ; Thu, 7 Jan 2021 03:32:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726829AbhAGDcw (ORCPT ); Wed, 6 Jan 2021 22:32:52 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:9963 "EHLO szxga06-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726641AbhAGDcw (ORCPT ); Wed, 6 Jan 2021 22:32:52 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4DBBbM0ddHzj3T3; Thu, 7 Jan 2021 11:31:11 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:51 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 2/6] nvme-core: introduce complete failed request Date: Thu, 7 Jan 2021 11:31:45 +0800 Message-ID: <20210107033149.15701-3-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org When a request is queued failed, if the fail status is not BLK_STS_RESOURCE, BLK_STS_DEV_RESOURCE, BLK_STS_ZONE_RESOURCE, the request is need to complete with nvme_complete_rq in queue_rq. So introduce nvme_try_complete_failed_req. The request is needed to complete with NVME_SC_HOST_PATH_ERROR in nvmf_fail_nonready_command and queue_rq. So introduce nvme_complete_failed_req. For details, see the subsequent patches. Signed-off-by: Chao Leng --- drivers/nvme/host/nvme.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index bfcedfa4b057..fc4eefdfbb34 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -649,6 +649,27 @@ void nvme_put_ns_from_disk(struct nvme_ns_head *head, int idx); extern const struct attribute_group *nvme_ns_id_attr_groups[]; extern const struct block_device_operations nvme_ns_head_ops; +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); +} + +static inline blk_status_t nvme_try_complete_failed_req(struct request *req, + blk_status_t ret) +{ + switch (ret) { + case BLK_STS_RESOURCE: + case BLK_STS_DEV_RESOURCE: + case BLK_STS_ZONE_RESOURCE: + return ret; + default: + nvme_complete_failed_req(req); + return BLK_STS_OK; + } +} + #ifdef CONFIG_NVME_MULTIPATH static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) { From patchwork Thu Jan 7 03:31:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002807 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAD99C433DB for ; Thu, 7 Jan 2021 03:32:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9A57B22D01 for ; Thu, 7 Jan 2021 03:32:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726799AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:10031 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726681AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DBBb76zDlzj4bB; Thu, 7 Jan 2021 11:30:59 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:52 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 3/6] nvme-fabrics: avoid repeated request completion for nvmf_fail_nonready_command Date: Thu, 7 Jan 2021 11:31:46 +0800 Message-ID: <20210107033149.15701-4-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org The request may be completed with NVME_SC_HOST_PATH_ERROR in nvmf_fail_nonready_command. The state of request will be changed to MQ_RQ_IN_FLIGHT before call nvme_complete_rq. If free the request asynchronously such as in nvme_submit_user_cmd, in extreme scenario the request will be repeated freed in tear down. Nvmf_fail_nonready_command do not need calling blk_mq_start_request before complete the request. Nvmf_fail_nonready_command should set the state of request to MQ_RQ_COMPLETE before complete the request. Signed-off-by: Chao Leng --- drivers/nvme/host/fabrics.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 72ac00173500..874e4320e214 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -553,9 +553,7 @@ blk_status_t nvmf_fail_nonready_command(struct nvme_ctrl *ctrl, !blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH)) return BLK_STS_RESOURCE; - nvme_req(rq)->status = NVME_SC_HOST_PATH_ERROR; - blk_mq_start_request(rq); - nvme_complete_rq(rq); + nvme_complete_failed_req(rq); return BLK_STS_OK; } EXPORT_SYMBOL_GPL(nvmf_fail_nonready_command); From patchwork Thu Jan 7 03:31:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002817 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46D37C433E0 for ; Thu, 7 Jan 2021 03:32:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 11F3E23100 for ; Thu, 7 Jan 2021 03:32:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726773AbhAGDcn (ORCPT ); Wed, 6 Jan 2021 22:32:43 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:9962 "EHLO szxga06-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726774AbhAGDcj (ORCPT ); Wed, 6 Jan 2021 22:32:39 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4DBBbM09nrzj3RW; Thu, 7 Jan 2021 11:31:11 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:52 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 4/6] nvme-rdma: avoid IO error and repeated request completion Date: Thu, 7 Jan 2021 11:31:47 +0800 Message-ID: <20210107033149.15701-5-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org When a request is queued failed, blk_status_t is directly returned to the blk-mq. If blk_status_t is not BLK_STS_RESOURCE, BLK_STS_DEV_RESOURCE, BLK_STS_ZONE_RESOURCE, blk-mq call blk_mq_end_request to complete the request with BLK_STS_IOERR. In two scenarios, the request should be retried and may succeed. First, if work with nvme multipath, the request may be retried successfully in another path, because the error is probably related to the path. Second, if work without multipath software, the request may be retried successfully after error recovery. If the request is complete with BLK_STS_IOERR in blk_mq_dispatch_rq_list. The state of request may be changed to MQ_RQ_IN_FLIGHT. If free the request asynchronously such as in nvme_submit_user_cmd, in extreme scenario the request will be repeated freed in tear down. If a non-resource error occurs in queue_rq, should directly call nvme_complete_rq to complete request and set the state of request to MQ_RQ_COMPLETE. nvme_complete_rq will decide to retry, fail over or end the request. Signed-off-by: Chao Leng --- drivers/nvme/host/rdma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index df9f6f4549f1..4a89bf44ecdc 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c @@ -2093,7 +2093,7 @@ static blk_status_t nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, unmap_qe: ib_dma_unmap_single(dev, req->sqe.dma, sizeof(struct nvme_command), DMA_TO_DEVICE); - return ret; + return nvme_try_complete_failed_req(rq, ret); } static int nvme_rdma_poll(struct blk_mq_hw_ctx *hctx) From patchwork Thu Jan 7 03:31:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002815 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7AE79C4332B for ; Thu, 7 Jan 2021 03:32:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 36858230F9 for ; Thu, 7 Jan 2021 03:32:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726808AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:10032 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726051AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DBBb76R2vzj3M0; Thu, 7 Jan 2021 11:30:59 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:53 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 5/6] nvme-tcp: avoid IO error and repeated request completion Date: Thu, 7 Jan 2021 11:31:48 +0800 Message-ID: <20210107033149.15701-6-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org When a request is queued failed, blk_status_t is directly returned to the blk-mq. If blk_status_t is not BLK_STS_RESOURCE, BLK_STS_DEV_RESOURCE, BLK_STS_ZONE_RESOURCE, blk-mq call blk_mq_end_request to complete the request with BLK_STS_IOERR. In two scenarios, the request should be retried and may succeed. First, if work with nvme multipath, the request may be retried successfully in another path, because the error is probably related to the path. Second, if work without multipath software, the request may be retried successfully after error recovery. If the request is completed with BLK_STS_IOERR in blk_mq_dispatch_rq_list. The state of request may be changed to MQ_RQ_IN_FLIGHT. If free the request asynchronously such as in nvme_submit_user_cmd, in extreme scenario the request will be repeated freed in tear down. If a non-resource error occurs when queue_rq, should directly call nvme_complete_rq to complete request and set the state of request to MQ_RQ_COMPLETE. nvme_complete_rq will decide to retry, fail over or end the request. Signed-off-by: Chao Leng --- drivers/nvme/host/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 1ba659927442..a81683ce8cff 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -2306,7 +2306,7 @@ static blk_status_t nvme_tcp_queue_rq(struct blk_mq_hw_ctx *hctx, ret = nvme_tcp_setup_cmd_pdu(ns, rq); if (unlikely(ret)) - return ret; + return nvme_try_complete_failed_req(rq, ret); blk_mq_start_request(rq); From patchwork Thu Jan 7 03:31:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Leng X-Patchwork-Id: 12002813 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6BAEAC433E9 for ; Thu, 7 Jan 2021 03:32:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 373DF22D01 for ; Thu, 7 Jan 2021 03:32:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726828AbhAGDcn (ORCPT ); Wed, 6 Jan 2021 22:32:43 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:10033 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726662AbhAGDci (ORCPT ); Wed, 6 Jan 2021 22:32:38 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DBBb76l2Xzj3q6; Thu, 7 Jan 2021 11:30:59 +0800 (CST) Received: from huawei.com (10.29.88.127) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Thu, 7 Jan 2021 11:31:53 +0800 From: Chao Leng To: CC: , , , , , Subject: [PATCH v2 6/6] nvme-fc: avoid IO error and repeated request completion Date: Thu, 7 Jan 2021 11:31:49 +0800 Message-ID: <20210107033149.15701-7-lengchao@huawei.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20210107033149.15701-1-lengchao@huawei.com> References: <20210107033149.15701-1-lengchao@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.29.88.127] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org When a request is queued failed, blk_status_t is directly returned to the blk-mq. If blk_status_t is not BLK_STS_RESOURCE, BLK_STS_DEV_RESOURCE, BLK_STS_ZONE_RESOURCE, blk-mq call blk_mq_end_request to complete the request with BLK_STS_IOERR. In two scenarios, the request should be retried and may succeed. First, if work with nvme multipath, the request may be retried successfully in another path, because the error is probably related to the path. Second, if work without multipath software, the request may be retried successfully after error recovery. If the request is completed with BLK_STS_IOERR in blk_mq_dispatch_rq_list. The state of request may be changed to MQ_RQ_IN_FLIGHT. If free the request asynchronously such as in nvme_submit_user_cmd, in extreme scenario the request will be repeated freed in tear down. If a non-resource error occurs when queue_rq, should directly call nvme_complete_rq to complete request and set the state of request to MQ_RQ_COMPLETE. nvme_complete_rq will decide to retry, fail over or end the request. Signed-off-by: Chao Leng --- drivers/nvme/host/fc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 38373a0e86ef..f6a5758ef1ea 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -2761,7 +2761,7 @@ nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, ret = nvme_setup_cmd(ns, rq, sqe); if (ret) - return ret; + goto fail; /* * nvme core doesn't quite treat the rq opaquely. Commands such @@ -2781,7 +2781,9 @@ nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx, } - return nvme_fc_start_fcp_op(ctrl, queue, op, data_len, io_dir); + ret = nvme_fc_start_fcp_op(ctrl, queue, op, data_len, io_dir); +fail: + return nvme_try_complete_failed_req(rq, ret); } static void