iscsi: create scsi port before creating session
This allows for proper exit when error was encountered during scsi port create. Change-Id: Ie46faf7e515823cdc7383c25c4482bd2855b6368 Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/c/440676 Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
1f3644e208
commit
cefabb56df
@ -1503,6 +1503,7 @@ spdk_iscsi_op_login_set_conn_info(struct spdk_iscsi_conn *conn,
|
||||
{
|
||||
int rc = 0;
|
||||
struct iscsi_bhs_login_rsp *rsph;
|
||||
struct spdk_scsi_port *initiator_port;
|
||||
|
||||
rsph = (struct iscsi_bhs_login_rsp *)&rsp_pdu->bhs;
|
||||
conn->authenticated = false;
|
||||
@ -1510,21 +1511,30 @@ spdk_iscsi_op_login_set_conn_info(struct spdk_iscsi_conn *conn,
|
||||
conn->cid = cid;
|
||||
|
||||
if (conn->sess == NULL) {
|
||||
/* new session */
|
||||
rc = spdk_create_iscsi_sess(conn, target, session_type);
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("create_sess() failed\n");
|
||||
/* create initiator port */
|
||||
initiator_port = spdk_scsi_port_create(spdk_iscsi_get_isid(rsph->isid), 0, initiator_port_name);
|
||||
if (initiator_port == NULL) {
|
||||
SPDK_ERRLOG("create_port() failed\n");
|
||||
rsph->status_class = ISCSI_CLASS_TARGET_ERROR;
|
||||
rsph->status_detail = ISCSI_LOGIN_STATUS_NO_RESOURCES;
|
||||
return SPDK_ISCSI_LOGIN_ERROR_RESPONSE;
|
||||
}
|
||||
|
||||
/* new session */
|
||||
rc = spdk_create_iscsi_sess(conn, target, session_type);
|
||||
if (rc < 0) {
|
||||
spdk_scsi_port_free(&initiator_port);
|
||||
SPDK_ERRLOG("create_sess() failed\n");
|
||||
rsph->status_class = ISCSI_CLASS_TARGET_ERROR;
|
||||
rsph->status_detail = ISCSI_LOGIN_STATUS_NO_RESOURCES;
|
||||
return SPDK_ISCSI_LOGIN_ERROR_RESPONSE;
|
||||
}
|
||||
/* initialize parameters */
|
||||
conn->sess->initiator_port = initiator_port;
|
||||
conn->StatSN = from_be32(&rsph->stat_sn);
|
||||
conn->sess->initiator_port = spdk_scsi_port_create(spdk_iscsi_get_isid(rsph->isid),
|
||||
0, initiator_port_name);
|
||||
conn->sess->isid = spdk_iscsi_get_isid(rsph->isid);
|
||||
conn->sess->target = target;
|
||||
|
||||
/* Initiator port TransportID */
|
||||
spdk_scsi_port_set_iscsi_transport_id(conn->sess->initiator_port,
|
||||
conn->initiator_name,
|
||||
|
Loading…
Reference in New Issue
Block a user