[PATCH] nvme-fabrics: fix I/O connect error handling

Hannes Reinecke hare at suse.de
Tue Feb 13 02:32:07 PST 2024


On 2/8/24 12:31, Chaitanya Kulkarni wrote:
> In nvmf_connect_io_queue(), if connect I/O command fails, we log the
> error and continue for authentication. This overrides error captured
> from __nvme_submit_sync_cmd(), causing wrong return value.
> 
> Add goto out_free_data after logging connect error to fix the issue.
> 
> Signed-off-by: Chaitanya Kulkarni <kch at nvidia.com>
> ---
> 
> blktests is passing with this patch :-
> 
> blktests (master) # ./check nvme
> nvme/002 (create many subsystems and test discovery)         [passed]
>      runtime  24.281s  ...  24.481s
> nvme/003 (test if we're sending keep-alives to a discovery controller) [passed]
>      runtime  11.262s  ...  11.275s
> nvme/004 (test nvme and nvmet UUID NS descriptors)           [passed]
>      runtime  0.492s  ...  0.496s
> nvme/005 (reset local loopback target)                       [passed]
>      runtime  0.810s  ...  0.807s
> nvme/006 (create an NVMeOF target with a block device-backed ns) [passed]
>      runtime  0.093s  ...  0.091s
> nvme/007 (create an NVMeOF target with a file-backed ns)     [passed]
>      runtime  0.063s  ...  0.064s
> nvme/008 (create an NVMeOF host with a block device-backed ns) [passed]
>      runtime  0.490s  ...  0.491s
> nvme/009 (create an NVMeOF host with a file-backed ns)       [passed]
>      runtime  0.478s  ...  0.466s
> nvme/010 (run data verification fio job on NVMeOF block device-backed ns) [passed]
>      runtime  51.736s  ...  41.236s
> nvme/011 (run data verification fio job on NVMeOF file-backed ns) [passed]
>      runtime  203.890s  ...  141.790s
> nvme/012 (run mkfs and data verification fio job on NVMeOF block device-backed ns) [passed]
>      runtime  45.403s  ...  33.713s
> nvme/013 (run mkfs and data verification fio job on NVMeOF file-backed ns) [passed]
>      runtime  113.799s  ...  119.578s
> nvme/014 (flush a NVMeOF block device-backed ns)             [passed]
>      runtime  8.669s  ...  8.488s
> nvme/015 (unit test for NVMe flush for file backed ns)       [passed]
>      runtime  7.303s  ...  6.619s
> nvme/016 (create/delete many NVMeOF block device-backed ns and test discovery) [passed]
>      runtime  12.945s  ...  13.004s
> nvme/017 (create/delete many file-ns and test discovery)     [passed]
>      runtime  14.377s  ...  14.490s
> nvme/018 (unit test NVMe-oF out of range access on a file backend) [passed]
>      runtime  0.491s  ...  0.472s
> nvme/019 (test NVMe DSM Discard command on NVMeOF block-device ns) [passed]
>      runtime  0.488s  ...  0.505s
> nvme/020 (test NVMe DSM Discard command on NVMeOF file-backed ns) [passed]
>      runtime  0.502s  ...  0.472s
> nvme/021 (test NVMe list command on NVMeOF file-backed ns)   [passed]
>      runtime  0.472s  ...  0.499s
> nvme/022 (test NVMe reset command on NVMeOF file-backed ns)  [passed]
>      runtime  0.802s  ...  0.812s
> nvme/023 (test NVMe smart-log command on NVMeOF block-device ns) [passed]
>      runtime  0.505s  ...  0.488s
> nvme/024 (test NVMe smart-log command on NVMeOF file-backed ns) [passed]
>      runtime  0.474s  ...  0.481s
> nvme/025 (test NVMe effects-log command on NVMeOF file-backed ns) [passed]
>      runtime  0.484s  ...  0.470s
> nvme/026 (test NVMe ns-descs command on NVMeOF file-backed ns) [passed]
>      runtime  0.482s  ...  0.479s
> nvme/027 (test NVMe ns-rescan command on NVMeOF file-backed ns) [passed]
>      runtime  0.473s  ...  0.493s
> nvme/028 (test NVMe list-subsys command on NVMeOF file-backed ns) [passed]
>      runtime  0.492s  ...  0.474s
> nvme/029 (test userspace IO via nvme-cli read/write interface) [passed]
>      runtime  0.671s  ...  0.667s
> nvme/030 (ensure the discovery generation counter is updated appropriately) [passed]
>      runtime  0.244s  ...  0.241s
> nvme/031 (test deletion of NVMeOF controllers immediately after setup) [passed]
>      runtime  4.329s  ...  4.257s
> nvme/038 (test deletion of NVMeOF subsystem without enabling) [passed]
>      runtime  0.019s  ...  0.020s
> nvme/040 (test nvme fabrics controller reset/disconnect operation during I/O) [passed]
>      runtime  7.225s  ...  7.154s
> nvme/041 (Create authenticated connections)                  [passed]
>      runtime  1.946s  ...  1.938s
> nvme/042 (Test dhchap key types for authenticated connections) [passed]
>      runtime  5.804s  ...  5.733s
> nvme/043 (Test hash and DH group variations for authenticated connections) [passed]
>      runtime  25.909s  ...  21.684s
> nvme/044 (Test bi-directional authentication)                [passed]
>      runtime  4.080s  ...  4.091s
> nvme/045 (Test re-authentication)                            [passed]
>      runtime  2.213s  ...  1.706s
> nvme/047 (test different queue types for fabric transports)  [not run]
>      nvme_trtype=loop is not supported in this test
> nvme/048 (Test queue count changes on reconnect)             [not run]
>      nvme_trtype=loop is not supported in this test
> blktests (master) #
> 
>   drivers/nvme/host/fabrics.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
> index 3499acbf6a82..495c171daead 100644
> --- a/drivers/nvme/host/fabrics.c
> +++ b/drivers/nvme/host/fabrics.c
> @@ -534,6 +534,7 @@ int nvmf_connect_io_queue(struct nvme_ctrl *ctrl, u16 qid)
>   	if (ret) {
>   		nvmf_log_connect_error(ctrl, ret, le32_to_cpu(res.u32),
>   				       &cmd, data);
> +		goto out_free_data;
>   	}
>   	result = le32_to_cpu(res.u32);
>   	if (result & (NVME_CONNECT_AUTHREQ_ATR | NVME_CONNECT_AUTHREQ_ASCR)) {

Reviewed-by: Hannes Reinecke <hare at suse.de>

Cheers,

Hannes




More information about the Linux-nvme mailing list