Lines Matching full:conn

100 static struct iscsi_node_auth *iscsi_get_node_auth(struct iscsit_conn *conn)  in iscsi_get_node_auth()  argument
106 if (conn->sess->sess_ops->SessionType) in iscsi_get_node_auth()
109 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_get_node_auth()
126 struct iscsit_conn *conn, in iscsi_handle_authentication() argument
135 auth = iscsi_get_node_auth(conn); in iscsi_handle_authentication()
140 strcpy(conn->sess->auth_type, "CHAP"); in iscsi_handle_authentication()
142 strcpy(conn->sess->auth_type, NONE); in iscsi_handle_authentication()
147 return chap_main_loop(conn, auth, in_buf, out_buf, in iscsi_handle_authentication()
153 static void iscsi_remove_failed_auth_entry(struct iscsit_conn *conn) in iscsi_remove_failed_auth_entry() argument
155 kfree(conn->auth_protocol); in iscsi_remove_failed_auth_entry()
159 struct iscsit_conn *conn, in iscsi_target_check_login_request() argument
175 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
184 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
196 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
207 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
217 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
225 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
233 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
250 struct iscsit_conn *conn, in iscsi_target_check_first_request() argument
258 list_for_each_entry(param, &conn->param_list->param_list, p_list) { in iscsi_target_check_first_request()
263 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_first_request()
278 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_first_request()
289 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_target_check_first_request()
293 iscsit_tx_login_rsp(conn, in iscsi_target_check_first_request()
305 iscsit_tx_login_rsp(conn, in iscsi_target_check_first_request()
317 static int iscsi_target_do_tx_login_io(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_do_tx_login_io() argument
329 login_rsp->statsn = cpu_to_be32(conn->stat_sn++); in iscsi_target_do_tx_login_io()
330 login_rsp->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn); in iscsi_target_do_tx_login_io()
331 login_rsp->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn)); in iscsi_target_do_tx_login_io()
347 int rc = iscsit_start_kthreads(conn); in iscsi_target_do_tx_login_io()
349 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_tx_login_io()
355 if (conn->conn_transport->iscsit_put_login_tx(conn, login, in iscsi_target_do_tx_login_io()
365 if (conn->rx_thread && conn->rx_thread_active) { in iscsi_target_do_tx_login_io()
366 send_sig(SIGINT, conn->rx_thread, 1); in iscsi_target_do_tx_login_io()
367 complete(&conn->rx_login_comp); in iscsi_target_do_tx_login_io()
368 kthread_stop(conn->rx_thread); in iscsi_target_do_tx_login_io()
370 if (conn->tx_thread && conn->tx_thread_active) { in iscsi_target_do_tx_login_io()
371 send_sig(SIGINT, conn->tx_thread, 1); in iscsi_target_do_tx_login_io()
372 kthread_stop(conn->tx_thread); in iscsi_target_do_tx_login_io()
375 bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id, in iscsi_target_do_tx_login_io()
384 struct iscsit_conn *conn = sk->sk_user_data; in iscsi_target_sk_data_ready() local
387 pr_debug("Entering iscsi_target_sk_data_ready: conn: %p\n", conn); in iscsi_target_sk_data_ready()
394 if (!test_bit(LOGIN_FLAGS_READY, &conn->login_flags)) { in iscsi_target_sk_data_ready()
396 pr_debug("Got LOGIN_FLAGS_READY=0, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
399 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_data_ready()
401 pr_debug("Got LOGIN_FLAGS_CLOSED=1, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
404 if (test_and_set_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags)) { in iscsi_target_sk_data_ready()
406 pr_debug("Got LOGIN_FLAGS_READ_ACTIVE=1, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
407 if (iscsi_target_sk_data_ready == conn->orig_data_ready) in iscsi_target_sk_data_ready()
409 conn->orig_data_ready(sk); in iscsi_target_sk_data_ready()
413 rc = schedule_delayed_work(&conn->login_work, 0); in iscsi_target_sk_data_ready()
423 static void iscsi_target_set_sock_callbacks(struct iscsit_conn *conn) in iscsi_target_set_sock_callbacks() argument
427 if (!conn->sock) in iscsi_target_set_sock_callbacks()
430 sk = conn->sock->sk; in iscsi_target_set_sock_callbacks()
431 pr_debug("Entering iscsi_target_set_sock_callbacks: conn: %p\n", conn); in iscsi_target_set_sock_callbacks()
434 sk->sk_user_data = conn; in iscsi_target_set_sock_callbacks()
435 conn->orig_data_ready = sk->sk_data_ready; in iscsi_target_set_sock_callbacks()
436 conn->orig_state_change = sk->sk_state_change; in iscsi_target_set_sock_callbacks()
445 static void iscsi_target_restore_sock_callbacks(struct iscsit_conn *conn) in iscsi_target_restore_sock_callbacks() argument
449 if (!conn->sock) in iscsi_target_restore_sock_callbacks()
452 sk = conn->sock->sk; in iscsi_target_restore_sock_callbacks()
453 pr_debug("Entering iscsi_target_restore_sock_callbacks: conn: %p\n", conn); in iscsi_target_restore_sock_callbacks()
461 sk->sk_data_ready = conn->orig_data_ready; in iscsi_target_restore_sock_callbacks()
462 sk->sk_state_change = conn->orig_state_change; in iscsi_target_restore_sock_callbacks()
481 static bool iscsi_target_sk_check_close(struct iscsit_conn *conn) in iscsi_target_sk_check_close() argument
485 if (conn->sock) { in iscsi_target_sk_check_close()
486 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_close()
490 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)); in iscsi_target_sk_check_close()
496 static bool iscsi_target_sk_check_flag(struct iscsit_conn *conn, unsigned int flag) in iscsi_target_sk_check_flag() argument
500 if (conn->sock) { in iscsi_target_sk_check_flag()
501 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_flag()
504 state = test_bit(flag, &conn->login_flags); in iscsi_target_sk_check_flag()
510 static bool iscsi_target_sk_check_and_clear(struct iscsit_conn *conn, unsigned int flag) in iscsi_target_sk_check_and_clear() argument
514 if (conn->sock) { in iscsi_target_sk_check_and_clear()
515 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_and_clear()
519 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)); in iscsi_target_sk_check_and_clear()
521 clear_bit(flag, &conn->login_flags); in iscsi_target_sk_check_and_clear()
527 static void iscsi_target_login_drop(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_login_drop() argument
531 iscsi_remove_failed_auth_entry(conn); in iscsi_target_login_drop()
532 iscsi_target_nego_release(conn); in iscsi_target_login_drop()
533 iscsi_target_login_sess_out(conn, zero_tsih, true); in iscsi_target_login_drop()
538 struct iscsit_conn *conn; member
544 struct iscsit_conn *conn = timeout->conn; in iscsi_target_login_timeout() local
548 if (conn->login_kworker) { in iscsi_target_login_timeout()
549 pr_debug("Sending SIGINT to conn->login_kworker %s/%d\n", in iscsi_target_login_timeout()
550 conn->login_kworker->comm, conn->login_kworker->pid); in iscsi_target_login_timeout()
551 send_sig(SIGINT, conn->login_kworker, 1); in iscsi_target_login_timeout()
557 struct iscsit_conn *conn = container_of(work, in iscsi_target_do_login_rx() local
559 struct iscsi_login *login = conn->login; in iscsi_target_do_login_rx()
561 struct iscsi_portal_group *tpg = conn->tpg; in iscsi_target_do_login_rx()
562 struct iscsi_tpg_np *tpg_np = conn->tpg_np; in iscsi_target_do_login_rx()
567 pr_debug("entering iscsi_target_do_login_rx, conn: %p, %s:%d\n", in iscsi_target_do_login_rx()
568 conn, current->comm, current->pid); in iscsi_target_do_login_rx()
576 * cancel_delayed_work_sync(&conn->login_work), and cleanup the in iscsi_target_do_login_rx()
579 if (iscsi_target_sk_check_flag(conn, LOGIN_FLAGS_INITIAL_PDU)) { in iscsi_target_do_login_rx()
580 schedule_delayed_work(&conn->login_work, msecs_to_jiffies(10)); in iscsi_target_do_login_rx()
593 if (iscsi_target_sk_check_close(conn)) { in iscsi_target_do_login_rx()
598 conn->login_kworker = current; in iscsi_target_do_login_rx()
601 timeout.conn = conn; in iscsi_target_do_login_rx()
606 rc = conn->conn_transport->iscsit_get_login_rx(conn, login); in iscsi_target_do_login_rx()
610 conn->login_kworker = NULL; in iscsi_target_do_login_rx()
616 conn, current->comm, current->pid); in iscsi_target_do_login_rx()
629 if (conn->sock) { in iscsi_target_do_login_rx()
630 struct sock *sk = conn->sock->sk; in iscsi_target_do_login_rx()
633 if (!test_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags)) { in iscsi_target_do_login_rx()
634 clear_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags); in iscsi_target_do_login_rx()
635 set_bit(LOGIN_FLAGS_WRITE_ACTIVE, &conn->login_flags); in iscsi_target_do_login_rx()
640 rc = iscsi_target_do_login(conn, login); in iscsi_target_do_login_rx()
644 if (iscsi_target_sk_check_and_clear(conn, in iscsi_target_do_login_rx()
648 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
649 iscsi_target_nego_release(conn); in iscsi_target_do_login_rx()
650 iscsi_post_login_handler(np, conn, zero_tsih); in iscsi_target_do_login_rx()
656 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_do_login_rx()
657 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
658 iscsi_target_login_drop(conn, login); in iscsi_target_do_login_rx()
664 struct iscsit_conn *conn; in iscsi_target_sk_state_change() local
671 conn = sk->sk_user_data; in iscsi_target_sk_state_change()
672 if (!conn) { in iscsi_target_sk_state_change()
676 orig_state_change = conn->orig_state_change; in iscsi_target_sk_state_change()
678 if (!test_bit(LOGIN_FLAGS_READY, &conn->login_flags)) { in iscsi_target_sk_state_change()
679 pr_debug("Got LOGIN_FLAGS_READY=0 sk_state_change conn: %p\n", in iscsi_target_sk_state_change()
680 conn); in iscsi_target_sk_state_change()
688 if (test_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags) || in iscsi_target_sk_state_change()
689 test_bit(LOGIN_FLAGS_WRITE_ACTIVE, &conn->login_flags)) { in iscsi_target_sk_state_change()
691 " sk_state_change conn: %p\n", conn); in iscsi_target_sk_state_change()
693 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags); in iscsi_target_sk_state_change()
698 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_state_change()
699 pr_debug("Got LOGIN_FLAGS_CLOSED=1 sk_state_change conn: %p\n", in iscsi_target_sk_state_change()
700 conn); in iscsi_target_sk_state_change()
707 * but only queue conn->login_work -> iscsi_target_do_login_rx() in iscsi_target_sk_state_change()
722 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags); in iscsi_target_sk_state_change()
723 state = test_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags); in iscsi_target_sk_state_change()
729 schedule_delayed_work(&conn->login_work, 0); in iscsi_target_sk_state_change()
743 struct iscsit_conn *conn, in iscsi_target_check_for_existing_instances() argument
752 return iscsi_check_for_session_reinstatement(conn); in iscsi_target_check_for_existing_instances()
754 return iscsi_login_post_auth_non_zero_tsih(conn, login->cid, in iscsi_target_check_for_existing_instances()
759 struct iscsit_conn *conn, in iscsi_target_do_authentication() argument
772 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_do_authentication()
777 conn, in iscsi_target_do_authentication()
799 conn, login); in iscsi_target_do_authentication()
803 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_do_authentication()
809 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_authentication()
817 bool iscsi_conn_auth_required(struct iscsit_conn *conn) in iscsi_conn_auth_required() argument
822 if (conn->sess->sess_ops->SessionType) { in iscsi_conn_auth_required()
826 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
831 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_conn_auth_required()
840 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
848 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
854 struct iscsit_conn *conn, in iscsi_target_handle_csg_zero() argument
867 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_handle_csg_zero()
876 conn); in iscsi_target_handle_csg_zero()
885 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_zero()
894 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_zero()
900 if (iscsi_target_check_first_request(conn, login) < 0) in iscsi_target_handle_csg_zero()
908 conn->param_list, in iscsi_target_handle_csg_zero()
909 conn->tpg->tpg_attrib.login_keys_workaround); in iscsi_target_handle_csg_zero()
913 if (!iscsi_check_negotiated_keys(conn->param_list)) { in iscsi_target_handle_csg_zero()
914 bool auth_required = iscsi_conn_auth_required(conn); in iscsi_target_handle_csg_zero()
921 iscsit_tx_login_rsp(conn, in iscsi_target_handle_csg_zero()
945 return iscsi_target_do_authentication(conn, login); in iscsi_target_handle_csg_zero()
948 static bool iscsi_conn_authenticated(struct iscsit_conn *conn, in iscsi_conn_authenticated() argument
951 if (!iscsi_conn_auth_required(conn)) in iscsi_conn_authenticated()
960 static int iscsi_target_handle_csg_one(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_handle_csg_one() argument
976 conn); in iscsi_target_handle_csg_one()
978 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
984 if (iscsi_target_check_first_request(conn, login) < 0) in iscsi_target_handle_csg_one()
987 if (iscsi_target_check_for_existing_instances(conn, login) < 0) in iscsi_target_handle_csg_one()
995 conn->param_list, in iscsi_target_handle_csg_one()
996 conn->tpg->tpg_attrib.login_keys_workaround); in iscsi_target_handle_csg_one()
998 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
1003 if (!iscsi_conn_authenticated(conn, login)) { in iscsi_target_handle_csg_one()
1007 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
1012 if (!iscsi_check_negotiated_keys(conn->param_list)) in iscsi_target_handle_csg_one()
1021 static int iscsi_target_do_login(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_do_login() argument
1033 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_login()
1041 if (iscsi_target_handle_csg_zero(conn, login) < 0) in iscsi_target_do_login()
1046 if (iscsi_target_handle_csg_one(conn, login) < 0) in iscsi_target_do_login()
1055 if (iscsi_target_sk_check_close(conn)) in iscsi_target_do_login()
1058 login->tsih = conn->sess->tsih; in iscsi_target_do_login()
1060 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_do_login()
1061 if (iscsi_target_do_tx_login_io(conn, in iscsi_target_do_login()
1074 if (iscsi_target_do_tx_login_io(conn, login) < 0) in iscsi_target_do_login()
1107 struct iscsit_conn *conn, in iscsi_target_locate_portal() argument
1112 struct iscsit_session *sess = conn->sess; in iscsi_target_locate_portal()
1120 INIT_DELAYED_WORK(&conn->login_work, iscsi_target_do_login_rx); in iscsi_target_locate_portal()
1121 iscsi_target_set_sock_callbacks(conn); in iscsi_target_locate_portal()
1162 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1180 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1191 conn->tpg = iscsit_global->discovery_tpg; in iscsi_target_locate_portal()
1199 if (iscsi_login_setup_crypto(conn) < 0) { in iscsi_target_locate_portal()
1208 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1209 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1223 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1236 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1246 conn->tpg = iscsit_get_tpg_from_np(tiqn, np, &tpg_np); in iscsi_target_locate_portal()
1247 if (!conn->tpg) { in iscsi_target_locate_portal()
1251 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1256 conn->tpg_np = tpg_np; in iscsi_target_locate_portal()
1257 pr_debug("Located Portal Group Object: %hu\n", conn->tpg->tpgt); in iscsi_target_locate_portal()
1261 if (iscsi_login_setup_crypto(conn) < 0) { in iscsi_target_locate_portal()
1265 conn->tpg = NULL; in iscsi_target_locate_portal()
1273 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1276 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1278 conn->tpg = NULL; in iscsi_target_locate_portal()
1284 * conn->sess->node_acl will be set when the referenced in iscsi_target_locate_portal()
1302 &conn->tpg->tpg_se_tpg, i_buf); in iscsi_target_locate_portal()
1306 i_buf, conn->tpg->tpgt); in iscsi_target_locate_portal()
1307 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1325 tag_size = sizeof(struct iscsit_cmd) + conn->conn_transport->priv_size; in iscsi_target_locate_portal()
1329 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1340 struct iscsit_conn *conn) in iscsi_target_start_negotiation() argument
1344 if (conn->sock) { in iscsi_target_start_negotiation()
1345 struct sock *sk = conn->sock->sk; in iscsi_target_start_negotiation()
1348 set_bit(LOGIN_FLAGS_READY, &conn->login_flags); in iscsi_target_start_negotiation()
1349 set_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags); in iscsi_target_start_negotiation()
1361 ret = iscsi_target_do_login(conn, login); in iscsi_target_start_negotiation()
1362 if (!ret && iscsi_target_sk_check_and_clear(conn, LOGIN_FLAGS_INITIAL_PDU)) in iscsi_target_start_negotiation()
1366 cancel_delayed_work_sync(&conn->login_work); in iscsi_target_start_negotiation()
1367 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_start_negotiation()
1368 iscsi_remove_failed_auth_entry(conn); in iscsi_target_start_negotiation()
1371 iscsi_target_nego_release(conn); in iscsi_target_start_negotiation()
1376 void iscsi_target_nego_release(struct iscsit_conn *conn) in iscsi_target_nego_release() argument
1378 struct iscsi_login *login = conn->conn_login; in iscsi_target_nego_release()
1387 conn->conn_login = NULL; in iscsi_target_nego_release()