Lines Matching +full:double +full:- +full:phase

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * (c) Copyright 2007-2013 Datera, Inc.
7 * Author: Nicholas A. Bellinger <nab@linux-iscsi.org>
52 return -1; in strlen_semi()
66 return -EINVAL; in extract_param()
70 return -ENOENT; in extract_param()
74 return -EINVAL; in extract_param()
88 return -EINVAL; in extract_param()
93 return -EINVAL; in extract_param()
107 if (conn->sess->sess_ops->SessionType) in iscsi_get_node_auth()
108 return &iscsit_global->discovery_acl.node_auth; in iscsi_get_node_auth()
110 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_get_node_auth()
116 if (se_nacl->dynamic_node_acl) { in iscsi_get_node_auth()
117 tpg = to_iscsi_tpg(se_nacl->se_tpg); in iscsi_get_node_auth()
118 return &tpg->tpg_demo_auth; in iscsi_get_node_auth()
123 return &nacl->node_auth; in iscsi_get_node_auth()
138 return -1; 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()
156 kfree(conn->auth_protocol); in iscsi_remove_failed_auth_entry()
167 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_check_login_request()
168 payload_length = ntoh24(login_req->dlength); in iscsi_target_check_login_request()
170 switch (login_req->opcode & ISCSI_OPCODE_MASK) { in iscsi_target_check_login_request()
175 login_req->opcode & ISCSI_OPCODE_MASK); in iscsi_target_check_login_request()
178 return -1; in iscsi_target_check_login_request()
181 if ((login_req->flags & ISCSI_FLAG_LOGIN_CONTINUE) && in iscsi_target_check_login_request()
182 (login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT)) { in iscsi_target_check_login_request()
187 return -1; in iscsi_target_check_login_request()
190 req_csg = ISCSI_LOGIN_CURRENT_STAGE(login_req->flags); in iscsi_target_check_login_request()
191 req_nsg = ISCSI_LOGIN_NEXT_STAGE(login_req->flags); in iscsi_target_check_login_request()
193 if (req_csg != login->current_stage) { in iscsi_target_check_login_request()
195 " from %d to %d, login failed.\n", login->current_stage, in iscsi_target_check_login_request()
199 return -1; in iscsi_target_check_login_request()
203 ((login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT) && in iscsi_target_check_login_request()
205 pr_err("Illegal login_req->flags Combination, CSG: %d," in iscsi_target_check_login_request()
207 req_nsg, (login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT)); in iscsi_target_check_login_request()
210 return -1; in iscsi_target_check_login_request()
213 if ((login_req->max_version != login->version_max) || in iscsi_target_check_login_request()
214 (login_req->min_version != login->version_min)) { in iscsi_target_check_login_request()
217 login_req->max_version, login_req->min_version); in iscsi_target_check_login_request()
220 return -1; in iscsi_target_check_login_request()
223 if (memcmp(login_req->isid, login->isid, 6) != 0) { in iscsi_target_check_login_request()
228 return -1; in iscsi_target_check_login_request()
231 if (login_req->itt != login->init_task_tag) { in iscsi_target_check_login_request()
233 " 0x%08x, protocol error.\n", login_req->itt); in iscsi_target_check_login_request()
236 return -1; in iscsi_target_check_login_request()
243 return -1; in iscsi_target_check_login_request()
257 login->first_request = 0; in iscsi_target_check_first_request()
259 list_for_each_entry(param, &conn->param_list->param_list, p_list) { in iscsi_target_check_first_request()
260 if (!strncmp(param->name, SESSIONTYPE, 11)) { in iscsi_target_check_first_request()
266 return -1; in iscsi_target_check_first_request()
268 if (!strncmp(param->value, DISCOVERY, 9)) in iscsi_target_check_first_request()
272 if (!strncmp(param->name, INITIATORNAME, 13)) { in iscsi_target_check_first_request()
274 if (!login->leading_connection) in iscsi_target_check_first_request()
281 return -1; in iscsi_target_check_first_request()
285 * For non-leading connections, double check that the in iscsi_target_check_first_request()
289 if (!login->leading_connection) { in iscsi_target_check_first_request()
290 se_nacl = conn->sess->se_sess->se_node_acl; in iscsi_target_check_first_request()
297 return -1; in iscsi_target_check_first_request()
300 if (strcmp(param->value, in iscsi_target_check_first_request()
301 se_nacl->initiatorname)) { in iscsi_target_check_first_request()
305 param->value); in iscsi_target_check_first_request()
309 return -1; in iscsi_target_check_first_request()
323 login_rsp = (struct iscsi_login_rsp *) login->rsp; in iscsi_target_do_tx_login_io()
325 login_rsp->opcode = ISCSI_OP_LOGIN_RSP; in iscsi_target_do_tx_login_io()
326 hton24(login_rsp->dlength, login->rsp_length); in iscsi_target_do_tx_login_io()
327 memcpy(login_rsp->isid, login->isid, 6); in iscsi_target_do_tx_login_io()
328 login_rsp->tsih = cpu_to_be16(login->tsih); in iscsi_target_do_tx_login_io()
329 login_rsp->itt = login->init_task_tag; in iscsi_target_do_tx_login_io()
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()
336 " %u\n", login_rsp->flags, (__force u32)login_rsp->itt, in iscsi_target_do_tx_login_io()
337 ntohl(login_rsp->exp_cmdsn), ntohl(login_rsp->max_cmdsn), in iscsi_target_do_tx_login_io()
338 ntohl(login_rsp->statsn), login->rsp_length); in iscsi_target_do_tx_login_io()
340 padding = ((-login->rsp_length) & 3); in iscsi_target_do_tx_login_io()
343 * bit for full-feature-phase, go ahead and start up TX/RX threads in iscsi_target_do_tx_login_io()
347 if (login->login_complete) { in iscsi_target_do_tx_login_io()
352 return -1; 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()
357 login->rsp_length + padding) < 0) in iscsi_target_do_tx_login_io()
360 login->rsp_length = 0; in iscsi_target_do_tx_login_io()
365 if (login->login_complete) { 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()
375 spin_lock(&iscsit_global->ts_bitmap_lock); 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()
378 spin_unlock(&iscsit_global->ts_bitmap_lock); in iscsi_target_do_tx_login_io()
380 return -1; in iscsi_target_do_tx_login_io()
385 struct iscsit_conn *conn = sk->sk_user_data; in iscsi_target_sk_data_ready()
391 write_lock_bh(&sk->sk_callback_lock); in iscsi_target_sk_data_ready()
392 if (!sk->sk_user_data) { in iscsi_target_sk_data_ready()
393 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_data_ready()
396 if (!test_bit(LOGIN_FLAGS_READY, &conn->login_flags)) { in iscsi_target_sk_data_ready()
397 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_data_ready()
401 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_data_ready()
402 write_unlock_bh(&sk->sk_callback_lock); 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()
407 write_unlock_bh(&sk->sk_callback_lock); 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()
420 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_data_ready()
429 if (!conn->sock) in iscsi_target_set_sock_callbacks()
432 sk = conn->sock->sk; in iscsi_target_set_sock_callbacks()
435 write_lock_bh(&sk->sk_callback_lock); 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()
439 sk->sk_data_ready = iscsi_target_sk_data_ready; in iscsi_target_set_sock_callbacks()
440 sk->sk_state_change = iscsi_target_sk_state_change; in iscsi_target_set_sock_callbacks()
441 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_set_sock_callbacks()
443 sk->sk_sndtimeo = TA_LOGIN_TIMEOUT * HZ; in iscsi_target_set_sock_callbacks()
444 sk->sk_rcvtimeo = TA_LOGIN_TIMEOUT * HZ; in iscsi_target_set_sock_callbacks()
451 if (!conn->sock) in iscsi_target_restore_sock_callbacks()
454 sk = conn->sock->sk; in iscsi_target_restore_sock_callbacks()
457 write_lock_bh(&sk->sk_callback_lock); in iscsi_target_restore_sock_callbacks()
458 if (!sk->sk_user_data) { in iscsi_target_restore_sock_callbacks()
459 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_restore_sock_callbacks()
462 sk->sk_user_data = NULL; 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()
465 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_restore_sock_callbacks()
467 sk->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT; in iscsi_target_restore_sock_callbacks()
468 sk->sk_rcvtimeo = MAX_SCHEDULE_TIMEOUT; in iscsi_target_restore_sock_callbacks()
475 if (sk->sk_state == TCP_CLOSE_WAIT || sk->sk_state == TCP_CLOSE) { in __iscsi_target_sk_check_close()
487 if (conn->sock) { in iscsi_target_sk_check_close()
488 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_close()
490 read_lock_bh(&sk->sk_callback_lock); in iscsi_target_sk_check_close()
492 test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)); in iscsi_target_sk_check_close()
493 read_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_check_close()
502 if (conn->sock) { in iscsi_target_sk_check_flag()
503 struct sock *sk = conn->sock->sk; in iscsi_target_sk_check_flag()
505 read_lock_bh(&sk->sk_callback_lock); in iscsi_target_sk_check_flag()
506 state = test_bit(flag, &conn->login_flags); in iscsi_target_sk_check_flag()
507 read_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_check_flag()
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()
519 write_lock_bh(&sk->sk_callback_lock); 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()
524 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_check_and_clear()
531 bool zero_tsih = login->zero_tsih; in iscsi_target_login_drop()
542 struct iscsi_login *login = conn->login; in iscsi_target_do_login_rx()
543 struct iscsi_np *np = login->np; 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()
546 int rc, zero_tsih = login->zero_tsih; 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()
556 * If iscsi_target_do_login_rx() has been invoked by ->sk_data_ready() in iscsi_target_do_login_rx()
562 * cancel_delayed_work_sync(&conn->login_work), and cleanup the in iscsi_target_do_login_rx()
566 schedule_delayed_work(&conn->login_work, msecs_to_jiffies(10)); in iscsi_target_do_login_rx()
570 spin_lock(&tpg->tpg_state_lock); in iscsi_target_do_login_rx()
571 state = (tpg->tpg_state == TPG_STATE_ACTIVE); in iscsi_target_do_login_rx()
572 spin_unlock(&tpg->tpg_state_lock); 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()
615 write_lock_bh(&sk->sk_callback_lock); 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()
620 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_do_login_rx()
641 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
651 cancel_delayed_work(&conn->login_work); in iscsi_target_do_login_rx()
664 write_lock_bh(&sk->sk_callback_lock); in iscsi_target_sk_state_change()
665 conn = sk->sk_user_data; in iscsi_target_sk_state_change()
667 write_unlock_bh(&sk->sk_callback_lock); 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()
675 write_unlock_bh(&sk->sk_callback_lock); 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()
687 set_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags); in iscsi_target_sk_state_change()
688 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_state_change()
692 if (test_bit(LOGIN_FLAGS_CLOSED, &conn->login_flags)) { in iscsi_target_sk_state_change()
695 write_unlock_bh(&sk->sk_callback_lock); 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()
718 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_state_change()
723 schedule_delayed_work(&conn->login_work, 0); in iscsi_target_sk_state_change()
726 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_sk_state_change()
740 if (login->checked_for_existing) in iscsi_target_check_for_existing_instances()
743 login->checked_for_existing = 1; in iscsi_target_check_for_existing_instances()
745 if (!login->tsih) 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()
749 login->initial_exp_statsn); in iscsi_target_check_for_existing_instances()
762 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_do_authentication()
763 login_rsp = (struct iscsi_login_rsp *) login->rsp; in iscsi_target_do_authentication()
764 payload_length = ntoh24(login_req->dlength); in iscsi_target_do_authentication()
766 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_do_authentication()
768 return -1; in iscsi_target_do_authentication()
772 login->req_buf, in iscsi_target_do_authentication()
773 login->rsp_buf, in iscsi_target_do_authentication()
775 &login->rsp_length, in iscsi_target_do_authentication()
776 param->value); in iscsi_target_do_authentication()
785 login->auth_complete = 1; in iscsi_target_do_authentication()
786 if ((login_req->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE1) && in iscsi_target_do_authentication()
787 (login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT)) { in iscsi_target_do_authentication()
788 login_rsp->flags |= (ISCSI_FLAG_LOGIN_NEXT_STAGE1 | in iscsi_target_do_authentication()
790 login->current_stage = 1; in iscsi_target_do_authentication()
799 return -1; in iscsi_target_do_authentication()
805 return -1; in iscsi_target_do_authentication()
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()
831 if (se_nacl->dynamic_node_acl) { in iscsi_conn_auth_required()
833 se_nacl->initiatorname); in iscsi_conn_auth_required()
834 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
838 se_nacl->initiatorname); in iscsi_conn_auth_required()
841 if (nacl->node_attrib.authentication == NA_AUTHENTICATION_INHERITED) in iscsi_conn_auth_required()
842 return conn->tpg->tpg_attrib.authentication; in iscsi_conn_auth_required()
844 return nacl->node_attrib.authentication; in iscsi_conn_auth_required()
857 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_handle_csg_zero()
858 login_rsp = (struct iscsi_login_rsp *) login->rsp; in iscsi_target_handle_csg_zero()
859 payload_length = ntoh24(login_req->dlength); in iscsi_target_handle_csg_zero()
861 param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list); in iscsi_target_handle_csg_zero()
863 return -1; in iscsi_target_handle_csg_zero()
868 login->req_buf, in iscsi_target_handle_csg_zero()
872 return -1; in iscsi_target_handle_csg_zero()
875 if (login->auth_complete) { in iscsi_target_handle_csg_zero()
878 " sending %s keys.\n", param->value); in iscsi_target_handle_csg_zero()
881 return -1; in iscsi_target_handle_csg_zero()
890 return -1; in iscsi_target_handle_csg_zero()
893 if (login->first_request) in iscsi_target_handle_csg_zero()
895 return -1; in iscsi_target_handle_csg_zero()
900 login->rsp_buf, in iscsi_target_handle_csg_zero()
901 &login->rsp_length, 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()
905 return -1; in iscsi_target_handle_csg_zero()
907 if (!iscsi_check_negotiated_keys(conn->param_list)) { in iscsi_target_handle_csg_zero()
911 if (!strncmp(param->value, NONE, 4)) { in iscsi_target_handle_csg_zero()
918 return -1; in iscsi_target_handle_csg_zero()
921 if (!login->auth_complete) in iscsi_target_handle_csg_zero()
924 if (strncmp(param->value, NONE, 4) && in iscsi_target_handle_csg_zero()
925 !login->auth_complete) in iscsi_target_handle_csg_zero()
929 if ((login_req->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE1) && in iscsi_target_handle_csg_zero()
930 (login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT)) { in iscsi_target_handle_csg_zero()
931 login_rsp->flags |= ISCSI_FLAG_LOGIN_NEXT_STAGE1 | in iscsi_target_handle_csg_zero()
933 login->current_stage = 1; in iscsi_target_handle_csg_zero()
948 if (login->auth_complete) in iscsi_conn_authenticated()
961 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_handle_csg_one()
962 login_rsp = (struct iscsi_login_rsp *) login->rsp; in iscsi_target_handle_csg_one()
963 payload_length = ntoh24(login_req->dlength); in iscsi_target_handle_csg_one()
968 login->req_buf, in iscsi_target_handle_csg_one()
974 return -1; in iscsi_target_handle_csg_one()
977 if (login->first_request) in iscsi_target_handle_csg_one()
979 return -1; in iscsi_target_handle_csg_one()
982 return -1; in iscsi_target_handle_csg_one()
987 login->rsp_buf, in iscsi_target_handle_csg_one()
988 &login->rsp_length, 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()
994 return -1; in iscsi_target_handle_csg_one()
1003 return -1; in iscsi_target_handle_csg_one()
1006 if (!iscsi_check_negotiated_keys(conn->param_list)) in iscsi_target_handle_csg_one()
1007 if ((login_req->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE3) && in iscsi_target_handle_csg_one()
1008 (login_req->flags & ISCSI_FLAG_LOGIN_TRANSIT)) in iscsi_target_handle_csg_one()
1009 login_rsp->flags |= ISCSI_FLAG_LOGIN_NEXT_STAGE3 | in iscsi_target_handle_csg_one()
1019 * -1 = Login failed
1028 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_do_login()
1029 login_rsp = (struct iscsi_login_rsp *) login->rsp; in iscsi_target_do_login()
1036 return -1; in iscsi_target_do_login()
1039 switch (ISCSI_LOGIN_CURRENT_STAGE(login_req->flags)) { in iscsi_target_do_login()
1041 login_rsp->flags &= ~ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK; in iscsi_target_do_login()
1043 return -1; in iscsi_target_do_login()
1046 login_rsp->flags |= ISCSI_FLAG_LOGIN_CURRENT_STAGE1; in iscsi_target_do_login()
1048 return -1; in iscsi_target_do_login()
1049 if (login_rsp->flags & ISCSI_FLAG_LOGIN_TRANSIT) { in iscsi_target_do_login()
1054 * transitioning to full feature phase operation. in iscsi_target_do_login()
1057 return -1; in iscsi_target_do_login()
1059 login->tsih = conn->sess->tsih; in iscsi_target_do_login()
1060 login->login_complete = 1; in iscsi_target_do_login()
1064 return -1; in iscsi_target_do_login()
1071 ISCSI_LOGIN_CURRENT_STAGE(login_req->flags)); in iscsi_target_do_login()
1076 return -1; in iscsi_target_do_login()
1078 if (login_rsp->flags & ISCSI_FLAG_LOGIN_TRANSIT) { in iscsi_target_do_login()
1079 login_rsp->flags &= ~ISCSI_FLAG_LOGIN_TRANSIT; in iscsi_target_do_login()
1080 login_rsp->flags &= ~ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK; in iscsi_target_do_login()
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()
1124 login->np = np; in iscsi_target_locate_portal()
1125 conn->tpg = NULL; in iscsi_target_locate_portal()
1127 login_req = (struct iscsi_login_req *) login->req; in iscsi_target_locate_portal()
1128 payload_length = ntoh24(login_req->dlength); in iscsi_target_locate_portal()
1130 tmpbuf = kmemdup_nul(login->req_buf, payload_length, GFP_KERNEL); in iscsi_target_locate_portal()
1133 return -1; in iscsi_target_locate_portal()
1141 * the first login request in order to progress with the login phase. in iscsi_target_locate_portal()
1145 ret = -1; in iscsi_target_locate_portal()
1159 * See 5.3. Login Phase. in iscsi_target_locate_portal()
1166 ret = -1; in iscsi_target_locate_portal()
1171 * RFC-3720 3.2.6.1. section c) that says that iSCSI IQNs in iscsi_target_locate_portal()
1177 if (!login->leading_connection) in iscsi_target_locate_portal()
1184 ret = -1; in iscsi_target_locate_portal()
1193 if (!login->leading_connection) in iscsi_target_locate_portal()
1196 sess->sess_ops->SessionType = 1; in iscsi_target_locate_portal()
1202 conn->tpg = iscsit_global->discovery_tpg; in iscsi_target_locate_portal()
1203 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1206 conn->tpg = NULL; in iscsi_target_locate_portal()
1207 ret = -1; in iscsi_target_locate_portal()
1221 ret = -1; in iscsi_target_locate_portal()
1234 ret = -1; in iscsi_target_locate_portal()
1237 pr_debug("Located Storage Object: %s\n", tiqn->tiqn); in iscsi_target_locate_portal()
1242 conn->tpg = iscsit_get_tpg_from_np(tiqn, np, &tpg_np); in iscsi_target_locate_portal()
1243 if (!conn->tpg) { in iscsi_target_locate_portal()
1245 " on %s\n", tiqn->tiqn); in iscsi_target_locate_portal()
1249 ret = -1; in iscsi_target_locate_portal()
1252 conn->tpg_np = tpg_np; in iscsi_target_locate_portal()
1253 pr_debug("Located Portal Group Object: %hu\n", conn->tpg->tpgt); in iscsi_target_locate_portal()
1259 if (iscsit_access_np(np, conn->tpg) < 0) { in iscsi_target_locate_portal()
1260 kref_put(&tpg_np->tpg_np_kref, iscsit_login_kref_put); in iscsi_target_locate_portal()
1264 conn->tpg = NULL; in iscsi_target_locate_portal()
1265 ret = -1; in iscsi_target_locate_portal()
1270 * conn->sess->node_acl will be set when the referenced in iscsi_target_locate_portal()
1274 if (!login->leading_connection) { in iscsi_target_locate_portal()
1282 sess->sess_ops->SessionType = 0; in iscsi_target_locate_portal()
1287 sess->se_sess->se_node_acl = core_tpg_check_initiator_node_acl( in iscsi_target_locate_portal()
1288 &conn->tpg->tpg_se_tpg, i_buf); in iscsi_target_locate_portal()
1289 if (!sess->se_sess->se_node_acl) { in iscsi_target_locate_portal()
1292 i_buf, conn->tpg->tpgt); in iscsi_target_locate_portal()
1295 ret = -1; in iscsi_target_locate_portal()
1298 se_nacl = sess->se_sess->se_node_acl; in iscsi_target_locate_portal()
1299 queue_depth = se_nacl->queue_depth; in iscsi_target_locate_portal()
1301 * Setup pre-allocated tags based upon allowed per NodeACL CmdSN in iscsi_target_locate_portal()
1306 * in per-cpu-ida tag allocation logic + small queue_depth. in iscsi_target_locate_portal()
1311 tag_size = sizeof(struct iscsit_cmd) + conn->conn_transport->priv_size; in iscsi_target_locate_portal()
1313 ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size); in iscsi_target_locate_portal()
1317 ret = -1; in iscsi_target_locate_portal()
1330 if (conn->sock) { in iscsi_target_start_negotiation()
1331 struct sock *sk = conn->sock->sk; in iscsi_target_start_negotiation()
1333 write_lock_bh(&sk->sk_callback_lock); in iscsi_target_start_negotiation()
1334 set_bit(LOGIN_FLAGS_READY, &conn->login_flags); in iscsi_target_start_negotiation()
1335 set_bit(LOGIN_FLAGS_INITIAL_PDU, &conn->login_flags); in iscsi_target_start_negotiation()
1336 write_unlock_bh(&sk->sk_callback_lock); in iscsi_target_start_negotiation()
1349 spin_lock(&conn->login_worker_lock); in iscsi_target_start_negotiation()
1352 ret = -1; in iscsi_target_start_negotiation()
1353 else if (!test_bit(LOGIN_FLAGS_WORKER_RUNNING, &conn->login_flags)) { in iscsi_target_start_negotiation()
1359 schedule_delayed_work(&conn->login_work, 0); in iscsi_target_start_negotiation()
1363 spin_unlock(&conn->login_worker_lock); in iscsi_target_start_negotiation()
1372 cancel_delayed_work_sync(&conn->login_work); in iscsi_target_start_negotiation()
1381 struct iscsi_login *login = conn->conn_login; in iscsi_target_nego_release()
1386 kfree(login->req_buf); in iscsi_target_nego_release()
1387 kfree(login->rsp_buf); in iscsi_target_nego_release()
1390 conn->conn_login = NULL; in iscsi_target_nego_release()