Lines Matching refs:session

90 	struct Scsi_Host *shost = conn->session->host;  in iscsi_conn_queue_work()
98 static void __iscsi_update_cmdsn(struct iscsi_session *session, in __iscsi_update_cmdsn() argument
108 if (exp_cmdsn != session->exp_cmdsn && in __iscsi_update_cmdsn()
109 !iscsi_sna_lt(exp_cmdsn, session->exp_cmdsn)) in __iscsi_update_cmdsn()
110 session->exp_cmdsn = exp_cmdsn; in __iscsi_update_cmdsn()
112 if (max_cmdsn != session->max_cmdsn && in __iscsi_update_cmdsn()
113 !iscsi_sna_lt(max_cmdsn, session->max_cmdsn)) in __iscsi_update_cmdsn()
114 session->max_cmdsn = max_cmdsn; in __iscsi_update_cmdsn()
117 void iscsi_update_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr) in iscsi_update_cmdsn() argument
119 __iscsi_update_cmdsn(session, be32_to_cpu(hdr->exp_cmdsn), in iscsi_update_cmdsn()
212 ISCSI_DBG_SESSION(task->conn->session, in iscsi_prep_ecdb_ahs()
238 ISCSI_DBG_SESSION(task->conn->session, in iscsi_prep_bidi_ahs()
297 if (conn->session->fast_abort) { in iscsi_check_tmf_restrictions()
315 ISCSI_DBG_SESSION(conn->session, in iscsi_check_tmf_restrictions()
338 struct iscsi_session *session = conn->session; in iscsi_prep_scsi_cmd_pdu() local
349 if (conn->session->tt->alloc_pdu) { in iscsi_prep_scsi_cmd_pdu()
350 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD); in iscsi_prep_scsi_cmd_pdu()
358 if (session->tt->parse_pdu_itt) in iscsi_prep_scsi_cmd_pdu()
362 task->conn->session->age); in iscsi_prep_scsi_cmd_pdu()
416 if (session->imm_data_en) { in iscsi_prep_scsi_cmd_pdu()
417 if (transfer_length >= session->first_burst) in iscsi_prep_scsi_cmd_pdu()
418 task->imm_count = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
427 if (!session->initial_r2t_en) { in iscsi_prep_scsi_cmd_pdu()
428 r2t->data_length = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
455 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_scsi_cmd_pdu()
457 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_scsi_cmd_pdu()
461 session->cmdsn++; in iscsi_prep_scsi_cmd_pdu()
464 ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x " in iscsi_prep_scsi_cmd_pdu()
471 session->cmdsn, in iscsi_prep_scsi_cmd_pdu()
472 session->max_cmdsn - session->exp_cmdsn + 1); in iscsi_prep_scsi_cmd_pdu()
487 struct iscsi_session *session = conn->session; in iscsi_free_task() local
491 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n", in iscsi_free_task()
494 session->tt->cleanup_task(task); in iscsi_free_task()
503 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*)); in iscsi_free_task()
532 struct iscsi_session *session = task->conn->session; in iscsi_put_task() local
535 spin_lock_bh(&session->back_lock); in iscsi_put_task()
537 spin_unlock_bh(&session->back_lock); in iscsi_put_task()
552 ISCSI_DBG_SESSION(conn->session, in iscsi_complete_task()
592 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt); in iscsi_complete_scsi_task()
595 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn); in iscsi_complete_scsi_task()
626 conn->session->queued_cmdsn--; in fail_scsi_task()
643 spin_lock_bh(&conn->session->back_lock); in fail_scsi_task()
645 spin_unlock_bh(&conn->session->back_lock); in fail_scsi_task()
651 struct iscsi_session *session = conn->session; in iscsi_prep_mgmt_task() local
656 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_prep_mgmt_task()
664 nop->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_mgmt_task()
676 session->queued_cmdsn++; in iscsi_prep_mgmt_task()
677 session->cmdsn++; in iscsi_prep_mgmt_task()
681 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_mgmt_task()
685 session->state = ISCSI_STATE_LOGGING_OUT; in iscsi_prep_mgmt_task()
688 ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x " in iscsi_prep_mgmt_task()
698 struct iscsi_session *session = conn->session; in __iscsi_conn_send_pdu() local
699 struct iscsi_host *ihost = shost_priv(session->host); in __iscsi_conn_send_pdu()
704 if (session->state == ISCSI_STATE_TERMINATE) in __iscsi_conn_send_pdu()
727 if (session->state != ISCSI_STATE_LOGGED_IN) in __iscsi_conn_send_pdu()
738 if (!kfifo_out(&session->cmdpool.queue, in __iscsi_conn_send_pdu()
759 if (conn->session->tt->alloc_pdu) { in __iscsi_conn_send_pdu()
760 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) { in __iscsi_conn_send_pdu()
772 if (session->tt->parse_pdu_itt) in __iscsi_conn_send_pdu()
776 task->conn->session->age); in __iscsi_conn_send_pdu()
783 if (session->tt->xmit_task(task)) in __iscsi_conn_send_pdu()
794 spin_lock_bh(&session->back_lock); in __iscsi_conn_send_pdu()
796 spin_unlock_bh(&session->back_lock); in __iscsi_conn_send_pdu()
804 struct iscsi_session *session = conn->session; in iscsi_conn_send_pdu() local
807 spin_lock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
810 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
831 struct iscsi_session *session = conn->session; in iscsi_scsi_cmd_rsp() local
834 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr); in iscsi_scsi_cmd_rsp()
848 BUG_ON(!session->tt->check_protection); in iscsi_scsi_cmd_rsp()
850 ascq = session->tt->check_protection(task, &sector); in iscsi_scsi_cmd_rsp()
886 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n", in iscsi_scsi_cmd_rsp()
916 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n", in iscsi_scsi_cmd_rsp()
938 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr); in iscsi_data_in_rsp()
953 ISCSI_DBG_SESSION(conn->session, "data in with status done " in iscsi_data_in_rsp()
1080 spin_unlock(&conn->session->back_lock); in iscsi_handle_reject()
1081 spin_lock(&conn->session->frwd_lock); in iscsi_handle_reject()
1084 spin_unlock(&conn->session->frwd_lock); in iscsi_handle_reject()
1085 spin_lock(&conn->session->back_lock); in iscsi_handle_reject()
1126 struct iscsi_session *session = conn->session; in iscsi_itt_to_task() local
1132 if (session->tt->parse_pdu_itt) in iscsi_itt_to_task()
1133 session->tt->parse_pdu_itt(conn, itt, &i, NULL); in iscsi_itt_to_task()
1136 if (i >= session->cmds_max) in iscsi_itt_to_task()
1139 return session->cmds[i]; in iscsi_itt_to_task()
1157 struct iscsi_session *session = conn->session; in __iscsi_complete_pdu() local
1172 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n", in __iscsi_complete_pdu()
1176 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1189 spin_unlock(&session->back_lock); in __iscsi_complete_pdu()
1190 spin_lock(&session->frwd_lock); in __iscsi_complete_pdu()
1192 spin_unlock(&session->frwd_lock); in __iscsi_complete_pdu()
1193 spin_lock(&session->back_lock); in __iscsi_complete_pdu()
1244 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1253 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1260 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1270 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1300 spin_lock(&conn->session->back_lock); in iscsi_complete_pdu()
1302 spin_unlock(&conn->session->back_lock); in iscsi_complete_pdu()
1309 struct iscsi_session *session = conn->session; in iscsi_verify_itt() local
1315 if (session->tt->parse_pdu_itt) in iscsi_verify_itt()
1316 session->tt->parse_pdu_itt(conn, itt, &i, &age); in iscsi_verify_itt()
1322 if (age != session->age) { in iscsi_verify_itt()
1325 (__force u32)itt, session->age); in iscsi_verify_itt()
1329 if (i >= session->cmds_max) { in iscsi_verify_itt()
1332 "%u.\n", i, session->cmds_max); in iscsi_verify_itt()
1359 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1360 iscsi_session_printk(KERN_ERR, conn->session, in iscsi_itt_to_ctask()
1362 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1370 void iscsi_session_failure(struct iscsi_session *session, in iscsi_session_failure() argument
1376 spin_lock_bh(&session->frwd_lock); in iscsi_session_failure()
1377 conn = session->leadconn; in iscsi_session_failure()
1378 if (session->state == ISCSI_STATE_TERMINATE || !conn) { in iscsi_session_failure()
1379 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1384 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1402 struct iscsi_session *session = conn->session; in iscsi_conn_failure() local
1404 spin_lock_bh(&session->frwd_lock); in iscsi_conn_failure()
1405 if (session->state == ISCSI_STATE_FAILED) { in iscsi_conn_failure()
1406 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1411 session->state = ISCSI_STATE_FAILED; in iscsi_conn_failure()
1412 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1422 struct iscsi_session *session = conn->session; in iscsi_check_cmdsn_window_closed() local
1427 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) { in iscsi_check_cmdsn_window_closed()
1428 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn " in iscsi_check_cmdsn_window_closed()
1430 session->exp_cmdsn, session->max_cmdsn, in iscsi_check_cmdsn_window_closed()
1431 session->cmdsn, session->queued_cmdsn); in iscsi_check_cmdsn_window_closed()
1446 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1447 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1448 spin_lock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1455 spin_lock(&conn->session->back_lock); in iscsi_xmit_task()
1457 spin_unlock(&conn->session->back_lock); in iscsi_xmit_task()
1497 spin_lock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1499 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); in iscsi_data_xmit()
1500 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1522 spin_lock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1524 spin_unlock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1538 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) { in iscsi_data_xmit()
1569 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_data_xmit()
1586 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1590 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1612 if (!kfifo_out(&conn->session->cmdpool.queue, in iscsi_alloc_task()
1616 sc->SCp.phase = conn->session->age; in iscsi_alloc_task()
1649 struct iscsi_session *session; in iscsi_queuecommand() local
1659 session = cls_session->dd_data; in iscsi_queuecommand()
1660 spin_lock_bh(&session->frwd_lock); in iscsi_queuecommand()
1668 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_queuecommand()
1675 switch (session->state) { in iscsi_queuecommand()
1700 conn = session->leadconn; in iscsi_queuecommand()
1735 if (session->tt->xmit_task(task)) { in iscsi_queuecommand()
1736 session->cmdsn--; in iscsi_queuecommand()
1745 session->queued_cmdsn++; in iscsi_queuecommand()
1746 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1752 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1753 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n", in iscsi_queuecommand()
1760 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1761 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n", in iscsi_queuecommand()
1777 struct iscsi_session *session = cls_session->dd_data; in iscsi_target_alloc() local
1779 starget->can_queue = session->scsi_cmds_max; in iscsi_target_alloc()
1787 struct iscsi_session *session = conn->session; in iscsi_tmf_timedout() local
1789 spin_lock(&session->frwd_lock); in iscsi_tmf_timedout()
1792 ISCSI_DBG_EH(session, "tmf timedout\n"); in iscsi_tmf_timedout()
1796 spin_unlock(&session->frwd_lock); in iscsi_tmf_timedout()
1803 struct iscsi_session *session = conn->session; in iscsi_exec_task_mgmt_fn() local
1809 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1812 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1820 ISCSI_DBG_EH(session, "tmf set timeout\n"); in iscsi_exec_task_mgmt_fn()
1822 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1823 mutex_unlock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1833 wait_event_interruptible(conn->ehwait, age != session->age || in iscsi_exec_task_mgmt_fn()
1834 session->state != ISCSI_STATE_LOGGED_IN || in iscsi_exec_task_mgmt_fn()
1840 mutex_lock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1841 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1843 if (age != session->age || in iscsi_exec_task_mgmt_fn()
1844 session->state != ISCSI_STATE_LOGGED_IN) in iscsi_exec_task_mgmt_fn()
1858 for (i = 0; i < conn->session->cmds_max; i++) { in fail_scsi_tasks()
1859 task = conn->session->cmds[i]; in fail_scsi_tasks()
1866 ISCSI_DBG_SESSION(conn->session, in fail_scsi_tasks()
1886 spin_lock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1888 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1902 struct Scsi_Host *shost = conn->session->host; in iscsi_suspend_tx()
1938 struct iscsi_session *session; in iscsi_eh_cmd_timed_out() local
1943 session = cls_session->dd_data; in iscsi_eh_cmd_timed_out()
1945 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); in iscsi_eh_cmd_timed_out()
1947 spin_lock(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
1958 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_eh_cmd_timed_out()
1967 conn = session->leadconn; in iscsi_eh_cmd_timed_out()
1982 ISCSI_DBG_EH(session, "Command making progress. Asking " in iscsi_eh_cmd_timed_out()
2002 for (i = 0; i < conn->session->cmds_max; i++) { in iscsi_eh_cmd_timed_out()
2003 running_task = conn->session->cmds[i]; in iscsi_eh_cmd_timed_out()
2027 ISCSI_DBG_EH(session, "Command has not made progress " in iscsi_eh_cmd_timed_out()
2061 spin_unlock(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
2062 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? in iscsi_eh_cmd_timed_out()
2070 struct iscsi_session *session = conn->session; in iscsi_check_transport_timeouts() local
2073 spin_lock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2074 if (session->state != ISCSI_STATE_LOGGED_IN) in iscsi_check_transport_timeouts()
2090 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2108 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2126 struct iscsi_session *session; in iscsi_eh_abort() local
2133 session = cls_session->dd_data; in iscsi_eh_abort()
2135 ISCSI_DBG_EH(session, "aborting sc %p\n", sc); in iscsi_eh_abort()
2137 mutex_lock(&session->eh_mutex); in iscsi_eh_abort()
2138 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2144 ISCSI_DBG_EH(session, "sc never reached iscsi layer or " in iscsi_eh_abort()
2146 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2147 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2155 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN || in iscsi_eh_abort()
2156 sc->SCp.phase != session->age) { in iscsi_eh_abort()
2157 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2158 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2159 ISCSI_DBG_EH(session, "failing abort due to dropped " in iscsi_eh_abort()
2164 conn = session->leadconn; in iscsi_eh_abort()
2166 age = session->age; in iscsi_eh_abort()
2169 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2174 ISCSI_DBG_EH(session, "sc completed while abort in progress\n"); in iscsi_eh_abort()
2191 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) { in iscsi_eh_abort()
2198 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2209 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2213 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2217 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2225 ISCSI_DBG_EH(session, "sc completed while abort in " in iscsi_eh_abort()
2236 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2238 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2240 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2244 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2246 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc, in iscsi_eh_abort()
2248 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2266 struct iscsi_session *session; in iscsi_eh_device_reset() local
2272 session = cls_session->dd_data; in iscsi_eh_device_reset()
2274 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc, in iscsi_eh_device_reset()
2277 mutex_lock(&session->eh_mutex); in iscsi_eh_device_reset()
2278 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2283 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_device_reset()
2285 conn = session->leadconn; in iscsi_eh_device_reset()
2295 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_device_reset()
2296 session->lu_reset_timeout)) { in iscsi_eh_device_reset()
2305 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2314 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2318 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2322 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2328 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2330 ISCSI_DBG_EH(session, "dev reset result = %s\n", in iscsi_eh_device_reset()
2332 mutex_unlock(&session->eh_mutex); in iscsi_eh_device_reset()
2339 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_recovery_timedout() local
2341 spin_lock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2342 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_session_recovery_timedout()
2343 session->state = ISCSI_STATE_RECOVERY_FAILED; in iscsi_session_recovery_timedout()
2344 if (session->leadconn) in iscsi_session_recovery_timedout()
2345 wake_up(&session->leadconn->ehwait); in iscsi_session_recovery_timedout()
2347 spin_unlock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2361 struct iscsi_session *session; in iscsi_eh_session_reset() local
2365 session = cls_session->dd_data; in iscsi_eh_session_reset()
2366 conn = session->leadconn; in iscsi_eh_session_reset()
2368 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2369 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2370 if (session->state == ISCSI_STATE_TERMINATE) { in iscsi_eh_session_reset()
2372 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2374 "%s, %s [age %d]\n", session->targetname, in iscsi_eh_session_reset()
2375 conn->persistent_address, session->age); in iscsi_eh_session_reset()
2376 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2377 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2381 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2382 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2389 ISCSI_DBG_EH(session, "wait for relogin\n"); in iscsi_eh_session_reset()
2391 session->state == ISCSI_STATE_TERMINATE || in iscsi_eh_session_reset()
2392 session->state == ISCSI_STATE_LOGGED_IN || in iscsi_eh_session_reset()
2393 session->state == ISCSI_STATE_RECOVERY_FAILED); in iscsi_eh_session_reset()
2397 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2398 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2399 if (session->state == ISCSI_STATE_LOGGED_IN) { in iscsi_eh_session_reset()
2400 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2402 session->targetname, conn->persistent_address); in iscsi_eh_session_reset()
2405 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2406 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2429 struct iscsi_session *session; in iscsi_eh_target_reset() local
2435 session = cls_session->dd_data; in iscsi_eh_target_reset()
2437 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc, in iscsi_eh_target_reset()
2438 session->targetname); in iscsi_eh_target_reset()
2440 mutex_lock(&session->eh_mutex); in iscsi_eh_target_reset()
2441 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2446 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_target_reset()
2448 conn = session->leadconn; in iscsi_eh_target_reset()
2458 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_target_reset()
2459 session->tgt_reset_timeout)) { in iscsi_eh_target_reset()
2468 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2477 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2481 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2485 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2491 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2493 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname, in iscsi_eh_target_reset()
2495 mutex_unlock(&session->eh_mutex); in iscsi_eh_target_reset()
2723 struct iscsi_session *session; in iscsi_session_setup() local
2773 session = cls_session->dd_data; in iscsi_session_setup()
2774 session->cls_session = cls_session; in iscsi_session_setup()
2775 session->host = shost; in iscsi_session_setup()
2776 session->state = ISCSI_STATE_FREE; in iscsi_session_setup()
2777 session->fast_abort = 1; in iscsi_session_setup()
2778 session->tgt_reset_timeout = 30; in iscsi_session_setup()
2779 session->lu_reset_timeout = 15; in iscsi_session_setup()
2780 session->abort_timeout = 10; in iscsi_session_setup()
2781 session->scsi_cmds_max = scsi_cmds; in iscsi_session_setup()
2782 session->cmds_max = total_cmds; in iscsi_session_setup()
2783 session->queued_cmdsn = session->cmdsn = initial_cmdsn; in iscsi_session_setup()
2784 session->exp_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2785 session->max_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2786 session->max_r2t = 1; in iscsi_session_setup()
2787 session->tt = iscsit; in iscsi_session_setup()
2788 session->dd_data = cls_session->dd_data + sizeof(*session); in iscsi_session_setup()
2790 mutex_init(&session->eh_mutex); in iscsi_session_setup()
2791 spin_lock_init(&session->frwd_lock); in iscsi_session_setup()
2792 spin_lock_init(&session->back_lock); in iscsi_session_setup()
2795 if (iscsi_pool_init(&session->cmdpool, session->cmds_max, in iscsi_session_setup()
2796 (void***)&session->cmds, in iscsi_session_setup()
2801 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { in iscsi_session_setup()
2802 struct iscsi_task *task = session->cmds[cmd_i]; in iscsi_session_setup()
2822 iscsi_pool_free(&session->cmdpool); in iscsi_session_setup()
2840 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_teardown() local
2842 struct Scsi_Host *shost = session->host; in iscsi_session_teardown()
2844 iscsi_pool_free(&session->cmdpool); in iscsi_session_teardown()
2846 kfree(session->password); in iscsi_session_teardown()
2847 kfree(session->password_in); in iscsi_session_teardown()
2848 kfree(session->username); in iscsi_session_teardown()
2849 kfree(session->username_in); in iscsi_session_teardown()
2850 kfree(session->targetname); in iscsi_session_teardown()
2851 kfree(session->targetalias); in iscsi_session_teardown()
2852 kfree(session->initiatorname); in iscsi_session_teardown()
2853 kfree(session->boot_root); in iscsi_session_teardown()
2854 kfree(session->boot_nic); in iscsi_session_teardown()
2855 kfree(session->boot_target); in iscsi_session_teardown()
2856 kfree(session->ifacename); in iscsi_session_teardown()
2857 kfree(session->portal_type); in iscsi_session_teardown()
2858 kfree(session->discovery_parent_type); in iscsi_session_teardown()
2876 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_setup() local
2889 conn->session = session; in iscsi_conn_setup()
2906 spin_lock_bh(&session->frwd_lock); in iscsi_conn_setup()
2907 if (!kfifo_out(&session->cmdpool.queue, in iscsi_conn_setup()
2910 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2913 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2927 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_setup()
2945 struct iscsi_session *session = conn->session; in iscsi_conn_teardown() local
2949 mutex_lock(&session->eh_mutex); in iscsi_conn_teardown()
2950 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2952 if (session->leadconn == conn) { in iscsi_conn_teardown()
2956 session->state = ISCSI_STATE_TERMINATE; in iscsi_conn_teardown()
2959 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2964 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2970 spin_lock_bh(&session->back_lock); in iscsi_conn_teardown()
2971 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_teardown()
2973 spin_unlock_bh(&session->back_lock); in iscsi_conn_teardown()
2974 if (session->leadconn == conn) in iscsi_conn_teardown()
2975 session->leadconn = NULL; in iscsi_conn_teardown()
2976 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2977 mutex_unlock(&session->eh_mutex); in iscsi_conn_teardown()
2986 struct iscsi_session *session = conn->session; in iscsi_conn_start() local
2988 if (!session) { in iscsi_conn_start()
2994 if ((session->imm_data_en || !session->initial_r2t_en) && in iscsi_conn_start()
2995 session->first_burst > session->max_burst) { in iscsi_conn_start()
2998 session->first_burst, session->max_burst); in iscsi_conn_start()
3014 spin_lock_bh(&session->frwd_lock); in iscsi_conn_start()
3016 session->state = ISCSI_STATE_LOGGED_IN; in iscsi_conn_start()
3017 session->queued_cmdsn = session->cmdsn; in iscsi_conn_start()
3033 session->age++; in iscsi_conn_start()
3034 if (session->age == 16) in iscsi_conn_start()
3035 session->age = 0; in iscsi_conn_start()
3043 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_start()
3045 iscsi_unblock_session(session->cls_session); in iscsi_conn_start()
3052 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn) in fail_mgmt_tasks() argument
3057 for (i = 0; i < conn->session->cmds_max; i++) { in fail_mgmt_tasks()
3058 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3065 ISCSI_DBG_SESSION(conn->session, in fail_mgmt_tasks()
3076 static void iscsi_start_session_recovery(struct iscsi_session *session, in iscsi_start_session_recovery() argument
3081 mutex_lock(&session->eh_mutex); in iscsi_start_session_recovery()
3082 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3084 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3085 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3095 session->state = ISCSI_STATE_TERMINATE; in iscsi_start_session_recovery()
3097 session->state = ISCSI_STATE_IN_RECOVERY; in iscsi_start_session_recovery()
3101 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3106 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3108 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3119 if (session->state == ISCSI_STATE_IN_RECOVERY && in iscsi_start_session_recovery()
3121 ISCSI_DBG_SESSION(session, "blocking session\n"); in iscsi_start_session_recovery()
3122 iscsi_block_session(session->cls_session); in iscsi_start_session_recovery()
3129 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3131 fail_mgmt_tasks(session, conn); in iscsi_start_session_recovery()
3133 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3134 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3140 struct iscsi_session *session = conn->session; in iscsi_conn_stop() local
3145 iscsi_start_session_recovery(session, conn, flag); in iscsi_conn_stop()
3157 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_bind() local
3160 spin_lock_bh(&session->frwd_lock); in iscsi_conn_bind()
3162 session->leadconn = conn; in iscsi_conn_bind()
3163 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_bind()
3197 struct iscsi_session *session = conn->session; in iscsi_set_param() local
3202 sscanf(buf, "%d", &session->fast_abort); in iscsi_set_param()
3205 sscanf(buf, "%d", &session->abort_timeout); in iscsi_set_param()
3208 sscanf(buf, "%d", &session->lu_reset_timeout); in iscsi_set_param()
3211 sscanf(buf, "%d", &session->tgt_reset_timeout); in iscsi_set_param()
3232 sscanf(buf, "%d", &session->initial_r2t_en); in iscsi_set_param()
3235 sscanf(buf, "%hu", &session->max_r2t); in iscsi_set_param()
3238 sscanf(buf, "%d", &session->imm_data_en); in iscsi_set_param()
3241 sscanf(buf, "%d", &session->first_burst); in iscsi_set_param()
3244 sscanf(buf, "%d", &session->max_burst); in iscsi_set_param()
3247 sscanf(buf, "%d", &session->pdu_inorder_en); in iscsi_set_param()
3250 sscanf(buf, "%d", &session->dataseq_inorder_en); in iscsi_set_param()
3253 sscanf(buf, "%d", &session->erl); in iscsi_set_param()
3259 return iscsi_switch_str_param(&session->username, buf); in iscsi_set_param()
3261 return iscsi_switch_str_param(&session->username_in, buf); in iscsi_set_param()
3263 return iscsi_switch_str_param(&session->password, buf); in iscsi_set_param()
3265 return iscsi_switch_str_param(&session->password_in, buf); in iscsi_set_param()
3267 return iscsi_switch_str_param(&session->targetname, buf); in iscsi_set_param()
3269 return iscsi_switch_str_param(&session->targetalias, buf); in iscsi_set_param()
3271 sscanf(buf, "%d", &session->tpgt); in iscsi_set_param()
3279 return iscsi_switch_str_param(&session->ifacename, buf); in iscsi_set_param()
3281 return iscsi_switch_str_param(&session->initiatorname, buf); in iscsi_set_param()
3283 return iscsi_switch_str_param(&session->boot_root, buf); in iscsi_set_param()
3285 return iscsi_switch_str_param(&session->boot_nic, buf); in iscsi_set_param()
3287 return iscsi_switch_str_param(&session->boot_target, buf); in iscsi_set_param()
3289 return iscsi_switch_str_param(&session->portal_type, buf); in iscsi_set_param()
3291 return iscsi_switch_str_param(&session->discovery_parent_type, in iscsi_set_param()
3295 session->discovery_sess = !!val; in iscsi_set_param()
3310 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_get_param() local
3315 len = sprintf(buf, "%d\n", session->fast_abort); in iscsi_session_get_param()
3318 len = sprintf(buf, "%d\n", session->abort_timeout); in iscsi_session_get_param()
3321 len = sprintf(buf, "%d\n", session->lu_reset_timeout); in iscsi_session_get_param()
3324 len = sprintf(buf, "%d\n", session->tgt_reset_timeout); in iscsi_session_get_param()
3327 len = sprintf(buf, "%d\n", session->initial_r2t_en); in iscsi_session_get_param()
3330 len = sprintf(buf, "%hu\n", session->max_r2t); in iscsi_session_get_param()
3333 len = sprintf(buf, "%d\n", session->imm_data_en); in iscsi_session_get_param()
3336 len = sprintf(buf, "%u\n", session->first_burst); in iscsi_session_get_param()
3339 len = sprintf(buf, "%u\n", session->max_burst); in iscsi_session_get_param()
3342 len = sprintf(buf, "%d\n", session->pdu_inorder_en); in iscsi_session_get_param()
3345 len = sprintf(buf, "%d\n", session->dataseq_inorder_en); in iscsi_session_get_param()
3348 len = sprintf(buf, "%d\n", session->def_taskmgmt_tmo); in iscsi_session_get_param()
3351 len = sprintf(buf, "%d\n", session->erl); in iscsi_session_get_param()
3354 len = sprintf(buf, "%s\n", session->targetname); in iscsi_session_get_param()
3357 len = sprintf(buf, "%s\n", session->targetalias); in iscsi_session_get_param()
3360 len = sprintf(buf, "%d\n", session->tpgt); in iscsi_session_get_param()
3363 len = sprintf(buf, "%s\n", session->username); in iscsi_session_get_param()
3366 len = sprintf(buf, "%s\n", session->username_in); in iscsi_session_get_param()
3369 len = sprintf(buf, "%s\n", session->password); in iscsi_session_get_param()
3372 len = sprintf(buf, "%s\n", session->password_in); in iscsi_session_get_param()
3375 len = sprintf(buf, "%s\n", session->ifacename); in iscsi_session_get_param()
3378 len = sprintf(buf, "%s\n", session->initiatorname); in iscsi_session_get_param()
3381 len = sprintf(buf, "%s\n", session->boot_root); in iscsi_session_get_param()
3384 len = sprintf(buf, "%s\n", session->boot_nic); in iscsi_session_get_param()
3387 len = sprintf(buf, "%s\n", session->boot_target); in iscsi_session_get_param()
3390 len = sprintf(buf, "%u\n", session->auto_snd_tgt_disable); in iscsi_session_get_param()
3393 len = sprintf(buf, "%u\n", session->discovery_sess); in iscsi_session_get_param()
3396 len = sprintf(buf, "%s\n", session->portal_type); in iscsi_session_get_param()
3399 len = sprintf(buf, "%u\n", session->chap_auth_en); in iscsi_session_get_param()
3402 len = sprintf(buf, "%u\n", session->discovery_logout_en); in iscsi_session_get_param()
3405 len = sprintf(buf, "%u\n", session->bidi_chap_en); in iscsi_session_get_param()
3408 len = sprintf(buf, "%u\n", session->discovery_auth_optional); in iscsi_session_get_param()
3411 len = sprintf(buf, "%d\n", session->time2wait); in iscsi_session_get_param()
3414 len = sprintf(buf, "%d\n", session->time2retain); in iscsi_session_get_param()
3417 len = sprintf(buf, "%u\n", session->tsid); in iscsi_session_get_param()
3421 session->isid[0], session->isid[1], in iscsi_session_get_param()
3422 session->isid[2], session->isid[3], in iscsi_session_get_param()
3423 session->isid[4], session->isid[5]); in iscsi_session_get_param()
3426 len = sprintf(buf, "%u\n", session->discovery_parent_idx); in iscsi_session_get_param()
3429 if (session->discovery_parent_type) in iscsi_session_get_param()
3431 session->discovery_parent_type); in iscsi_session_get_param()