Lines Matching refs:conn

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