Lines Matching full:conn
101 static struct iscsi_node_auth *iscsi_get_node_auth(struct iscsit_conn *conn) in iscsi_get_node_auth() argument
107 if (conn->sess->sess_ops->SessionType) in iscsi_get_node_auth()
110 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_get_node_auth()
127 struct iscsit_conn *conn, in iscsi_handle_authentication() argument
136 auth = iscsi_get_node_auth(conn); in iscsi_handle_authentication()
141 strcpy(conn->sess->auth_type, "CHAP"); in iscsi_handle_authentication()
143 strcpy(conn->sess->auth_type, NONE); in iscsi_handle_authentication()
148 return chap_main_loop(conn, auth, in_buf, out_buf, in iscsi_handle_authentication()
154 static void iscsi_remove_failed_auth_entry(struct iscsit_conn *conn) in iscsi_remove_failed_auth_entry() argument
156 kfree(conn->auth_protocol); in iscsi_remove_failed_auth_entry()
160 struct iscsit_conn *conn, in iscsi_target_check_login_request() argument
176 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
185 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
197 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
208 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
218 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
226 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
234 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_login_request()
251 struct iscsit_conn *conn, in iscsi_target_check_first_request() argument
259 list_for_each_entry(param, &conn->param_list->param_list, p_list) { in iscsi_target_check_first_request()
264 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_first_request()
279 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_check_first_request()
290 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_target_check_first_request()
294 iscsit_tx_login_rsp(conn, in iscsi_target_check_first_request()
306 iscsit_tx_login_rsp(conn, in iscsi_target_check_first_request()
318 static int iscsi_target_do_tx_login_io(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_do_tx_login_io() argument
330 login_rsp->statsn = cpu_to_be32(conn->stat_sn++); in iscsi_target_do_tx_login_io()
331 login_rsp->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn); in iscsi_target_do_tx_login_io()
332 login_rsp->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn)); in iscsi_target_do_tx_login_io()
348 int rc = iscsit_start_kthreads(conn); in iscsi_target_do_tx_login_io()
350 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_tx_login_io()
356 if (conn->conn_transport->iscsit_put_login_tx(conn, login, in iscsi_target_do_tx_login_io()
366 if (conn->rx_thread && conn->rx_thread_active) { in iscsi_target_do_tx_login_io()
367 send_sig(SIGINT, conn->rx_thread, 1); in iscsi_target_do_tx_login_io()
368 complete(&conn->rx_login_comp); in iscsi_target_do_tx_login_io()
369 kthread_stop(conn->rx_thread); in iscsi_target_do_tx_login_io()
371 if (conn->tx_thread && conn->tx_thread_active) { in iscsi_target_do_tx_login_io()
372 send_sig(SIGINT, conn->tx_thread, 1); in iscsi_target_do_tx_login_io()
373 kthread_stop(conn->tx_thread); in iscsi_target_do_tx_login_io()
376 bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id, in iscsi_target_do_tx_login_io()
385 struct iscsit_conn *conn = sk->sk_user_data; in iscsi_target_sk_data_ready() local
389 pr_debug("Entering iscsi_target_sk_data_ready: conn: %p\n", conn); in iscsi_target_sk_data_ready()
396 if (!test_bit(LOGIN_FLAGS_READY, &conn->login_flags)) { in iscsi_target_sk_data_ready()
398 pr_debug("Got LOGIN_FLAGS_READY=0, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
401 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_data_ready()
403 pr_debug("Got LOGIN_FLAGS_CLOSED=1, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
406 if (test_and_set_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags)) { in iscsi_target_sk_data_ready()
408 pr_debug("Got LOGIN_FLAGS_READ_ACTIVE=1, conn: %p >>>>\n", conn); in iscsi_target_sk_data_ready()
409 if (iscsi_target_sk_data_ready == conn->orig_data_ready) in iscsi_target_sk_data_ready()
411 conn->orig_data_ready(sk); in iscsi_target_sk_data_ready()
415 rc = schedule_delayed_work(&conn->login_work, 0); in iscsi_target_sk_data_ready()
425 static void iscsi_target_set_sock_callbacks(struct iscsit_conn *conn) in iscsi_target_set_sock_callbacks() argument
429 if (!conn->sock) in iscsi_target_set_sock_callbacks()
432 sk = conn->sock->sk; in iscsi_target_set_sock_callbacks()
433 pr_debug("Entering iscsi_target_set_sock_callbacks: conn: %p\n", conn); in iscsi_target_set_sock_callbacks()
436 sk->sk_user_data = conn; in iscsi_target_set_sock_callbacks()
437 conn->orig_data_ready = sk->sk_data_ready; in iscsi_target_set_sock_callbacks()
438 conn->orig_state_change = sk->sk_state_change; in iscsi_target_set_sock_callbacks()
447 static void iscsi_target_restore_sock_callbacks(struct iscsit_conn *conn) in iscsi_target_restore_sock_callbacks() argument
451 if (!conn->sock) in iscsi_target_restore_sock_callbacks()
454 sk = conn->sock->sk; in iscsi_target_restore_sock_callbacks()
455 pr_debug("Entering iscsi_target_restore_sock_callbacks: conn: %p\n", conn); in iscsi_target_restore_sock_callbacks()
463 sk->sk_data_ready = conn->orig_data_ready; in iscsi_target_restore_sock_callbacks()
464 sk->sk_state_change = conn->orig_state_change; in iscsi_target_restore_sock_callbacks()
483 static bool iscsi_target_sk_check_close(struct iscsit_conn *conn) in iscsi_target_sk_check_close() argument
487 if (conn->sock) { in iscsi_target_sk_check_close()
488 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_close()
492 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)); in iscsi_target_sk_check_close()
498 static bool iscsi_target_sk_check_flag(struct iscsit_conn *conn, unsigned int flag) in iscsi_target_sk_check_flag() argument
502 if (conn->sock) { in iscsi_target_sk_check_flag()
503 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_flag()
506 state = test_bit(flag, &conn->login_flags); in iscsi_target_sk_check_flag()
512 static bool iscsi_target_sk_check_and_clear(struct iscsit_conn *conn, unsigned int flag) in iscsi_target_sk_check_and_clear() argument
516 if (conn->sock) { in iscsi_target_sk_check_and_clear()
517 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_and_clear()
521 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)); in iscsi_target_sk_check_and_clear()
523 clear_bit(flag, &conn->login_flags); in iscsi_target_sk_check_and_clear()
529 static void iscsi_target_login_drop(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_login_drop() argument
533 iscsi_remove_failed_auth_entry(conn); in iscsi_target_login_drop()
534 iscsi_target_nego_release(conn); in iscsi_target_login_drop()
535 iscsi_target_login_sess_out(conn, zero_tsih, true); in iscsi_target_login_drop()
540 struct iscsit_conn *conn = container_of(work, in iscsi_target_do_login_rx() local
542 struct iscsi_login *login = conn->login; in iscsi_target_do_login_rx()
544 struct iscsi_portal_group *tpg = conn->tpg; in iscsi_target_do_login_rx()
545 struct iscsi_tpg_np *tpg_np = conn->tpg_np; in iscsi_target_do_login_rx()
549 pr_debug("entering iscsi_target_do_login_rx, conn: %p, %s:%d\n", in iscsi_target_do_login_rx()
550 conn, current->comm, current->pid); in iscsi_target_do_login_rx()
552 spin_lock(&conn->login_worker_lock); in iscsi_target_do_login_rx()
553 set_bit(LOGIN_FLAGS_WORKER_RUNNING, &conn->login_flags); in iscsi_target_do_login_rx()
554 spin_unlock(&conn->login_worker_lock); in iscsi_target_do_login_rx()
562 * cancel_delayed_work_sync(&conn->login_work), and cleanup the in iscsi_target_do_login_rx()
565 if (iscsi_target_sk_check_flag(conn, LOGIN_FLAGS_INITIAL_PDU)) { in iscsi_target_do_login_rx()
566 schedule_delayed_work(&conn->login_work, msecs_to_jiffies(10)); in iscsi_target_do_login_rx()
579 if (iscsi_target_sk_check_close(conn)) { in iscsi_target_do_login_rx()
585 rc = iscsit_set_login_timer_kworker(conn, current); in iscsi_target_do_login_rx()
592 rc = conn->conn_transport->iscsit_get_login_rx(conn, login); in iscsi_target_do_login_rx()
599 conn, current->comm, current->pid); in iscsi_target_do_login_rx()
612 if (conn->sock) { in iscsi_target_do_login_rx()
613 struct sock *sk = conn->sock->sk; in iscsi_target_do_login_rx()
616 if (!test_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags)) { in iscsi_target_do_login_rx()
617 clear_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags); in iscsi_target_do_login_rx()
618 set_bit(LOGIN_FLAGS_WRITE_ACTIVE, &conn->login_flags); in iscsi_target_do_login_rx()
623 rc = iscsi_target_do_login(conn, login); in iscsi_target_do_login_rx()
627 if (iscsi_target_sk_check_and_clear(conn, in iscsi_target_do_login_rx()
636 rc = iscsit_set_login_timer_kworker(conn, NULL); in iscsi_target_do_login_rx()
640 iscsit_stop_login_timer(conn); in iscsi_target_do_login_rx()
641 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
642 iscsi_target_nego_release(conn); in iscsi_target_do_login_rx()
643 iscsi_post_login_handler(np, conn, zero_tsih); in iscsi_target_do_login_rx()
649 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_do_login_rx()
650 iscsit_stop_login_timer(conn); in iscsi_target_do_login_rx()
651 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
652 iscsi_target_login_drop(conn, login); in iscsi_target_do_login_rx()
658 struct iscsit_conn *conn; in iscsi_target_sk_state_change() local
665 conn = sk->sk_user_data; in iscsi_target_sk_state_change()
666 if (!conn) { in iscsi_target_sk_state_change()
670 orig_state_change = conn->orig_state_change; in iscsi_target_sk_state_change()
672 if (!test_bit(LOGIN_FLAGS_READY, &conn->login_flags)) { in iscsi_target_sk_state_change()
673 pr_debug("Got LOGIN_FLAGS_READY=0 sk_state_change conn: %p\n", in iscsi_target_sk_state_change()
674 conn); in iscsi_target_sk_state_change()
682 if (test_bit(LOGIN_FLAGS_READ_ACTIVE, &conn->login_flags) || in iscsi_target_sk_state_change()
683 test_bit(LOGIN_FLAGS_WRITE_ACTIVE, &conn->login_flags)) { in iscsi_target_sk_state_change()
685 " sk_state_change conn: %p\n", conn); in iscsi_target_sk_state_change()
687 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags); in iscsi_target_sk_state_change()
692 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_state_change()
693 pr_debug("Got LOGIN_FLAGS_CLOSED=1 sk_state_change conn: %p\n", in iscsi_target_sk_state_change()
694 conn); in iscsi_target_sk_state_change()
701 * but only queue conn->login_work -> iscsi_target_do_login_rx() in iscsi_target_sk_state_change()
716 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags); in iscsi_target_sk_state_change()
717 state = test_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags); in iscsi_target_sk_state_change()
723 schedule_delayed_work(&conn->login_work, 0); in iscsi_target_sk_state_change()
737 struct iscsit_conn *conn, in iscsi_target_check_for_existing_instances() argument
746 return iscsi_check_for_session_reinstatement(conn); in iscsi_target_check_for_existing_instances()
748 return iscsi_login_post_auth_non_zero_tsih(conn, login->cid, in iscsi_target_check_for_existing_instances()
753 struct iscsit_conn *conn, in iscsi_target_do_authentication() argument
766 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_do_authentication()
771 conn, in iscsi_target_do_authentication()
793 conn, login); in iscsi_target_do_authentication()
797 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_do_authentication()
803 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_authentication()
811 bool iscsi_conn_auth_required(struct iscsit_conn *conn) in iscsi_conn_auth_required() argument
816 if (conn->sess->sess_ops->SessionType) { in iscsi_conn_auth_required()
820 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
825 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_conn_auth_required()
834 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
842 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
848 struct iscsit_conn *conn, in iscsi_target_handle_csg_zero() argument
861 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_handle_csg_zero()
870 conn); in iscsi_target_handle_csg_zero()
879 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_zero()
888 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_zero()
894 if (iscsi_target_check_first_request(conn, login) < 0) in iscsi_target_handle_csg_zero()
902 conn->param_list, in iscsi_target_handle_csg_zero()
903 conn->tpg->tpg_attrib.login_keys_workaround); in iscsi_target_handle_csg_zero()
907 if (!iscsi_check_negotiated_keys(conn->param_list)) { in iscsi_target_handle_csg_zero()
908 bool auth_required = iscsi_conn_auth_required(conn); in iscsi_target_handle_csg_zero()
915 iscsit_tx_login_rsp(conn, in iscsi_target_handle_csg_zero()
939 return iscsi_target_do_authentication(conn, login); in iscsi_target_handle_csg_zero()
942 static bool iscsi_conn_authenticated(struct iscsit_conn *conn, in iscsi_conn_authenticated() argument
945 if (!iscsi_conn_auth_required(conn)) in iscsi_conn_authenticated()
954 static int iscsi_target_handle_csg_one(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_handle_csg_one() argument
970 conn); in iscsi_target_handle_csg_one()
972 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
978 if (iscsi_target_check_first_request(conn, login) < 0) in iscsi_target_handle_csg_one()
981 if (iscsi_target_check_for_existing_instances(conn, login) < 0) in iscsi_target_handle_csg_one()
989 conn->param_list, in iscsi_target_handle_csg_one()
990 conn->tpg->tpg_attrib.login_keys_workaround); in iscsi_target_handle_csg_one()
992 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
997 if (!iscsi_conn_authenticated(conn, login)) { in iscsi_target_handle_csg_one()
1001 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_handle_csg_one()
1006 if (!iscsi_check_negotiated_keys(conn->param_list)) in iscsi_target_handle_csg_one()
1022 static int iscsi_target_do_login(struct iscsit_conn *conn, struct iscsi_login *login) in iscsi_target_do_login() argument
1034 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_do_login()
1042 if (iscsi_target_handle_csg_zero(conn, login) < 0) in iscsi_target_do_login()
1047 if (iscsi_target_handle_csg_one(conn, login) < 0) in iscsi_target_do_login()
1056 if (iscsi_target_sk_check_close(conn)) in iscsi_target_do_login()
1059 login->tsih = conn->sess->tsih; in iscsi_target_do_login()
1061 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_do_login()
1062 if (iscsi_target_do_tx_login_io(conn, in iscsi_target_do_login()
1075 if (iscsi_target_do_tx_login_io(conn, login) < 0) in iscsi_target_do_login()
1108 struct iscsit_conn *conn, in iscsi_target_locate_portal() argument
1113 struct iscsit_session *sess = conn->sess; in iscsi_target_locate_portal()
1121 INIT_DELAYED_WORK(&conn->login_work, iscsi_target_do_login_rx); in iscsi_target_locate_portal()
1122 iscsi_target_set_sock_callbacks(conn); in iscsi_target_locate_portal()
1125 conn->tpg = NULL; in iscsi_target_locate_portal()
1164 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1182 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1200 if (iscsi_login_setup_crypto(conn) < 0) { in iscsi_target_locate_portal()
1209 conn->tpg = iscsit_global->discovery_tpg; in iscsi_target_locate_portal()
1210 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1211 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1213 conn->tpg = NULL; in iscsi_target_locate_portal()
1226 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1239 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1249 conn->tpg = iscsit_get_tpg_from_np(tiqn, np, &tpg_np); in iscsi_target_locate_portal()
1250 if (!conn->tpg) { in iscsi_target_locate_portal()
1254 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1259 conn->tpg_np = tpg_np; in iscsi_target_locate_portal()
1260 pr_debug("Located Portal Group Object: %hu\n", conn->tpg->tpgt); in iscsi_target_locate_portal()
1264 if (iscsi_login_setup_crypto(conn) < 0) { in iscsi_target_locate_portal()
1268 conn->tpg = NULL; in iscsi_target_locate_portal()
1276 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1279 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1281 conn->tpg = NULL; in iscsi_target_locate_portal()
1287 * conn->sess->node_acl will be set when the referenced in iscsi_target_locate_portal()
1305 &conn->tpg->tpg_se_tpg, i_buf); in iscsi_target_locate_portal()
1309 i_buf, conn->tpg->tpgt); in iscsi_target_locate_portal()
1310 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, in iscsi_target_locate_portal()
1328 tag_size = sizeof(struct iscsit_cmd) + conn->conn_transport->priv_size; in iscsi_target_locate_portal()
1332 iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, in iscsi_target_locate_portal()
1343 struct iscsit_conn *conn) in iscsi_target_start_negotiation() argument
1347 if (conn->sock) { in iscsi_target_start_negotiation()
1348 struct sock *sk = conn->sock->sk; in iscsi_target_start_negotiation()
1351 set_bit(LOGIN_FLAGS_READY, &conn->login_flags); in iscsi_target_start_negotiation()
1352 set_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags); in iscsi_target_start_negotiation()
1364 ret = iscsi_target_do_login(conn, login); in iscsi_target_start_negotiation()
1366 spin_lock(&conn->login_worker_lock); in iscsi_target_start_negotiation()
1368 if (iscsi_target_sk_check_and_clear(conn, LOGIN_FLAGS_INITIAL_PDU)) in iscsi_target_start_negotiation()
1370 else if (!test_bit(LOGIN_FLAGS_WORKER_RUNNING, &conn->login_flags)) { in iscsi_target_start_negotiation()
1371 if (iscsit_set_login_timer_kworker(conn, NULL) < 0) { in iscsi_target_start_negotiation()
1376 schedule_delayed_work(&conn->login_work, 0); in iscsi_target_start_negotiation()
1380 spin_unlock(&conn->login_worker_lock); in iscsi_target_start_negotiation()
1384 iscsi_target_restore_sock_callbacks(conn); in iscsi_target_start_negotiation()
1385 iscsi_remove_failed_auth_entry(conn); in iscsi_target_start_negotiation()
1388 iscsit_stop_login_timer(conn); in iscsi_target_start_negotiation()
1389 cancel_delayed_work_sync(&conn->login_work); in iscsi_target_start_negotiation()
1390 iscsi_target_nego_release(conn); in iscsi_target_start_negotiation()
1396 void iscsi_target_nego_release(struct iscsit_conn *conn) in iscsi_target_nego_release() argument
1398 struct iscsi_login *login = conn->conn_login; in iscsi_target_nego_release()
1407 conn->conn_login = NULL; in iscsi_target_nego_release()