Commit 377a016f authored by Ziye Yang's avatar Ziye Yang Committed by Jim Harris
Browse files

lib/iscsi: add the conn in spdk_iscsi_pdu



Purpose: Prepare for the async writev usage for spdk
iSCSI target application.

Change-Id: Iff0e932159b0ad80be32aed3fc543b67d8fb8f51
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481644


Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent be6aa427
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -778,7 +778,7 @@ iscsi_send_logout_request(struct spdk_iscsi_conn *conn)
	struct spdk_iscsi_pdu *rsp_pdu;
	struct iscsi_bhs_async *rsph;

	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	assert(rsp_pdu != NULL);

	rsph = (struct iscsi_bhs_async *)&rsp_pdu->bhs;
@@ -1238,7 +1238,7 @@ iscsi_conn_send_nopin(struct spdk_iscsi_conn *conn)
	SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "StatSN=%u, ExpCmdSN=%u, MaxCmdSN=%u\n",
		      conn->StatSN, conn->sess->ExpCmdSN,
		      conn->sess->MaxCmdSN);
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	rsp = (struct iscsi_bhs_nop_in *) &rsp_pdu->bhs;
	rsp_pdu->data = NULL;
	/*
+11 −11
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ iscsi_reject(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu,
		data_len += ISCSI_DIGEST_LEN;
	}

	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		free(data);
		return -ENOMEM;
@@ -2148,7 +2148,7 @@ iscsi_pdu_hdr_op_login(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
		return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
	}

	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		return SPDK_ISCSI_CONNECTION_FATAL;
	}
@@ -2371,7 +2371,7 @@ iscsi_pdu_payload_op_text(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *p
	SPDK_LOGDUMP(SPDK_LOG_ISCSI, "Negotiated Params", data, data_len);

	/* response PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		spdk_iscsi_param_free(params);
		free(data);
@@ -2491,7 +2491,7 @@ iscsi_pdu_hdr_op_logout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu
	}

	/* response PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		return SPDK_ISCSI_CONNECTION_FATAL;
	}
@@ -2573,7 +2573,7 @@ iscsi_send_r2t(struct spdk_iscsi_conn *conn,
	uint64_t fmt_lun;

	/* R2T PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		return SPDK_ISCSI_CONNECTION_FATAL;
	}
@@ -2892,7 +2892,7 @@ iscsi_send_datain(struct spdk_iscsi_conn *conn,
	primary = spdk_iscsi_task_get_primary(task);

	/* DATA PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	rsph = (struct iscsi_bhs_data_in *)&rsp_pdu->bhs;
	rsp_pdu->data = task->scsi.iovs[0].iov_base + offset;
	rsp_pdu->data_buf_len = task->scsi.iovs[0].iov_len - offset;
@@ -3127,7 +3127,7 @@ void spdk_iscsi_task_response(struct spdk_iscsi_conn *conn,
	}

	/* response PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	assert(rsp_pdu != NULL);
	rsph = (struct iscsi_bhs_scsi_resp *)&rsp_pdu->bhs;
	assert(task->scsi.sense_data_len <= sizeof(rsp_pdu->sense.data));
@@ -3471,7 +3471,7 @@ spdk_iscsi_task_mgmt_response(struct spdk_iscsi_conn *conn,

	reqh = (struct iscsi_bhs_task_req *)&task->pdu->bhs;
	/* response PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	rsph = (struct iscsi_bhs_task_resp *)&rsp_pdu->bhs;
	rsph->opcode = ISCSI_OP_TASK_RSP;
	rsph->flags |= 0x80; /* bit 0 default to 1 */
@@ -3802,7 +3802,7 @@ iscsi_pdu_payload_op_nopout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu
	}

	/* response PDU */
	rsp_pdu = spdk_get_pdu();
	rsp_pdu = spdk_get_pdu(conn);
	if (rsp_pdu == NULL) {
		free(data);
		return SPDK_ISCSI_CONNECTION_FATAL;
@@ -4470,7 +4470,7 @@ iscsi_pdu_hdr_handle(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
	 * return response code 0x020b to initiator.
	 * */
	if (!conn->full_feature && conn->state == ISCSI_CONN_STATE_RUNNING) {
		rsp_pdu = spdk_get_pdu();
		rsp_pdu = spdk_get_pdu(conn);
		if (rsp_pdu == NULL) {
			return SPDK_ISCSI_CONNECTION_FATAL;
		}
@@ -4598,7 +4598,7 @@ iscsi_read_pdu(struct spdk_iscsi_conn *conn)
		case ISCSI_PDU_RECV_STATE_AWAIT_PDU_READY:
			assert(conn->pdu_in_progress == NULL);

			conn->pdu_in_progress = spdk_get_pdu();
			conn->pdu_in_progress = spdk_get_pdu(conn);
			if (conn->pdu_in_progress == NULL) {
				return SPDK_ISCSI_CONNECTION_FATAL;
			}
+2 −1
Original line number Diff line number Diff line
@@ -183,6 +183,7 @@ struct spdk_iscsi_pdu {
	uint32_t data_buf_len;
	bool dif_insert_or_strip;
	struct spdk_dif_ctx dif_ctx;
	struct spdk_iscsi_conn *conn;
	TAILQ_ENTRY(spdk_iscsi_pdu)	tailq;


@@ -432,7 +433,7 @@ uint32_t spdk_iscsi_pdu_calc_data_digest(struct spdk_iscsi_pdu *pdu);

/* Memory management */
void spdk_put_pdu(struct spdk_iscsi_pdu *pdu);
struct spdk_iscsi_pdu *spdk_get_pdu(void);
struct spdk_iscsi_pdu *spdk_get_pdu(struct spdk_iscsi_conn *conn);
int spdk_iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn);
void spdk_iscsi_op_abort_task_set(struct spdk_iscsi_task *task,
				  uint8_t function);
+3 −1
Original line number Diff line number Diff line
@@ -310,10 +310,11 @@ void spdk_put_pdu(struct spdk_iscsi_pdu *pdu)
	}
}

struct spdk_iscsi_pdu *spdk_get_pdu(void)
struct spdk_iscsi_pdu *spdk_get_pdu(struct spdk_iscsi_conn *conn)
{
	struct spdk_iscsi_pdu *pdu;

	assert(conn != NULL);
	pdu = spdk_mempool_get(g_spdk_iscsi.pdu_pool);
	if (!pdu) {
		SPDK_ERRLOG("Unable to get PDU\n");
@@ -323,6 +324,7 @@ struct spdk_iscsi_pdu *spdk_get_pdu(void)
	/* we do not want to zero out the last part of the structure reserved for AHS and sense data */
	memset(pdu, 0, offsetof(struct spdk_iscsi_pdu, ahs));
	pdu->ref = 1;
	pdu->conn = conn;

	return pdu;
}
+3 −1
Original line number Diff line number Diff line
@@ -95,10 +95,11 @@ spdk_put_pdu(struct spdk_iscsi_pdu *pdu)
}

struct spdk_iscsi_pdu *
spdk_get_pdu(void)
spdk_get_pdu(struct spdk_iscsi_conn *conn)
{
	struct spdk_iscsi_pdu *pdu;

	assert(conn != NULL);
	if (g_pdu_pool_is_empty) {
		return NULL;
	}
@@ -110,6 +111,7 @@ spdk_get_pdu(void)

	memset(pdu, 0, offsetof(struct spdk_iscsi_pdu, ahs));
	pdu->ref = 1;
	pdu->conn = conn;

	return pdu;
}
Loading