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: Shuhei 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: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
e1b5d28c8b
commit
51e897c42e
@ -597,14 +597,17 @@ 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) {
|
||||
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) {
|
||||
SPDK_ERRLOG("aborting queued i/o\n");
|
||||
}
|
||||
aborting++;
|
||||
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) {
|
||||
SPDK_ERRLOG("aborting queued i/o\n");
|
||||
}
|
||||
aborting++;
|
||||
}
|
||||
|
||||
return aborting;
|
||||
|
Loading…
Reference in New Issue
Block a user