Lines Matching refs:conn
41 static struct iscsi_login *iscsi_login_init_conn(struct iscsi_conn *conn) in iscsi_login_init_conn() argument
50 conn->login = login; in iscsi_login_init_conn()
51 login->conn = conn; in iscsi_login_init_conn()
66 conn->conn_ops = kzalloc(sizeof(struct iscsi_conn_ops), GFP_KERNEL); in iscsi_login_init_conn()
67 if (!conn->conn_ops) { in iscsi_login_init_conn()
73 init_waitqueue_head(&conn->queues_wq); in iscsi_login_init_conn()
74 INIT_LIST_HEAD(&conn->conn_list); in iscsi_login_init_conn()
75 INIT_LIST_HEAD(&conn->conn_cmd_list); in iscsi_login_init_conn()
76 INIT_LIST_HEAD(&conn->immed_queue_list); in iscsi_login_init_conn()
77 INIT_LIST_HEAD(&conn->response_queue_list); in iscsi_login_init_conn()
78 init_completion(&conn->conn_post_wait_comp); in iscsi_login_init_conn()
79 init_completion(&conn->conn_wait_comp); in iscsi_login_init_conn()
80 init_completion(&conn->conn_wait_rcfr_comp); in iscsi_login_init_conn()
81 init_completion(&conn->conn_waiting_on_uc_comp); in iscsi_login_init_conn()
82 init_completion(&conn->conn_logout_comp); in iscsi_login_init_conn()
83 init_completion(&conn->rx_half_close_comp); in iscsi_login_init_conn()
84 init_completion(&conn->tx_half_close_comp); in iscsi_login_init_conn()
85 init_completion(&conn->rx_login_comp); in iscsi_login_init_conn()
86 spin_lock_init(&conn->cmd_lock); in iscsi_login_init_conn()
87 spin_lock_init(&conn->conn_usage_lock); in iscsi_login_init_conn()
88 spin_lock_init(&conn->immed_queue_lock); in iscsi_login_init_conn()
89 spin_lock_init(&conn->nopin_timer_lock); in iscsi_login_init_conn()
90 spin_lock_init(&conn->response_queue_lock); in iscsi_login_init_conn()
91 spin_lock_init(&conn->state_lock); in iscsi_login_init_conn()
93 if (!zalloc_cpumask_var(&conn->conn_cpumask, GFP_KERNEL)) { in iscsi_login_init_conn()
97 conn->conn_login = login; in iscsi_login_init_conn()
102 kfree(conn->conn_ops); in iscsi_login_init_conn()
116 int iscsi_login_setup_crypto(struct iscsi_conn *conn) in iscsi_login_setup_crypto() argument
123 conn->conn_rx_hash.flags = 0; in iscsi_login_setup_crypto()
124 conn->conn_rx_hash.tfm = crypto_alloc_hash("crc32c", 0, in iscsi_login_setup_crypto()
126 if (IS_ERR(conn->conn_rx_hash.tfm)) { in iscsi_login_setup_crypto()
131 conn->conn_tx_hash.flags = 0; in iscsi_login_setup_crypto()
132 conn->conn_tx_hash.tfm = crypto_alloc_hash("crc32c", 0, in iscsi_login_setup_crypto()
134 if (IS_ERR(conn->conn_tx_hash.tfm)) { in iscsi_login_setup_crypto()
136 crypto_free_hash(conn->conn_rx_hash.tfm); in iscsi_login_setup_crypto()
144 struct iscsi_conn *conn, in iscsi_login_check_initiator_version() argument
152 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_login_check_initiator_version()
160 int iscsi_check_for_session_reinstatement(struct iscsi_conn *conn) in iscsi_check_for_session_reinstatement() argument
164 struct iscsi_portal_group *tpg = conn->tpg; in iscsi_check_for_session_reinstatement()
170 INITIATORNAME, conn->param_list); in iscsi_check_for_session_reinstatement()
172 SESSIONTYPE, conn->param_list); in iscsi_check_for_session_reinstatement()
174 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_check_for_session_reinstatement()
193 if (!memcmp(sess_p->isid, conn->sess->isid, 6) && in iscsi_check_for_session_reinstatement()
236 struct iscsi_conn *conn, in iscsi_login_set_conn_values() argument
239 conn->sess = sess; in iscsi_login_set_conn_values()
240 conn->cid = be16_to_cpu(cid); in iscsi_login_set_conn_values()
245 get_random_bytes(&conn->stat_sn, sizeof(u32)); in iscsi_login_set_conn_values()
248 conn->auth_id = iscsit_global->auth_id++; in iscsi_login_set_conn_values()
253 struct iscsi_conn *conn, in iscsi_change_param_sprintf() argument
265 if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) { in iscsi_change_param_sprintf()
266 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_change_param_sprintf()
279 struct iscsi_conn *conn, in iscsi_login_zero_tsih_s1() argument
288 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s1()
294 iscsi_login_set_conn_values(sess, conn, pdu->cid); in iscsi_login_zero_tsih_s1()
323 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s1()
338 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s1()
348 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s1()
359 struct iscsi_conn *conn) in iscsi_login_zero_tsih_s2() argument
362 struct iscsi_session *sess = conn->sess; in iscsi_login_zero_tsih_s2()
365 sess->tpg = conn->tpg; in iscsi_login_zero_tsih_s2()
378 if (iscsi_copy_param_list(&conn->param_list, in iscsi_login_zero_tsih_s2()
379 conn->tpg->param_list, 1) < 0) { in iscsi_login_zero_tsih_s2()
380 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s2()
385 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) in iscsi_login_zero_tsih_s2()
388 iscsi_set_keys_to_negotiate(conn->param_list, iser); in iscsi_login_zero_tsih_s2()
392 conn->param_list); in iscsi_login_zero_tsih_s2()
403 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt)) in iscsi_login_zero_tsih_s2()
411 if (iscsi_change_param_sprintf(conn, "ErrorRecoveryLevel=%d", na->default_erl)) in iscsi_login_zero_tsih_s2()
422 if (iscsi_change_param_sprintf(conn, "RDMAExtensions=Yes")) in iscsi_login_zero_tsih_s2()
430 conn->param_list); in iscsi_login_zero_tsih_s2()
432 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s2()
438 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_zero_tsih_s2()
454 if (iscsi_change_param_sprintf(conn, "MaxRecvDataSegmentLength=%lu\n", mrdsl)) in iscsi_login_zero_tsih_s2()
465 if (iscsi_change_param_sprintf(conn, "ImmediateData=No")) in iscsi_login_zero_tsih_s2()
468 if (iscsi_change_param_sprintf(conn, "InitialR2T=Yes")) in iscsi_login_zero_tsih_s2()
480 struct iscsi_conn *conn, in iscsi_login_non_zero_tsih_s1() argument
485 iscsi_login_set_conn_values(NULL, conn, pdu->cid); in iscsi_login_non_zero_tsih_s1()
493 struct iscsi_conn *conn, in iscsi_login_non_zero_tsih_s2() argument
496 struct iscsi_portal_group *tpg = conn->tpg; in iscsi_login_non_zero_tsih_s2()
528 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_login_non_zero_tsih_s2()
542 iscsi_login_set_conn_values(sess, conn, pdu->cid); in iscsi_login_non_zero_tsih_s2()
544 if (iscsi_copy_param_list(&conn->param_list, in iscsi_login_non_zero_tsih_s2()
545 conn->tpg->param_list, 0) < 0) { in iscsi_login_non_zero_tsih_s2()
546 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_login_non_zero_tsih_s2()
551 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) in iscsi_login_non_zero_tsih_s2()
554 iscsi_set_keys_to_negotiate(conn->param_list, iser); in iscsi_login_non_zero_tsih_s2()
562 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt)) in iscsi_login_non_zero_tsih_s2()
569 struct iscsi_conn *conn, in iscsi_login_post_auth_non_zero_tsih() argument
575 struct iscsi_session *sess = conn->sess; in iscsi_login_post_auth_non_zero_tsih()
609 conn->cid); in iscsi_login_post_auth_non_zero_tsih()
627 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_login_post_auth_non_zero_tsih()
635 static void iscsi_post_login_start_timers(struct iscsi_conn *conn) in iscsi_post_login_start_timers() argument
637 struct iscsi_session *sess = conn->sess; in iscsi_post_login_start_timers()
641 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) in iscsi_post_login_start_timers()
645 iscsit_start_nopin_timer(conn); in iscsi_post_login_start_timers()
648 int iscsit_start_kthreads(struct iscsi_conn *conn) in iscsit_start_kthreads() argument
653 conn->bitmap_id = bitmap_find_free_region(iscsit_global->ts_bitmap, in iscsit_start_kthreads()
657 if (conn->bitmap_id < 0) { in iscsit_start_kthreads()
663 conn->tx_thread = kthread_run(iscsi_target_tx_thread, conn, in iscsit_start_kthreads()
665 if (IS_ERR(conn->tx_thread)) { in iscsit_start_kthreads()
667 ret = PTR_ERR(conn->tx_thread); in iscsit_start_kthreads()
670 conn->tx_thread_active = true; in iscsit_start_kthreads()
672 conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn, in iscsit_start_kthreads()
674 if (IS_ERR(conn->rx_thread)) { in iscsit_start_kthreads()
676 ret = PTR_ERR(conn->rx_thread); in iscsit_start_kthreads()
679 conn->rx_thread_active = true; in iscsit_start_kthreads()
683 send_sig(SIGINT, conn->tx_thread, 1); in iscsit_start_kthreads()
684 kthread_stop(conn->tx_thread); in iscsit_start_kthreads()
685 conn->tx_thread_active = false; in iscsit_start_kthreads()
688 bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id, in iscsit_start_kthreads()
696 struct iscsi_conn *conn, in iscsi_post_login_handler() argument
700 struct iscsi_session *sess = conn->sess; in iscsi_post_login_handler()
705 iscsit_inc_conn_usage_count(conn); in iscsi_post_login_handler()
707 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_SUCCESS, in iscsi_post_login_handler()
711 conn->conn_state = TARG_CONN_STATE_LOGGED_IN; in iscsi_post_login_handler()
713 iscsi_set_connection_parameters(conn->conn_ops, conn->param_list); in iscsi_post_login_handler()
719 conn->param_list, 0); in iscsi_post_login_handler()
720 iscsi_release_param_list(conn->param_list); in iscsi_post_login_handler()
721 conn->param_list = NULL; in iscsi_post_login_handler()
733 " %pISpc,%hu\n", conn->cid, &conn->login_sockaddr, in iscsi_post_login_handler()
734 &conn->local_sockaddr, tpg->tpgt); in iscsi_post_login_handler()
736 list_add_tail(&conn->conn_list, &sess->sess_conn_list); in iscsi_post_login_handler()
743 iscsi_post_login_start_timers(conn); in iscsi_post_login_handler()
748 iscsit_thread_get_cpumask(conn); in iscsi_post_login_handler()
749 conn->conn_rx_reset_cpumask = 1; in iscsi_post_login_handler()
750 conn->conn_tx_reset_cpumask = 1; in iscsi_post_login_handler()
755 complete(&conn->rx_login_comp); in iscsi_post_login_handler()
756 iscsit_dec_conn_usage_count(conn); in iscsi_post_login_handler()
767 iscsi_set_session_parameters(sess->sess_ops, conn->param_list, 1); in iscsi_post_login_handler()
768 iscsi_release_param_list(conn->param_list); in iscsi_post_login_handler()
769 conn->param_list = NULL; in iscsi_post_login_handler()
780 conn->cid, &conn->login_sockaddr, &conn->local_sockaddr, in iscsi_post_login_handler()
784 list_add_tail(&conn->conn_list, &sess->sess_conn_list); in iscsi_post_login_handler()
805 iscsi_post_login_start_timers(conn); in iscsi_post_login_handler()
810 iscsit_thread_get_cpumask(conn); in iscsi_post_login_handler()
811 conn->conn_rx_reset_cpumask = 1; in iscsi_post_login_handler()
812 conn->conn_tx_reset_cpumask = 1; in iscsi_post_login_handler()
817 complete(&conn->rx_login_comp); in iscsi_post_login_handler()
818 iscsit_dec_conn_usage_count(conn); in iscsi_post_login_handler()
998 int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn) in iscsit_accept_np() argument
1009 conn->sock = new_sock; in iscsit_accept_np()
1010 conn->login_family = np->np_sockaddr.ss_family; in iscsit_accept_np()
1015 rc = conn->sock->ops->getname(conn->sock, in iscsit_accept_np()
1019 memcpy(&conn->login_sockaddr, &sock_in6, sizeof(sock_in6)); in iscsit_accept_np()
1025 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in)); in iscsit_accept_np()
1029 rc = conn->sock->ops->getname(conn->sock, in iscsit_accept_np()
1033 memcpy(&conn->local_sockaddr, &sock_in6, sizeof(sock_in6)); in iscsit_accept_np()
1039 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in)); in iscsit_accept_np()
1045 rc = conn->sock->ops->getname(conn->sock, in iscsit_accept_np()
1048 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in)); in iscsit_accept_np()
1050 rc = conn->sock->ops->getname(conn->sock, in iscsit_accept_np()
1053 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in)); in iscsit_accept_np()
1059 int iscsit_get_login_rx(struct iscsi_conn *conn, struct iscsi_login *login) in iscsit_get_login_rx() argument
1064 if (iscsi_login_rx_data(conn, login->req, ISCSI_HDR_LEN) < 0) in iscsit_get_login_rx()
1093 if (iscsi_target_check_login_request(conn, login) < 0) in iscsit_get_login_rx()
1097 if (iscsi_login_rx_data(conn, login->req_buf, in iscsit_get_login_rx()
1104 int iscsit_put_login_tx(struct iscsi_conn *conn, struct iscsi_login *login, in iscsit_put_login_tx() argument
1107 if (iscsi_login_tx_data(conn, login->rsp, login->rsp_buf, length) < 0) in iscsit_put_login_tx()
1114 iscsit_conn_set_transport(struct iscsi_conn *conn, struct iscsit_transport *t) in iscsit_conn_set_transport() argument
1119 conn->conn_transport = t; in iscsit_conn_set_transport()
1129 conn->conn_transport = t; in iscsit_conn_set_transport()
1133 void iscsi_target_login_sess_out(struct iscsi_conn *conn, in iscsi_target_login_sess_out() argument
1140 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_login_sess_out()
1142 if (!zero_tsih || !conn->sess) in iscsi_target_login_sess_out()
1144 if (conn->sess->se_sess) in iscsi_target_login_sess_out()
1145 transport_free_session(conn->sess->se_sess); in iscsi_target_login_sess_out()
1146 if (conn->sess->session_index != 0) { in iscsi_target_login_sess_out()
1148 idr_remove(&sess_idr, conn->sess->session_index); in iscsi_target_login_sess_out()
1151 kfree(conn->sess->sess_ops); in iscsi_target_login_sess_out()
1152 kfree(conn->sess); in iscsi_target_login_sess_out()
1153 conn->sess = NULL; in iscsi_target_login_sess_out()
1161 if (!zero_tsih && conn->sess) { in iscsi_target_login_sess_out()
1162 spin_lock_bh(&conn->sess->conn_lock); in iscsi_target_login_sess_out()
1163 if (conn->sess->session_state == TARG_SESS_STATE_FAILED) { in iscsi_target_login_sess_out()
1165 &conn->tpg->tpg_se_tpg; in iscsi_target_login_sess_out()
1167 atomic_set(&conn->sess->session_continuation, 0); in iscsi_target_login_sess_out()
1168 spin_unlock_bh(&conn->sess->conn_lock); in iscsi_target_login_sess_out()
1170 iscsit_start_time2retain_handler(conn->sess); in iscsi_target_login_sess_out()
1173 spin_unlock_bh(&conn->sess->conn_lock); in iscsi_target_login_sess_out()
1174 iscsit_dec_session_usage_count(conn->sess); in iscsi_target_login_sess_out()
1177 if (!IS_ERR(conn->conn_rx_hash.tfm)) in iscsi_target_login_sess_out()
1178 crypto_free_hash(conn->conn_rx_hash.tfm); in iscsi_target_login_sess_out()
1179 if (!IS_ERR(conn->conn_tx_hash.tfm)) in iscsi_target_login_sess_out()
1180 crypto_free_hash(conn->conn_tx_hash.tfm); in iscsi_target_login_sess_out()
1182 free_cpumask_var(conn->conn_cpumask); in iscsi_target_login_sess_out()
1184 kfree(conn->conn_ops); in iscsi_target_login_sess_out()
1186 if (conn->param_list) { in iscsi_target_login_sess_out()
1187 iscsi_release_param_list(conn->param_list); in iscsi_target_login_sess_out()
1188 conn->param_list = NULL; in iscsi_target_login_sess_out()
1190 iscsi_target_nego_release(conn); in iscsi_target_login_sess_out()
1192 if (conn->sock) { in iscsi_target_login_sess_out()
1193 sock_release(conn->sock); in iscsi_target_login_sess_out()
1194 conn->sock = NULL; in iscsi_target_login_sess_out()
1197 if (conn->conn_transport->iscsit_wait_conn) in iscsi_target_login_sess_out()
1198 conn->conn_transport->iscsit_wait_conn(conn); in iscsi_target_login_sess_out()
1200 if (conn->conn_transport->iscsit_free_conn) in iscsi_target_login_sess_out()
1201 conn->conn_transport->iscsit_free_conn(conn); in iscsi_target_login_sess_out()
1203 iscsit_put_transport(conn->conn_transport); in iscsi_target_login_sess_out()
1204 kfree(conn); in iscsi_target_login_sess_out()
1211 struct iscsi_conn *conn = NULL; in __iscsi_target_login_thread() local
1232 conn = kzalloc(sizeof(struct iscsi_conn), GFP_KERNEL); in __iscsi_target_login_thread()
1233 if (!conn) { in __iscsi_target_login_thread()
1240 conn->conn_state = TARG_CONN_STATE_FREE; in __iscsi_target_login_thread()
1242 if (iscsit_conn_set_transport(conn, np->np_transport) < 0) { in __iscsi_target_login_thread()
1243 kfree(conn); in __iscsi_target_login_thread()
1247 rc = np->np_transport->iscsit_accept_np(np, conn); in __iscsi_target_login_thread()
1250 iscsit_put_transport(conn->conn_transport); in __iscsi_target_login_thread()
1251 kfree(conn); in __iscsi_target_login_thread()
1252 conn = NULL; in __iscsi_target_login_thread()
1259 iscsit_put_transport(conn->conn_transport); in __iscsi_target_login_thread()
1260 kfree(conn); in __iscsi_target_login_thread()
1261 conn = NULL; in __iscsi_target_login_thread()
1266 iscsit_put_transport(conn->conn_transport); in __iscsi_target_login_thread()
1267 kfree(conn); in __iscsi_target_login_thread()
1268 conn = NULL; in __iscsi_target_login_thread()
1274 login = iscsi_login_init_conn(conn); in __iscsi_target_login_thread()
1282 conn->conn_state = TARG_CONN_STATE_XPT_UP; in __iscsi_target_login_thread()
1286 rc = np->np_transport->iscsit_get_login_rx(conn, login); in __iscsi_target_login_thread()
1298 conn->login_itt = pdu->itt; in __iscsi_target_login_thread()
1305 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in __iscsi_target_login_thread()
1311 conn->network_transport = np->np_network_transport; in __iscsi_target_login_thread()
1314 " Portal %pISpc\n", &conn->login_sockaddr, np->np_transport->name, in __iscsi_target_login_thread()
1315 &conn->local_sockaddr); in __iscsi_target_login_thread()
1318 conn->conn_state = TARG_CONN_STATE_IN_LOGIN; in __iscsi_target_login_thread()
1320 if (iscsi_login_check_initiator_version(conn, pdu->max_version, in __iscsi_target_login_thread()
1331 if (iscsi_login_zero_tsih_s1(conn, buffer) < 0) in __iscsi_target_login_thread()
1341 if (iscsi_login_non_zero_tsih_s1(conn, buffer) < 0) in __iscsi_target_login_thread()
1353 rc = iscsi_target_locate_portal(np, conn, login); in __iscsi_target_login_thread()
1355 tpg = conn->tpg; in __iscsi_target_login_thread()
1360 conn->sess->se_sess->sup_prot_ops = in __iscsi_target_login_thread()
1361 conn->conn_transport->iscsit_get_sup_prot_ops(conn); in __iscsi_target_login_thread()
1363 tpg = conn->tpg; in __iscsi_target_login_thread()
1370 if (iscsi_login_zero_tsih_s2(conn) < 0) in __iscsi_target_login_thread()
1373 if (iscsi_login_non_zero_tsih_s2(conn, buffer) < 0) in __iscsi_target_login_thread()
1377 ret = iscsi_target_start_negotiation(login, conn); in __iscsi_target_login_thread()
1384 tpg_np = conn->tpg_np; in __iscsi_target_login_thread()
1386 iscsi_post_login_handler(np, conn, zero_tsih); in __iscsi_target_login_thread()
1398 tpg_np = conn->tpg_np; in __iscsi_target_login_thread()
1399 iscsi_target_login_sess_out(conn, np, zero_tsih, new_sess); in __iscsi_target_login_thread()