Commit 886fdf7f authored by Joel Cunningham's avatar Joel Cunningham Committed by Tomasz Zawadzki
Browse files

lib/nvmf: clear admin passthrough callback during reuse



Once spdk_nvmf_bdev_ctrlr_nvme_passthru_admin() is called, a callback
function is stored in struct spdk_nvmf_request but this is never cleared
in the transport before request reuse. This could lead to the passthru
feature being turned on for subsequent requests.

Change-Id: Icdc7a779de2f880538613dd5656ece17faf8455d
Signed-off-by: default avatarJoel Cunningham <joel.cunningham@oracle.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26741


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
parent 9b7f5933
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1584,6 +1584,7 @@ _nvmf_fc_request_free(struct spdk_nvmf_fc_request *fc_req)
	}
	fc_req->req.iovcnt = 0;
	fc_req->req.raw = 0; /* clear all flags */
	fc_req->req.cmd_cb_fn = NULL;

	/* Free Fc request */
	nvmf_fc_conn_free_fc_request(fc_req->fc_conn, fc_req);
+1 −0
Original line number Diff line number Diff line
@@ -2002,6 +2002,7 @@ _nvmf_rdma_request_free(struct spdk_nvmf_rdma_request *rdma_req,
	rdma_req->req.length = 0;
	rdma_req->req.iovcnt = 0;
	rdma_req->req.raw = 0; /* clear all flags */
	rdma_req->req.cmd_cb_fn = NULL;
	rdma_req->offset = 0;
	rdma_req->fused_failed = false;
	rdma_req->transfer_wr = NULL;
+1 −0
Original line number Diff line number Diff line
@@ -459,6 +459,7 @@ nvmf_tcp_req_get(struct spdk_nvmf_tcp_qpair *tqpair)
	tcp_req->has_in_capsule_data = false;
	tcp_req->req.raw = 0; /* clear all flags */
	tcp_req->req.zcopy_phase = NVMF_ZCOPY_PHASE_NONE;
	tcp_req->req.cmd_cb_fn = NULL;

	TAILQ_REMOVE(&tqpair->tcp_req_free_queue, tcp_req, state_link);
	TAILQ_INSERT_TAIL(&tqpair->tcp_req_working_queue, tcp_req, state_link);
+6 −0
Original line number Diff line number Diff line
@@ -1614,6 +1614,10 @@ test_nvmf_tcp_get_request_resuse_flags(void)
	SPDK_CU_ASSERT_FATAL(tcp_req1.req.first_fused);
	SPDK_CU_ASSERT_FATAL(tcp_req1.req.reservation_queued);

	/* Enable admin passthrough */
	tcp_req1.req.cmd_cb_fn = (spdk_nvmf_nvme_passthru_cmd_cb)(0xDEADBEEF);
	SPDK_CU_ASSERT_FATAL(tcp_req1.req.cmd_cb_fn != NULL);

	TAILQ_INSERT_TAIL(&tqpair.tcp_req_free_queue, &tcp_req1, state_link);
	tqpair.state_cntr[TCP_REQUEST_STATE_FREE]++;
	tqpair.state = NVMF_TCP_QPAIR_STATE_RUNNING;
@@ -1629,6 +1633,8 @@ test_nvmf_tcp_get_request_resuse_flags(void)
	/* Validate additional fields */
	SPDK_CU_ASSERT_FATAL(tcp_req->req.zcopy_phase == NVMF_ZCOPY_PHASE_NONE);
	SPDK_CU_ASSERT_FATAL(tcp_req->state == TCP_REQUEST_STATE_NEW);
	/* Valiate admin passthrough is not enabled */
	SPDK_CU_ASSERT_FATAL(tcp_req->req.cmd_cb_fn == NULL);
}

int