Lines Matching refs:conn

38 static struct iscsi_login *iscsi_login_init_conn(struct iscsit_conn *conn)
47 conn->login = login;
48 login->conn = conn;
63 conn->conn_login = login;
78 int iscsi_login_setup_crypto(struct iscsit_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 iscsit_conn *conn,
123 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
131 int iscsi_check_for_session_reinstatement(struct iscsit_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 iscsit_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 iscsit_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 iscsit_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 iscsit_conn *conn)
343 struct iscsit_session *sess = conn->sess;
347 sess->tpg = conn->tpg;
360 if (iscsi_copy_param_list(&conn->param_list,
361 conn->tpg->param_list, 1) < 0) {
362 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
367 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
370 iscsi_set_keys_to_negotiate(conn->param_list, iser);
374 conn->param_list);
382 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list);
384 if (!iscsi_conn_auth_required(conn))
385 if (iscsi_change_param_sprintf(conn, "AuthMethod=%s",
397 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
405 if (iscsi_change_param_sprintf(conn, "ErrorRecoveryLevel=%d", na->default_erl))
416 if (iscsi_change_param_sprintf(conn, "RDMAExtensions=Yes"))
424 conn->param_list);
426 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
432 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
448 if (iscsi_change_param_sprintf(conn, "MaxRecvDataSegmentLength=%lu\n", mrdsl))
459 if (iscsi_change_param_sprintf(conn, "ImmediateData=No"))
462 if (iscsi_change_param_sprintf(conn, "InitialR2T=Yes"))
474 struct iscsit_conn *conn,
479 return iscsi_login_set_conn_values(NULL, conn, pdu->cid);
486 struct iscsit_conn *conn,
489 struct iscsi_portal_group *tpg = conn->tpg;
522 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
536 if (iscsi_login_set_conn_values(sess, conn, pdu->cid) < 0 ||
537 iscsi_copy_param_list(&conn->param_list,
538 conn->tpg->param_list, 0) < 0) {
539 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
544 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
547 iscsi_set_keys_to_negotiate(conn->param_list, iser);
555 if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
562 struct iscsit_conn *conn,
568 struct iscsit_session *sess = conn->sess;
602 conn->cid);
620 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
628 static void iscsi_post_login_start_timers(struct iscsit_conn *conn)
630 struct iscsit_session *sess = conn->sess;
634 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND)
638 iscsit_start_nopin_timer(conn);
641 int iscsit_start_kthreads(struct iscsit_conn *conn)
646 conn->bitmap_id = bitmap_find_free_region(iscsit_global->ts_bitmap,
650 if (conn->bitmap_id < 0) {
656 conn->tx_thread = kthread_run(iscsi_target_tx_thread, conn,
658 if (IS_ERR(conn->tx_thread)) {
660 ret = PTR_ERR(conn->tx_thread);
663 conn->tx_thread_active = true;
665 conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn,
667 if (IS_ERR(conn->rx_thread)) {
669 ret = PTR_ERR(conn->rx_thread);
672 conn->rx_thread_active = true;
676 send_sig(SIGINT, conn->tx_thread, 1);
677 kthread_stop(conn->tx_thread);
678 conn->tx_thread_active = false;
681 bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
689 struct iscsit_conn *conn,
693 struct iscsit_session *sess = conn->sess;
698 iscsit_inc_conn_usage_count(conn);
700 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_SUCCESS,
704 conn->conn_state = TARG_CONN_STATE_LOGGED_IN;
706 iscsi_set_connection_parameters(conn->conn_ops, conn->param_list);
712 conn->param_list, 0);
713 iscsi_release_param_list(conn->param_list);
714 conn->param_list = NULL;
726 " %pISpc,%hu\n", conn->cid, &conn->login_sockaddr,
727 &conn->local_sockaddr, tpg->tpgt);
729 list_add_tail(&conn->conn_list, &sess->sess_conn_list);
736 iscsi_post_login_start_timers(conn);
741 iscsit_thread_get_cpumask(conn);
742 conn->conn_rx_reset_cpumask = 1;
743 conn->conn_tx_reset_cpumask = 1;
748 complete(&conn->rx_login_comp);
749 iscsit_dec_conn_usage_count(conn);
760 iscsi_set_session_parameters(sess->sess_ops, conn->param_list, 1);
761 iscsi_release_param_list(conn->param_list);
762 conn->param_list = NULL;
773 conn->cid, &conn->login_sockaddr, &conn->local_sockaddr,
777 list_add_tail(&conn->conn_list, &sess->sess_conn_list);
798 iscsi_post_login_start_timers(conn);
803 iscsit_thread_get_cpumask(conn);
804 conn->conn_rx_reset_cpumask = 1;
805 conn->conn_tx_reset_cpumask = 1;
810 complete(&conn->rx_login_comp);
811 iscsit_dec_conn_usage_count(conn);
907 int iscsit_accept_np(struct iscsi_np *np, struct iscsit_conn *conn)
918 conn->sock = new_sock;
919 conn->login_family = np->np_sockaddr.ss_family;
924 rc = conn->sock->ops->getname(conn->sock,
928 memcpy(&conn->login_sockaddr, &sock_in6, sizeof(sock_in6));
934 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in));
938 rc = conn->sock->ops->getname(conn->sock,
942 memcpy(&conn->local_sockaddr, &sock_in6, sizeof(sock_in6));
948 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in));
954 rc = conn->sock->ops->getname(conn->sock,
957 memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in));
959 rc = conn->sock->ops->getname(conn->sock,
962 memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in));
968 int iscsit_get_login_rx(struct iscsit_conn *conn, struct iscsi_login *login)
973 if (iscsi_login_rx_data(conn, login->req, ISCSI_HDR_LEN) < 0)
1002 if (iscsi_target_check_login_request(conn, login) < 0)
1006 if (iscsi_login_rx_data(conn, login->req_buf,
1013 int iscsit_put_login_tx(struct iscsit_conn *conn, struct iscsi_login *login,
1016 if (iscsi_login_tx_data(conn, login->rsp, login->rsp_buf, length) < 0)
1023 iscsit_conn_set_transport(struct iscsit_conn *conn, struct iscsit_transport *t)
1028 conn->conn_transport = t;
1038 conn->conn_transport = t;
1044 struct iscsit_conn *conn;
1046 conn = kzalloc(sizeof(struct iscsit_conn), GFP_KERNEL);
1047 if (!conn) {
1052 conn->conn_state = TARG_CONN_STATE_FREE;
1054 init_waitqueue_head(&conn->queues_wq);
1055 INIT_LIST_HEAD(&conn->conn_list);
1056 INIT_LIST_HEAD(&conn->conn_cmd_list);
1057 INIT_LIST_HEAD(&conn->immed_queue_list);
1058 INIT_LIST_HEAD(&conn->response_queue_list);
1059 init_completion(&conn->conn_post_wait_comp);
1060 init_completion(&conn->conn_wait_comp);
1061 init_completion(&conn->conn_wait_rcfr_comp);
1062 init_completion(&conn->conn_waiting_on_uc_comp);
1063 init_completion(&conn->conn_logout_comp);
1064 init_completion(&conn->rx_half_close_comp);
1065 init_completion(&conn->tx_half_close_comp);
1066 init_completion(&conn->rx_login_comp);
1067 spin_lock_init(&conn->cmd_lock);
1068 spin_lock_init(&conn->conn_usage_lock);
1069 spin_lock_init(&conn->immed_queue_lock);
1070 spin_lock_init(&conn->nopin_timer_lock);
1071 spin_lock_init(&conn->response_queue_lock);
1072 spin_lock_init(&conn->state_lock);
1073 spin_lock_init(&conn->login_worker_lock);
1074 spin_lock_init(&conn->login_timer_lock);
1076 timer_setup(&conn->nopin_response_timer,
1078 timer_setup(&conn->nopin_timer, iscsit_handle_nopin_timeout, 0);
1079 timer_setup(&conn->login_timer, iscsit_login_timeout, 0);
1081 if (iscsit_conn_set_transport(conn, np->np_transport) < 0)
1084 conn->conn_ops = kzalloc(sizeof(struct iscsi_conn_ops), GFP_KERNEL);
1085 if (!conn->conn_ops) {
1090 if (!zalloc_cpumask_var(&conn->conn_cpumask, GFP_KERNEL)) {
1091 pr_err("Unable to allocate conn->conn_cpumask\n");
1095 if (!zalloc_cpumask_var(&conn->allowed_cpumask, GFP_KERNEL)) {
1096 pr_err("Unable to allocate conn->allowed_cpumask\n");
1100 conn->cmd_cnt = target_alloc_cmd_counter();
1101 if (!conn->cmd_cnt)
1104 return conn;
1107 free_cpumask_var(conn->allowed_cpumask);
1109 free_cpumask_var(conn->conn_cpumask);
1111 kfree(conn->conn_ops);
1113 iscsit_put_transport(conn->conn_transport);
1115 kfree(conn);
1119 void iscsit_free_conn(struct iscsit_conn *conn)
1121 target_free_cmd_counter(conn->cmd_cnt);
1122 free_cpumask_var(conn->allowed_cpumask);
1123 free_cpumask_var(conn->conn_cpumask);
1124 kfree(conn->conn_ops);
1125 iscsit_put_transport(conn->conn_transport);
1126 kfree(conn);
1129 void iscsi_target_login_sess_out(struct iscsit_conn *conn,
1136 iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
1138 if (!zero_tsih || !conn->sess)
1141 transport_free_session(conn->sess->se_sess);
1142 ida_free(&sess_ida, conn->sess->session_index);
1143 kfree(conn->sess->sess_ops);
1144 kfree(conn->sess);
1145 conn->sess = NULL;
1152 if (!zero_tsih && conn->sess) {
1153 spin_lock_bh(&conn->sess->conn_lock);
1154 if (conn->sess->session_state == TARG_SESS_STATE_FAILED) {
1156 &conn->tpg->tpg_se_tpg;
1158 atomic_set(&conn->sess->session_continuation, 0);
1159 spin_unlock_bh(&conn->sess->conn_lock);
1161 iscsit_start_time2retain_handler(conn->sess);
1164 spin_unlock_bh(&conn->sess->conn_lock);
1165 iscsit_dec_session_usage_count(conn->sess);
1168 ahash_request_free(conn->conn_tx_hash);
1169 if (conn->conn_rx_hash) {
1172 tfm = crypto_ahash_reqtfm(conn->conn_rx_hash);
1173 ahash_request_free(conn->conn_rx_hash);
1177 if (conn->param_list) {
1178 iscsi_release_param_list(conn->param_list);
1179 conn->param_list = NULL;
1181 iscsi_target_nego_release(conn);
1183 if (conn->sock) {
1184 sock_release(conn->sock);
1185 conn->sock = NULL;
1188 if (conn->conn_transport->iscsit_wait_conn)
1189 conn->conn_transport->iscsit_wait_conn(conn);
1191 if (conn->conn_transport->iscsit_free_conn)
1192 conn->conn_transport->iscsit_free_conn(conn);
1194 iscsit_free_conn(conn);
1201 struct iscsit_conn *conn = NULL;
1224 conn = iscsit_alloc_conn(np);
1225 if (!conn) {
1230 rc = np->np_transport->iscsit_accept_np(np, conn);
1233 iscsit_free_conn(conn);
1241 iscsit_free_conn(conn);
1246 iscsit_free_conn(conn);
1252 login = iscsi_login_init_conn(conn);
1257 iscsit_start_login_timer(conn, current);
1260 conn->conn_state = TARG_CONN_STATE_XPT_UP;
1264 rc = np->np_transport->iscsit_get_login_rx(conn, login);
1276 conn->login_itt = pdu->itt;
1283 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1289 conn->network_transport = np->np_network_transport;
1292 " Portal %pISpc\n", &conn->login_sockaddr, np->np_transport->name,
1293 &conn->local_sockaddr);
1296 conn->conn_state = TARG_CONN_STATE_IN_LOGIN;
1298 if (iscsi_login_check_initiator_version(conn, pdu->max_version,
1309 if (iscsi_login_zero_tsih_s1(conn, buffer) < 0)
1319 if (iscsi_login_non_zero_tsih_s1(conn, buffer) < 0)
1331 rc = iscsi_target_locate_portal(np, conn, login);
1333 tpg = conn->tpg;
1338 if (conn->sess)
1339 conn->sess->se_sess->sup_prot_ops =
1340 conn->conn_transport->iscsit_get_sup_prot_ops(conn);
1342 tpg = conn->tpg;
1349 if (iscsi_login_zero_tsih_s2(conn) < 0)
1352 if (iscsi_login_non_zero_tsih_s2(conn, buffer) < 0)
1356 if (conn->conn_transport->iscsit_validate_params) {
1357 ret = conn->conn_transport->iscsit_validate_params(conn);
1366 ret = iscsi_target_start_negotiation(login, conn);
1371 tpg_np = conn->tpg_np;
1373 iscsi_post_login_handler(np, conn, zero_tsih);
1385 iscsit_stop_login_timer(conn);
1386 tpg_np = conn->tpg_np;
1387 iscsi_target_login_sess_out(conn, zero_tsih, new_sess);