Commit 51e897c4 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

nvme: Abort queued requests even if they are children of a large I/O



A iterator function nvme_request_add_abort() covers not only a small
I/O request but also children of a large I/O.

However nvme_qpair_abort_queued_reqs_with_cbarg() did not check the
latter. check if cmd_cb_arg matches not only req->cb_arg but also
req->parent_cb_arg.

Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I015e29b0a8f58920b9a13081330a94f9dd976a45
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12557


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent e1b5d28c
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -597,7 +597,11 @@ nvme_qpair_abort_queued_reqs_with_cbarg(struct spdk_nvme_qpair *qpair, void *cmd
	uint32_t		aborting = 0;

	STAILQ_FOREACH_SAFE(req, &qpair->queued_req, stailq, tmp) {
		if (req->cb_arg == cmd_cb_arg) {
		if ((req->cb_arg != cmd_cb_arg) &&
		    (req->parent == NULL || req->parent->cb_arg != cmd_cb_arg)) {
			continue;
		}

		STAILQ_REMOVE(&qpair->queued_req, req, nvme_request, stailq);
		STAILQ_INSERT_TAIL(&qpair->aborting_queued_req, req, stailq);
		if (!qpair->ctrlr->opts.disable_error_logging) {
@@ -605,7 +609,6 @@ nvme_qpair_abort_queued_reqs_with_cbarg(struct spdk_nvme_qpair *qpair, void *cmd
		}
		aborting++;
	}
	}

	return aborting;
}