Commit 3a1a1079 authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

nvmf/vfio_user: reject fabrics commands



Currently these are rejected, because spdk_nvmf_request_exec() will only
allow fabrics transports to execute fabrics commands.  Since we'll want
to remove that restriction, vfio-user needs to explicitly check for this
opcode.

Additionally, this patch also changes the status code for the
reservation commands to INVALID_OPCODE, as this is what should be done
when reservations aren't supported by a controller.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I00b530db7f6f505e926fa601a007cad043f5ed80
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22236


Reviewed-by: default avatarThanos Makatos <thanos.makatos@nutanix.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJacek Kalwas <jacek.kalwas@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent fed383ac
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -5471,6 +5471,8 @@ map_admin_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvmf_request *
			return 0;
		}
		break;
	case SPDK_NVME_OPC_FABRIC:
		return -ENOTSUP;
	default:
		return 0;
	}
@@ -5565,6 +5567,7 @@ handle_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvme_cmd *cmd,
		case SPDK_NVME_OPC_RESERVATION_REPORT:
		case SPDK_NVME_OPC_RESERVATION_ACQUIRE:
		case SPDK_NVME_OPC_RESERVATION_RELEASE:
		case SPDK_NVME_OPC_FABRIC:
			err = -ENOTSUP;
			break;
		default:
@@ -5576,8 +5579,10 @@ handle_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvme_cmd *cmd,
	if (spdk_unlikely(err < 0)) {
		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;
		req->rsp->nvme_cpl.status.sc = err == -ENOTSUP ?
					       SPDK_NVME_SC_INVALID_OPCODE :
					       SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
		err = handle_cmd_rsp(vu_req, vu_req->cb_arg);
		_nvmf_vfio_user_req_free(sq, vu_req);
		return err;