nvmf: sanity check passthru handlers
These routines can only handle a single buffer; double check that is the case, and fail if not. Signed-off-by: John Levon <john.levon@nutanix.com> Change-Id: I136482c27c73655887c49405f747b8ed073f7b69 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16198 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
This commit is contained in:
parent
9b7c2bf544
commit
6b206e3110
@ -743,7 +743,14 @@ nvmf_bdev_ctrlr_nvme_passthru_io(struct spdk_bdev *bdev, struct spdk_bdev_desc *
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = spdk_bdev_nvme_io_passthru(desc, ch, &req->cmd->nvme_cmd, req->data, req->length,
|
if (spdk_unlikely(req->iovcnt != 1)) {
|
||||||
|
req->rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||||
|
req->rsp->nvme_cpl.status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||||
|
req->rsp->nvme_cpl.status.dnr = 1;
|
||||||
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = spdk_bdev_nvme_io_passthru(desc, ch, &req->cmd->nvme_cmd, req->iov[0].iov_base, req->length,
|
||||||
nvmf_bdev_ctrlr_complete_cmd, req);
|
nvmf_bdev_ctrlr_complete_cmd, req);
|
||||||
if (spdk_unlikely(rc)) {
|
if (spdk_unlikely(rc)) {
|
||||||
if (rc == -ENOMEM) {
|
if (rc == -ENOMEM) {
|
||||||
@ -766,9 +773,16 @@ spdk_nvmf_bdev_ctrlr_nvme_passthru_admin(struct spdk_bdev *bdev, struct spdk_bde
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if (spdk_unlikely(req->iovcnt != 1)) {
|
||||||
|
req->rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||||
|
req->rsp->nvme_cpl.status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||||
|
req->rsp->nvme_cpl.status.dnr = 1;
|
||||||
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
req->cmd_cb_fn = cb_fn;
|
req->cmd_cb_fn = cb_fn;
|
||||||
|
|
||||||
rc = spdk_bdev_nvme_admin_passthru(desc, ch, &req->cmd->nvme_cmd, req->data, req->length,
|
rc = spdk_bdev_nvme_admin_passthru(desc, ch, &req->cmd->nvme_cmd, req->iov[0].iov_base, req->length,
|
||||||
nvmf_bdev_ctrlr_complete_admin_cmd, req);
|
nvmf_bdev_ctrlr_complete_admin_cmd, req);
|
||||||
if (spdk_unlikely(rc)) {
|
if (spdk_unlikely(rc)) {
|
||||||
if (rc == -ENOMEM) {
|
if (rc == -ENOMEM) {
|
||||||
|
@ -840,6 +840,7 @@ test_nvmf_bdev_ctrlr_nvme_passthru(void)
|
|||||||
req.qpair = &qpair;
|
req.qpair = &qpair;
|
||||||
req.cmd = (union nvmf_h2c_msg *)&cmd;
|
req.cmd = (union nvmf_h2c_msg *)&cmd;
|
||||||
req.rsp = &rsp;
|
req.rsp = &rsp;
|
||||||
|
spdk_iov_one(req.iov, &req.iovcnt, NULL, 0);
|
||||||
|
|
||||||
cmd.nsid = 1;
|
cmd.nsid = 1;
|
||||||
cmd.opc = 0xFF;
|
cmd.opc = 0xFF;
|
||||||
|
Loading…
Reference in New Issue
Block a user