nvmf/vfio_user: free request when handling invalid IO opcs
IO commands with invalid OPCs are not freeing the associated request object after handling the response. This would eventually result in requests on the qpair becoming exhausted which ends up failing the controller. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I7c1c46265a38b31181cd5d9a98c528816ab482d3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9601 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
fcc73c8eb8
commit
8b35583190
@ -2727,11 +2727,16 @@ handle_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvme_cmd *cmd,
|
||||
}
|
||||
|
||||
if (spdk_unlikely(err < 0)) {
|
||||
struct nvmf_vfio_user_qpair *vu_qpair;
|
||||
|
||||
SPDK_ERRLOG("%s: process NVMe command opc 0x%x failed\n",
|
||||
ctrlr_id(ctrlr), cmd->opc);
|
||||
req->rsp->nvme_cpl.status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||
req->rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
return handle_cmd_rsp(vu_req, vu_req->cb_arg);
|
||||
err = handle_cmd_rsp(vu_req, vu_req->cb_arg);
|
||||
vu_qpair = SPDK_CONTAINEROF(req->qpair, struct nvmf_vfio_user_qpair, qpair);
|
||||
_nvmf_vfio_user_req_free(vu_qpair, vu_req);
|
||||
return err;
|
||||
}
|
||||
|
||||
vu_req->state = VFIO_USER_REQUEST_STATE_EXECUTING;
|
||||
|
Loading…
Reference in New Issue
Block a user