Lines Matching refs:conn

38 static struct iscsi_login *iscsi_login_init_conn(struct iscsi_conn *conn)
47 conn->login = login;
48 login->conn = conn;
63 conn->conn_login = login;
78 int iscsi_login_setup_crypto(struct iscsi_conn *conn)
93 conn->conn_rx_hash = ahash_request_alloc(tfm, GFP_KERNEL);
94 if (!conn->conn_rx_hash) {
99 ahash_request_set_callback(conn->conn_rx_hash, 0, NULL, NULL);
101 conn->conn_tx_hash = ahash_request_alloc(tfm, GFP_KERNEL);
102 if (!conn->conn_tx_hash) {
104 ahash_request_free(conn->conn_rx_hash);
105 conn->conn_rx_hash = NULL;
109 ahash_request_set_callback(conn->conn_tx_hash, 0, NULL, NULL);
115 struct iscsi_conn *conn,
123 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
131 int iscsi_check_for_session_reinstatement(struct iscsi_conn *conn)
135 struct iscsi_portal_group *tpg = conn->tpg;
141 INITIATORNAME, conn->param_list);
143 SESSIONTYPE, conn->param_list);
145 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
165 if (!memcmp(sess_p->isid, conn->sess->isid, 6) &&
208 struct iscsi_conn *conn,
212 conn->sess = sess;
213 conn->cid = be16_to_cpu(cid);
218 ret = get_random_bytes_wait(&conn->stat_sn, sizeof(u32));
223 conn->auth_id = iscsit_global->auth_id++;
229 struct iscsi_conn *conn,
241 if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
242 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
256 struct iscsi_conn *conn,
265 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
271 if (iscsi_login_set_conn_values(sess, conn, pdu->cid))
298 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
313 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
322 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
335 conn->sess = NULL;
340 struct iscsi_conn *conn)
343 struct iscsi_session *sess = conn->sess;
346 sess->tpg = conn->tpg;
359 if (iscsi_copy_param_list(&conn->param_list,
360 conn->tpg->param_list, 1) < 0) {
361 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
366 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
369 iscsi_set_keys_to_negotiate(conn->param_list, iser);
373 conn->param_list);
384 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
392 if (iscsi_change_param_sprintf(conn, "ErrorRecoveryLevel=%d", na->default_erl))
403 if (iscsi_change_param_sprintf(conn, "RDMAExtensions=Yes"))
411 conn->param_list);
413 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
419 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
435 if (iscsi_change_param_sprintf(conn, "MaxRecvDataSegmentLength=%lu\n", mrdsl))
446 if (iscsi_change_param_sprintf(conn, "ImmediateData=No"))
449 if (iscsi_change_param_sprintf(conn, "InitialR2T=Yes"))
461 struct iscsi_conn *conn,
466 return iscsi_login_set_conn_values(NULL, conn, pdu->cid);
473 struct iscsi_conn *conn,
476 struct iscsi_portal_group *tpg = conn->tpg;
509 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
523 if (iscsi_login_set_conn_values(sess, conn, pdu->cid) < 0 ||
524 iscsi_copy_param_list(&conn->param_list,
525 conn->tpg->param_list, 0) < 0) {
526 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
531 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
534 iscsi_set_keys_to_negotiate(conn->param_list, iser);
542 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
549 struct iscsi_conn *conn,
555 struct iscsi_session *sess = conn->sess;
589 conn->cid);
607 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
615 static void iscsi_post_login_start_timers(struct iscsi_conn *conn)
617 struct iscsi_session *sess = conn->sess;
621 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
625 iscsit_start_nopin_timer(conn);
628 int iscsit_start_kthreads(struct iscsi_conn *conn)
633 conn->bitmap_id = bitmap_find_free_region(iscsit_global->ts_bitmap,
637 if (conn->bitmap_id < 0) {
643 conn->tx_thread = kthread_run(iscsi_target_tx_thread, conn,
645 if (IS_ERR(conn->tx_thread)) {
647 ret = PTR_ERR(conn->tx_thread);
650 conn->tx_thread_active = true;
652 conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn,
654 if (IS_ERR(conn->rx_thread)) {
656 ret = PTR_ERR(conn->rx_thread);
659 conn->rx_thread_active = true;
663 send_sig(SIGINT, conn->tx_thread, 1);
664 kthread_stop(conn->tx_thread);
665 conn->tx_thread_active = false;
668 bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
676 struct iscsi_conn *conn,
680 struct iscsi_session *sess = conn->sess;
685 iscsit_inc_conn_usage_count(conn);
687 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_SUCCESS,
691 conn->conn_state = TARG_CONN_STATE_LOGGED_IN;
693 iscsi_set_connection_parameters(conn->conn_ops, conn->param_list);
699 conn->param_list, 0);
700 iscsi_release_param_list(conn->param_list);
701 conn->param_list = NULL;
713 " %pISpc,%hu\n", conn->cid, &conn->login_sockaddr,
714 &conn->local_sockaddr, tpg->tpgt);
716 list_add_tail(&conn->conn_list, &sess->sess_conn_list);
723 iscsi_post_login_start_timers(conn);
728 iscsit_thread_get_cpumask(conn);
729 conn->conn_rx_reset_cpumask = 1;
730 conn->conn_tx_reset_cpumask = 1;
735 complete(&conn->rx_login_comp);
736 iscsit_dec_conn_usage_count(conn);
747 iscsi_set_session_parameters(sess->sess_ops, conn->param_list, 1);
748 iscsi_release_param_list(conn->param_list);
749 conn->param_list = NULL;
760 conn->cid, &conn->login_sockaddr, &conn->local_sockaddr,
764 list_add_tail(&conn->conn_list, &sess->sess_conn_list);
785 iscsi_post_login_start_timers(conn);
790 iscsit_thread_get_cpumask(conn);
791 conn->conn_rx_reset_cpumask = 1;
792 conn->conn_tx_reset_cpumask = 1;
797 complete(&conn->rx_login_comp);
798 iscsit_dec_conn_usage_count(conn);
947 int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
958 conn->sock = new_sock;
959 conn->login_family = np->np_sockaddr.ss_family;
964 rc = conn->sock->ops->getname(conn->sock,
968 memcpy(&conn->login_sockaddr, &sock_in6, sizeof(sock_in6));
974 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in));
978 rc = conn->sock->ops->getname(conn->sock,
982 memcpy(&conn->local_sockaddr, &sock_in6, sizeof(sock_in6));
988 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in));
994 rc = conn->sock->ops->getname(conn->sock,
997 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in));
999 rc = conn->sock->ops->getname(conn->sock,
1002 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in));
1008 int iscsit_get_login_rx(struct iscsi_conn *conn, struct iscsi_login *login)
1013 if (iscsi_login_rx_data(conn, login->req, ISCSI_HDR_LEN) < 0)
1042 if (iscsi_target_check_login_request(conn, login) < 0)
1046 if (iscsi_login_rx_data(conn, login->req_buf,
1053 int iscsit_put_login_tx(struct iscsi_conn *conn, struct iscsi_login *login,
1056 if (iscsi_login_tx_data(conn, login->rsp, login->rsp_buf, length) < 0)
1063 iscsit_conn_set_transport(struct iscsi_conn *conn, struct iscsit_transport *t)
1068 conn->conn_transport = t;
1078 conn->conn_transport = t;
1084 struct iscsi_conn *conn;
1086 conn = kzalloc(sizeof(struct iscsi_conn), GFP_KERNEL);
1087 if (!conn) {
1092 conn->conn_state = TARG_CONN_STATE_FREE;
1094 init_waitqueue_head(&conn->queues_wq);
1095 INIT_LIST_HEAD(&conn->conn_list);
1096 INIT_LIST_HEAD(&conn->conn_cmd_list);
1097 INIT_LIST_HEAD(&conn->immed_queue_list);
1098 INIT_LIST_HEAD(&conn->response_queue_list);
1099 init_completion(&conn->conn_post_wait_comp);
1100 init_completion(&conn->conn_wait_comp);
1101 init_completion(&conn->conn_wait_rcfr_comp);
1102 init_completion(&conn->conn_waiting_on_uc_comp);
1103 init_completion(&conn->conn_logout_comp);
1104 init_completion(&conn->rx_half_close_comp);
1105 init_completion(&conn->tx_half_close_comp);
1106 init_completion(&conn->rx_login_comp);
1107 spin_lock_init(&conn->cmd_lock);
1108 spin_lock_init(&conn->conn_usage_lock);
1109 spin_lock_init(&conn->immed_queue_lock);
1110 spin_lock_init(&conn->nopin_timer_lock);
1111 spin_lock_init(&conn->response_queue_lock);
1112 spin_lock_init(&conn->state_lock);
1114 timer_setup(&conn->nopin_response_timer,
1116 timer_setup(&conn->nopin_timer, iscsit_handle_nopin_timeout, 0);
1118 if (iscsit_conn_set_transport(conn, np->np_transport) < 0)
1121 conn->conn_ops = kzalloc(sizeof(struct iscsi_conn_ops), GFP_KERNEL);
1122 if (!conn->conn_ops) {
1127 if (!zalloc_cpumask_var(&conn->conn_cpumask, GFP_KERNEL)) {
1128 pr_err("Unable to allocate conn->conn_cpumask\n");
1132 return conn;
1135 kfree(conn->conn_ops);
1137 iscsit_put_transport(conn->conn_transport);
1139 kfree(conn);
1143 void iscsit_free_conn(struct iscsi_conn *conn)
1145 free_cpumask_var(conn->conn_cpumask);
1146 kfree(conn->conn_ops);
1147 iscsit_put_transport(conn->conn_transport);
1148 kfree(conn);
1151 void iscsi_target_login_sess_out(struct iscsi_conn *conn,
1158 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
1160 if (!zero_tsih || !conn->sess)
1163 transport_free_session(conn->sess->se_sess);
1164 ida_free(&sess_ida, conn->sess->session_index);
1165 kfree(conn->sess->sess_ops);
1166 kfree(conn->sess);
1167 conn->sess = NULL;
1174 if (!zero_tsih && conn->sess) {
1175 spin_lock_bh(&conn->sess->conn_lock);
1176 if (conn->sess->session_state == TARG_SESS_STATE_FAILED) {
1178 &conn->tpg->tpg_se_tpg;
1180 atomic_set(&conn->sess->session_continuation, 0);
1181 spin_unlock_bh(&conn->sess->conn_lock);
1183 iscsit_start_time2retain_handler(conn->sess);
1186 spin_unlock_bh(&conn->sess->conn_lock);
1187 iscsit_dec_session_usage_count(conn->sess);
1190 ahash_request_free(conn->conn_tx_hash);
1191 if (conn->conn_rx_hash) {
1194 tfm = crypto_ahash_reqtfm(conn->conn_rx_hash);
1195 ahash_request_free(conn->conn_rx_hash);
1199 if (conn->param_list) {
1200 iscsi_release_param_list(conn->param_list);
1201 conn->param_list = NULL;
1203 iscsi_target_nego_release(conn);
1205 if (conn->sock) {
1206 sock_release(conn->sock);
1207 conn->sock = NULL;
1210 if (conn->conn_transport->iscsit_wait_conn)
1211 conn->conn_transport->iscsit_wait_conn(conn);
1213 if (conn->conn_transport->iscsit_free_conn)
1214 conn->conn_transport->iscsit_free_conn(conn);
1216 iscsit_free_conn(conn);
1223 struct iscsi_conn *conn = NULL;
1246 conn = iscsit_alloc_conn(np);
1247 if (!conn) {
1252 rc = np->np_transport->iscsit_accept_np(np, conn);
1255 iscsit_free_conn(conn);
1263 iscsit_free_conn(conn);
1268 iscsit_free_conn(conn);
1274 login = iscsi_login_init_conn(conn);
1282 conn->conn_state = TARG_CONN_STATE_XPT_UP;
1286 rc = np->np_transport->iscsit_get_login_rx(conn, login);
1298 conn->login_itt = pdu->itt;
1305 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1311 conn->network_transport = np->np_network_transport;
1314 " Portal %pISpc\n", &conn->login_sockaddr, np->np_transport->name,
1315 &conn->local_sockaddr);
1318 conn->conn_state = TARG_CONN_STATE_IN_LOGIN;
1320 if (iscsi_login_check_initiator_version(conn, pdu->max_version,
1331 if (iscsi_login_zero_tsih_s1(conn, buffer) < 0)
1341 if (iscsi_login_non_zero_tsih_s1(conn, buffer) < 0)
1353 rc = iscsi_target_locate_portal(np, conn, login);
1355 tpg = conn->tpg;
1360 if (conn->sess)
1361 conn->sess->se_sess->sup_prot_ops =
1362 conn->conn_transport->iscsit_get_sup_prot_ops(conn);
1364 tpg = conn->tpg;
1371 if (iscsi_login_zero_tsih_s2(conn) < 0)
1374 if (iscsi_login_non_zero_tsih_s2(conn, buffer) < 0)
1378 if (conn->conn_transport->iscsit_validate_params) {
1379 ret = conn->conn_transport->iscsit_validate_params(conn);
1388 ret = iscsi_target_start_negotiation(login, conn);
1395 tpg_np = conn->tpg_np;
1397 iscsi_post_login_handler(np, conn, zero_tsih);
1410 tpg_np = conn->tpg_np;
1411 iscsi_target_login_sess_out(conn, zero_tsih, new_sess);