Lines Matching refs:session

88 	struct Scsi_Host *shost = conn->session->host;  in iscsi_conn_queue_work()
96 static void __iscsi_update_cmdsn(struct iscsi_session *session, in __iscsi_update_cmdsn() argument
106 if (exp_cmdsn != session->exp_cmdsn && in __iscsi_update_cmdsn()
107 !iscsi_sna_lt(exp_cmdsn, session->exp_cmdsn)) in __iscsi_update_cmdsn()
108 session->exp_cmdsn = exp_cmdsn; in __iscsi_update_cmdsn()
110 if (max_cmdsn != session->max_cmdsn && in __iscsi_update_cmdsn()
111 !iscsi_sna_lt(max_cmdsn, session->max_cmdsn)) in __iscsi_update_cmdsn()
112 session->max_cmdsn = max_cmdsn; in __iscsi_update_cmdsn()
115 void iscsi_update_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr) in iscsi_update_cmdsn() argument
117 __iscsi_update_cmdsn(session, be32_to_cpu(hdr->exp_cmdsn), in iscsi_update_cmdsn()
210 ISCSI_DBG_SESSION(task->conn->session, in iscsi_prep_ecdb_ahs()
269 if (conn->session->fast_abort) { in iscsi_check_tmf_restrictions()
287 ISCSI_DBG_SESSION(conn->session, in iscsi_check_tmf_restrictions()
310 struct iscsi_session *session = conn->session; in iscsi_prep_scsi_cmd_pdu() local
321 if (conn->session->tt->alloc_pdu) { in iscsi_prep_scsi_cmd_pdu()
322 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD); in iscsi_prep_scsi_cmd_pdu()
330 if (session->tt->parse_pdu_itt) in iscsi_prep_scsi_cmd_pdu()
334 task->conn->session->age); in iscsi_prep_scsi_cmd_pdu()
381 if (session->imm_data_en) { in iscsi_prep_scsi_cmd_pdu()
382 if (transfer_length >= session->first_burst) in iscsi_prep_scsi_cmd_pdu()
383 task->imm_count = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
392 if (!session->initial_r2t_en) { in iscsi_prep_scsi_cmd_pdu()
393 r2t->data_length = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
420 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_scsi_cmd_pdu()
422 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_scsi_cmd_pdu()
426 session->cmdsn++; in iscsi_prep_scsi_cmd_pdu()
429 ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x " in iscsi_prep_scsi_cmd_pdu()
434 session->cmdsn, in iscsi_prep_scsi_cmd_pdu()
435 session->max_cmdsn - session->exp_cmdsn + 1); in iscsi_prep_scsi_cmd_pdu()
450 struct iscsi_session *session = conn->session; in iscsi_free_task() local
454 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n", in iscsi_free_task()
457 session->tt->cleanup_task(task); in iscsi_free_task()
466 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*)); in iscsi_free_task()
495 struct iscsi_session *session = task->conn->session; in iscsi_put_task() local
498 spin_lock_bh(&session->back_lock); in iscsi_put_task()
500 spin_unlock_bh(&session->back_lock); in iscsi_put_task()
515 ISCSI_DBG_SESSION(conn->session, in iscsi_complete_task()
559 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt); in iscsi_complete_scsi_task()
562 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn); in iscsi_complete_scsi_task()
593 conn->session->queued_cmdsn--; in fail_scsi_task()
605 spin_lock_bh(&conn->session->back_lock); in fail_scsi_task()
607 spin_unlock_bh(&conn->session->back_lock); in fail_scsi_task()
613 struct iscsi_session *session = conn->session; in iscsi_prep_mgmt_task() local
618 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_prep_mgmt_task()
626 nop->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_mgmt_task()
638 session->queued_cmdsn++; in iscsi_prep_mgmt_task()
639 session->cmdsn++; in iscsi_prep_mgmt_task()
643 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_mgmt_task()
647 session->state = ISCSI_STATE_LOGGING_OUT; in iscsi_prep_mgmt_task()
650 ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x " in iscsi_prep_mgmt_task()
660 struct iscsi_session *session = conn->session; in __iscsi_conn_send_pdu() local
661 struct iscsi_host *ihost = shost_priv(session->host); in __iscsi_conn_send_pdu()
666 if (session->state == ISCSI_STATE_TERMINATE) in __iscsi_conn_send_pdu()
689 if (session->state != ISCSI_STATE_LOGGED_IN) in __iscsi_conn_send_pdu()
700 if (!kfifo_out(&session->cmdpool.queue, in __iscsi_conn_send_pdu()
721 if (conn->session->tt->alloc_pdu) { in __iscsi_conn_send_pdu()
722 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) { in __iscsi_conn_send_pdu()
734 if (session->tt->parse_pdu_itt) in __iscsi_conn_send_pdu()
738 task->conn->session->age); in __iscsi_conn_send_pdu()
745 if (session->tt->xmit_task(task)) in __iscsi_conn_send_pdu()
758 spin_lock(&session->back_lock); in __iscsi_conn_send_pdu()
760 spin_unlock(&session->back_lock); in __iscsi_conn_send_pdu()
768 struct iscsi_session *session = conn->session; in iscsi_conn_send_pdu() local
771 spin_lock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
774 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
795 struct iscsi_session *session = conn->session; in iscsi_scsi_cmd_rsp() local
798 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr); in iscsi_scsi_cmd_rsp()
812 BUG_ON(!session->tt->check_protection); in iscsi_scsi_cmd_rsp()
814 ascq = session->tt->check_protection(task, &sector); in iscsi_scsi_cmd_rsp()
850 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n", in iscsi_scsi_cmd_rsp()
873 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n", in iscsi_scsi_cmd_rsp()
898 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr); in iscsi_data_in_rsp()
913 ISCSI_DBG_SESSION(conn->session, "data in with status done " in iscsi_data_in_rsp()
1050 spin_unlock(&conn->session->back_lock); in iscsi_handle_reject()
1051 spin_lock(&conn->session->frwd_lock); in iscsi_handle_reject()
1054 spin_unlock(&conn->session->frwd_lock); in iscsi_handle_reject()
1055 spin_lock(&conn->session->back_lock); in iscsi_handle_reject()
1096 struct iscsi_session *session = conn->session; in iscsi_itt_to_task() local
1102 if (session->tt->parse_pdu_itt) in iscsi_itt_to_task()
1103 session->tt->parse_pdu_itt(conn, itt, &i, NULL); in iscsi_itt_to_task()
1106 if (i >= session->cmds_max) in iscsi_itt_to_task()
1109 return session->cmds[i]; in iscsi_itt_to_task()
1127 struct iscsi_session *session = conn->session; in __iscsi_complete_pdu() local
1142 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n", in __iscsi_complete_pdu()
1146 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1159 spin_unlock(&session->back_lock); in __iscsi_complete_pdu()
1160 spin_lock(&session->frwd_lock); in __iscsi_complete_pdu()
1162 spin_unlock(&session->frwd_lock); in __iscsi_complete_pdu()
1163 spin_lock(&session->back_lock); in __iscsi_complete_pdu()
1214 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1223 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1230 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1240 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1270 spin_lock(&conn->session->back_lock); in iscsi_complete_pdu()
1272 spin_unlock(&conn->session->back_lock); in iscsi_complete_pdu()
1279 struct iscsi_session *session = conn->session; in iscsi_verify_itt() local
1285 if (session->tt->parse_pdu_itt) in iscsi_verify_itt()
1286 session->tt->parse_pdu_itt(conn, itt, &i, &age); in iscsi_verify_itt()
1292 if (age != session->age) { in iscsi_verify_itt()
1295 (__force u32)itt, session->age); in iscsi_verify_itt()
1299 if (i >= session->cmds_max) { in iscsi_verify_itt()
1302 "%u.\n", i, session->cmds_max); in iscsi_verify_itt()
1329 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1330 iscsi_session_printk(KERN_ERR, conn->session, in iscsi_itt_to_ctask()
1332 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1340 void iscsi_session_failure(struct iscsi_session *session, in iscsi_session_failure() argument
1346 spin_lock_bh(&session->frwd_lock); in iscsi_session_failure()
1347 conn = session->leadconn; in iscsi_session_failure()
1348 if (session->state == ISCSI_STATE_TERMINATE || !conn) { in iscsi_session_failure()
1349 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1354 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1372 struct iscsi_session *session = conn->session; in iscsi_conn_failure() local
1374 spin_lock_bh(&session->frwd_lock); in iscsi_conn_failure()
1375 if (session->state == ISCSI_STATE_FAILED) { in iscsi_conn_failure()
1376 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1381 session->state = ISCSI_STATE_FAILED; in iscsi_conn_failure()
1382 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1392 struct iscsi_session *session = conn->session; in iscsi_check_cmdsn_window_closed() local
1397 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) { in iscsi_check_cmdsn_window_closed()
1398 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn " in iscsi_check_cmdsn_window_closed()
1400 session->exp_cmdsn, session->max_cmdsn, in iscsi_check_cmdsn_window_closed()
1401 session->cmdsn, session->queued_cmdsn); in iscsi_check_cmdsn_window_closed()
1415 spin_lock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1417 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1421 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1422 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1423 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1424 spin_lock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1431 spin_lock(&conn->session->back_lock); in iscsi_xmit_task()
1433 spin_unlock(&conn->session->back_lock); in iscsi_xmit_task()
1475 spin_lock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1477 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); in iscsi_data_xmit()
1478 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1502 spin_lock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1504 spin_unlock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1521 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) { in iscsi_data_xmit()
1557 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_data_xmit()
1577 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1581 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1603 if (!kfifo_out(&conn->session->cmdpool.queue, in iscsi_alloc_task()
1607 sc->SCp.phase = conn->session->age; in iscsi_alloc_task()
1640 struct iscsi_session *session; in iscsi_queuecommand() local
1650 session = cls_session->dd_data; in iscsi_queuecommand()
1651 spin_lock_bh(&session->frwd_lock); in iscsi_queuecommand()
1659 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_queuecommand()
1666 switch (session->state) { in iscsi_queuecommand()
1701 conn = session->leadconn; in iscsi_queuecommand()
1736 if (session->tt->xmit_task(task)) { in iscsi_queuecommand()
1737 session->cmdsn--; in iscsi_queuecommand()
1748 session->queued_cmdsn++; in iscsi_queuecommand()
1749 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1753 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1755 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1757 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1758 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n", in iscsi_queuecommand()
1763 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1765 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1767 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1768 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n", in iscsi_queuecommand()
1779 struct iscsi_session *session = cls_session->dd_data; in iscsi_target_alloc() local
1781 starget->can_queue = session->scsi_cmds_max; in iscsi_target_alloc()
1789 struct iscsi_session *session = conn->session; in iscsi_tmf_timedout() local
1791 spin_lock(&session->frwd_lock); in iscsi_tmf_timedout()
1794 ISCSI_DBG_EH(session, "tmf timedout\n"); in iscsi_tmf_timedout()
1798 spin_unlock(&session->frwd_lock); in iscsi_tmf_timedout()
1804 __must_hold(&session->frwd_lock) in iscsi_exec_task_mgmt_fn()
1806 struct iscsi_session *session = conn->session; in iscsi_exec_task_mgmt_fn() local
1812 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1815 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1821 ISCSI_DBG_EH(session, "tmf set timeout\n"); in iscsi_exec_task_mgmt_fn()
1823 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1824 mutex_unlock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1834 wait_event_interruptible(conn->ehwait, age != session->age || in iscsi_exec_task_mgmt_fn()
1835 session->state != ISCSI_STATE_LOGGED_IN || in iscsi_exec_task_mgmt_fn()
1841 mutex_lock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1842 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1844 if (age != session->age || in iscsi_exec_task_mgmt_fn()
1845 session->state != ISCSI_STATE_LOGGED_IN) in iscsi_exec_task_mgmt_fn()
1859 for (i = 0; i < conn->session->cmds_max; i++) { in fail_scsi_tasks()
1860 task = conn->session->cmds[i]; in fail_scsi_tasks()
1867 ISCSI_DBG_SESSION(conn->session, in fail_scsi_tasks()
1887 spin_lock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1889 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1903 struct Scsi_Host *shost = conn->session->host; in iscsi_suspend_tx()
1939 struct iscsi_session *session; in iscsi_eh_cmd_timed_out() local
1944 session = cls_session->dd_data; in iscsi_eh_cmd_timed_out()
1946 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); in iscsi_eh_cmd_timed_out()
1948 spin_lock(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
1959 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_eh_cmd_timed_out()
1969 ISCSI_DBG_EH(session, "sc on shutdown, handled\n"); in iscsi_eh_cmd_timed_out()
1981 conn = session->leadconn; in iscsi_eh_cmd_timed_out()
1996 ISCSI_DBG_EH(session, "Command making progress. Asking " in iscsi_eh_cmd_timed_out()
2016 for (i = 0; i < conn->session->cmds_max; i++) { in iscsi_eh_cmd_timed_out()
2017 running_task = conn->session->cmds[i]; in iscsi_eh_cmd_timed_out()
2041 ISCSI_DBG_EH(session, "Command has not made progress " in iscsi_eh_cmd_timed_out()
2075 spin_unlock(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
2076 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? in iscsi_eh_cmd_timed_out()
2085 struct iscsi_session *session = conn->session; in iscsi_check_transport_timeouts() local
2088 spin_lock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2089 if (session->state != ISCSI_STATE_LOGGED_IN) in iscsi_check_transport_timeouts()
2105 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2123 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2141 struct iscsi_session *session; in iscsi_eh_abort() local
2148 session = cls_session->dd_data; in iscsi_eh_abort()
2150 ISCSI_DBG_EH(session, "aborting sc %p\n", sc); in iscsi_eh_abort()
2152 mutex_lock(&session->eh_mutex); in iscsi_eh_abort()
2153 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2159 ISCSI_DBG_EH(session, "sc never reached iscsi layer or " in iscsi_eh_abort()
2161 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2162 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2170 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN || in iscsi_eh_abort()
2171 sc->SCp.phase != session->age) { in iscsi_eh_abort()
2172 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2173 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2174 ISCSI_DBG_EH(session, "failing abort due to dropped " in iscsi_eh_abort()
2179 conn = session->leadconn; in iscsi_eh_abort()
2181 age = session->age; in iscsi_eh_abort()
2184 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2189 ISCSI_DBG_EH(session, "sc completed while abort in progress\n"); in iscsi_eh_abort()
2206 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) in iscsi_eh_abort()
2211 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2222 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2226 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2230 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2238 ISCSI_DBG_EH(session, "sc completed while abort in " in iscsi_eh_abort()
2249 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2251 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2253 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2257 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2259 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc, in iscsi_eh_abort()
2261 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2279 struct iscsi_session *session; in iscsi_eh_device_reset() local
2285 session = cls_session->dd_data; in iscsi_eh_device_reset()
2287 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc, in iscsi_eh_device_reset()
2290 mutex_lock(&session->eh_mutex); in iscsi_eh_device_reset()
2291 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2296 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_device_reset()
2298 conn = session->leadconn; in iscsi_eh_device_reset()
2308 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_device_reset()
2309 session->lu_reset_timeout)) { in iscsi_eh_device_reset()
2318 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2327 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2331 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2335 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2341 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2343 ISCSI_DBG_EH(session, "dev reset result = %s\n", in iscsi_eh_device_reset()
2345 mutex_unlock(&session->eh_mutex); in iscsi_eh_device_reset()
2352 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_recovery_timedout() local
2354 spin_lock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2355 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_session_recovery_timedout()
2356 session->state = ISCSI_STATE_RECOVERY_FAILED; in iscsi_session_recovery_timedout()
2357 if (session->leadconn) in iscsi_session_recovery_timedout()
2358 wake_up(&session->leadconn->ehwait); in iscsi_session_recovery_timedout()
2360 spin_unlock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2374 struct iscsi_session *session; in iscsi_eh_session_reset() local
2378 session = cls_session->dd_data; in iscsi_eh_session_reset()
2379 conn = session->leadconn; in iscsi_eh_session_reset()
2381 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2382 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2383 if (session->state == ISCSI_STATE_TERMINATE) { in iscsi_eh_session_reset()
2385 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2387 "%s [age %d]\n", session->targetname, in iscsi_eh_session_reset()
2388 session->age); in iscsi_eh_session_reset()
2389 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2390 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2394 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2395 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2402 ISCSI_DBG_EH(session, "wait for relogin\n"); in iscsi_eh_session_reset()
2404 session->state == ISCSI_STATE_TERMINATE || in iscsi_eh_session_reset()
2405 session->state == ISCSI_STATE_LOGGED_IN || in iscsi_eh_session_reset()
2406 session->state == ISCSI_STATE_RECOVERY_FAILED); in iscsi_eh_session_reset()
2410 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2411 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2412 if (session->state == ISCSI_STATE_LOGGED_IN) { in iscsi_eh_session_reset()
2413 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2415 session->targetname, conn->persistent_address); in iscsi_eh_session_reset()
2418 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2419 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2442 struct iscsi_session *session; in iscsi_eh_target_reset() local
2448 session = cls_session->dd_data; in iscsi_eh_target_reset()
2450 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc, in iscsi_eh_target_reset()
2451 session->targetname); in iscsi_eh_target_reset()
2453 mutex_lock(&session->eh_mutex); in iscsi_eh_target_reset()
2454 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2459 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_target_reset()
2461 conn = session->leadconn; in iscsi_eh_target_reset()
2471 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_target_reset()
2472 session->tgt_reset_timeout)) { in iscsi_eh_target_reset()
2481 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2490 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2494 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2498 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2504 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2506 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname, in iscsi_eh_target_reset()
2508 mutex_unlock(&session->eh_mutex); in iscsi_eh_target_reset()
2735 struct iscsi_session *session; in iscsi_session_setup() local
2785 session = cls_session->dd_data; in iscsi_session_setup()
2786 session->cls_session = cls_session; in iscsi_session_setup()
2787 session->host = shost; in iscsi_session_setup()
2788 session->state = ISCSI_STATE_FREE; in iscsi_session_setup()
2789 session->fast_abort = 1; in iscsi_session_setup()
2790 session->tgt_reset_timeout = 30; in iscsi_session_setup()
2791 session->lu_reset_timeout = 15; in iscsi_session_setup()
2792 session->abort_timeout = 10; in iscsi_session_setup()
2793 session->scsi_cmds_max = scsi_cmds; in iscsi_session_setup()
2794 session->cmds_max = total_cmds; in iscsi_session_setup()
2795 session->queued_cmdsn = session->cmdsn = initial_cmdsn; in iscsi_session_setup()
2796 session->exp_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2797 session->max_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2798 session->max_r2t = 1; in iscsi_session_setup()
2799 session->tt = iscsit; in iscsi_session_setup()
2800 session->dd_data = cls_session->dd_data + sizeof(*session); in iscsi_session_setup()
2802 mutex_init(&session->eh_mutex); in iscsi_session_setup()
2803 spin_lock_init(&session->frwd_lock); in iscsi_session_setup()
2804 spin_lock_init(&session->back_lock); in iscsi_session_setup()
2807 if (iscsi_pool_init(&session->cmdpool, session->cmds_max, in iscsi_session_setup()
2808 (void***)&session->cmds, in iscsi_session_setup()
2813 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { in iscsi_session_setup()
2814 struct iscsi_task *task = session->cmds[cmd_i]; in iscsi_session_setup()
2834 iscsi_pool_free(&session->cmdpool); in iscsi_session_setup()
2849 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_teardown() local
2851 struct Scsi_Host *shost = session->host; in iscsi_session_teardown()
2853 iscsi_pool_free(&session->cmdpool); in iscsi_session_teardown()
2857 kfree(session->password); in iscsi_session_teardown()
2858 kfree(session->password_in); in iscsi_session_teardown()
2859 kfree(session->username); in iscsi_session_teardown()
2860 kfree(session->username_in); in iscsi_session_teardown()
2861 kfree(session->targetname); in iscsi_session_teardown()
2862 kfree(session->targetalias); in iscsi_session_teardown()
2863 kfree(session->initiatorname); in iscsi_session_teardown()
2864 kfree(session->boot_root); in iscsi_session_teardown()
2865 kfree(session->boot_nic); in iscsi_session_teardown()
2866 kfree(session->boot_target); in iscsi_session_teardown()
2867 kfree(session->ifacename); in iscsi_session_teardown()
2868 kfree(session->portal_type); in iscsi_session_teardown()
2869 kfree(session->discovery_parent_type); in iscsi_session_teardown()
2888 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_setup() local
2901 conn->session = session; in iscsi_conn_setup()
2917 spin_lock_bh(&session->frwd_lock); in iscsi_conn_setup()
2918 if (!kfifo_out(&session->cmdpool.queue, in iscsi_conn_setup()
2921 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2924 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2938 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_setup()
2956 struct iscsi_session *session = conn->session; in iscsi_conn_teardown() local
2960 mutex_lock(&session->eh_mutex); in iscsi_conn_teardown()
2961 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2963 if (session->leadconn == conn) { in iscsi_conn_teardown()
2967 session->state = ISCSI_STATE_TERMINATE; in iscsi_conn_teardown()
2970 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2975 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2981 spin_lock_bh(&session->back_lock); in iscsi_conn_teardown()
2982 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_teardown()
2984 spin_unlock_bh(&session->back_lock); in iscsi_conn_teardown()
2985 if (session->leadconn == conn) in iscsi_conn_teardown()
2986 session->leadconn = NULL; in iscsi_conn_teardown()
2987 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2988 mutex_unlock(&session->eh_mutex); in iscsi_conn_teardown()
2997 struct iscsi_session *session = conn->session; in iscsi_conn_start() local
2999 if (!session) { in iscsi_conn_start()
3005 if ((session->imm_data_en || !session->initial_r2t_en) && in iscsi_conn_start()
3006 session->first_burst > session->max_burst) { in iscsi_conn_start()
3009 session->first_burst, session->max_burst); in iscsi_conn_start()
3025 spin_lock_bh(&session->frwd_lock); in iscsi_conn_start()
3027 session->state = ISCSI_STATE_LOGGED_IN; in iscsi_conn_start()
3028 session->queued_cmdsn = session->cmdsn; in iscsi_conn_start()
3044 session->age++; in iscsi_conn_start()
3045 if (session->age == 16) in iscsi_conn_start()
3046 session->age = 0; in iscsi_conn_start()
3054 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_start()
3056 iscsi_unblock_session(session->cls_session); in iscsi_conn_start()
3063 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn) in fail_mgmt_tasks() argument
3068 for (i = 0; i < conn->session->cmds_max; i++) { in fail_mgmt_tasks()
3069 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3076 ISCSI_DBG_SESSION(conn->session, in fail_mgmt_tasks()
3082 spin_lock_bh(&session->back_lock); in fail_mgmt_tasks()
3084 spin_unlock_bh(&session->back_lock); in fail_mgmt_tasks()
3088 static void iscsi_start_session_recovery(struct iscsi_session *session, in iscsi_start_session_recovery() argument
3093 mutex_lock(&session->eh_mutex); in iscsi_start_session_recovery()
3094 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3096 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3097 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3107 session->state = ISCSI_STATE_TERMINATE; in iscsi_start_session_recovery()
3109 session->state = ISCSI_STATE_IN_RECOVERY; in iscsi_start_session_recovery()
3113 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3118 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3120 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3131 if (session->state == ISCSI_STATE_IN_RECOVERY && in iscsi_start_session_recovery()
3133 ISCSI_DBG_SESSION(session, "blocking session\n"); in iscsi_start_session_recovery()
3134 iscsi_block_session(session->cls_session); in iscsi_start_session_recovery()
3141 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3143 fail_mgmt_tasks(session, conn); in iscsi_start_session_recovery()
3145 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3146 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3152 struct iscsi_session *session = conn->session; in iscsi_conn_stop() local
3157 iscsi_start_session_recovery(session, conn, flag); in iscsi_conn_stop()
3169 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_bind() local
3172 spin_lock_bh(&session->frwd_lock); in iscsi_conn_bind()
3174 session->leadconn = conn; in iscsi_conn_bind()
3175 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_bind()
3209 struct iscsi_session *session = conn->session; in iscsi_set_param() local
3214 sscanf(buf, "%d", &session->fast_abort); in iscsi_set_param()
3217 sscanf(buf, "%d", &session->abort_timeout); in iscsi_set_param()
3220 sscanf(buf, "%d", &session->lu_reset_timeout); in iscsi_set_param()
3223 sscanf(buf, "%d", &session->tgt_reset_timeout); in iscsi_set_param()
3244 sscanf(buf, "%d", &session->initial_r2t_en); in iscsi_set_param()
3247 sscanf(buf, "%hu", &session->max_r2t); in iscsi_set_param()
3250 sscanf(buf, "%d", &session->imm_data_en); in iscsi_set_param()
3253 sscanf(buf, "%d", &session->first_burst); in iscsi_set_param()
3256 sscanf(buf, "%d", &session->max_burst); in iscsi_set_param()
3259 sscanf(buf, "%d", &session->pdu_inorder_en); in iscsi_set_param()
3262 sscanf(buf, "%d", &session->dataseq_inorder_en); in iscsi_set_param()
3265 sscanf(buf, "%d", &session->erl); in iscsi_set_param()
3271 return iscsi_switch_str_param(&session->username, buf); in iscsi_set_param()
3273 return iscsi_switch_str_param(&session->username_in, buf); in iscsi_set_param()
3275 return iscsi_switch_str_param(&session->password, buf); in iscsi_set_param()
3277 return iscsi_switch_str_param(&session->password_in, buf); in iscsi_set_param()
3279 return iscsi_switch_str_param(&session->targetname, buf); in iscsi_set_param()
3281 return iscsi_switch_str_param(&session->targetalias, buf); in iscsi_set_param()
3283 sscanf(buf, "%d", &session->tpgt); in iscsi_set_param()
3291 return iscsi_switch_str_param(&session->ifacename, buf); in iscsi_set_param()
3293 return iscsi_switch_str_param(&session->initiatorname, buf); in iscsi_set_param()
3295 return iscsi_switch_str_param(&session->boot_root, buf); in iscsi_set_param()
3297 return iscsi_switch_str_param(&session->boot_nic, buf); in iscsi_set_param()
3299 return iscsi_switch_str_param(&session->boot_target, buf); in iscsi_set_param()
3301 return iscsi_switch_str_param(&session->portal_type, buf); in iscsi_set_param()
3303 return iscsi_switch_str_param(&session->discovery_parent_type, in iscsi_set_param()
3307 session->discovery_sess = !!val; in iscsi_set_param()
3322 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_get_param() local
3327 len = sprintf(buf, "%d\n", session->fast_abort); in iscsi_session_get_param()
3330 len = sprintf(buf, "%d\n", session->abort_timeout); in iscsi_session_get_param()
3333 len = sprintf(buf, "%d\n", session->lu_reset_timeout); in iscsi_session_get_param()
3336 len = sprintf(buf, "%d\n", session->tgt_reset_timeout); in iscsi_session_get_param()
3339 len = sprintf(buf, "%d\n", session->initial_r2t_en); in iscsi_session_get_param()
3342 len = sprintf(buf, "%hu\n", session->max_r2t); in iscsi_session_get_param()
3345 len = sprintf(buf, "%d\n", session->imm_data_en); in iscsi_session_get_param()
3348 len = sprintf(buf, "%u\n", session->first_burst); in iscsi_session_get_param()
3351 len = sprintf(buf, "%u\n", session->max_burst); in iscsi_session_get_param()
3354 len = sprintf(buf, "%d\n", session->pdu_inorder_en); in iscsi_session_get_param()
3357 len = sprintf(buf, "%d\n", session->dataseq_inorder_en); in iscsi_session_get_param()
3360 len = sprintf(buf, "%d\n", session->def_taskmgmt_tmo); in iscsi_session_get_param()
3363 len = sprintf(buf, "%d\n", session->erl); in iscsi_session_get_param()
3366 len = sprintf(buf, "%s\n", session->targetname); in iscsi_session_get_param()
3369 len = sprintf(buf, "%s\n", session->targetalias); in iscsi_session_get_param()
3372 len = sprintf(buf, "%d\n", session->tpgt); in iscsi_session_get_param()
3375 len = sprintf(buf, "%s\n", session->username); in iscsi_session_get_param()
3378 len = sprintf(buf, "%s\n", session->username_in); in iscsi_session_get_param()
3381 len = sprintf(buf, "%s\n", session->password); in iscsi_session_get_param()
3384 len = sprintf(buf, "%s\n", session->password_in); in iscsi_session_get_param()
3387 len = sprintf(buf, "%s\n", session->ifacename); in iscsi_session_get_param()
3390 len = sprintf(buf, "%s\n", session->initiatorname); in iscsi_session_get_param()
3393 len = sprintf(buf, "%s\n", session->boot_root); in iscsi_session_get_param()
3396 len = sprintf(buf, "%s\n", session->boot_nic); in iscsi_session_get_param()
3399 len = sprintf(buf, "%s\n", session->boot_target); in iscsi_session_get_param()
3402 len = sprintf(buf, "%u\n", session->auto_snd_tgt_disable); in iscsi_session_get_param()
3405 len = sprintf(buf, "%u\n", session->discovery_sess); in iscsi_session_get_param()
3408 len = sprintf(buf, "%s\n", session->portal_type); in iscsi_session_get_param()
3411 len = sprintf(buf, "%u\n", session->chap_auth_en); in iscsi_session_get_param()
3414 len = sprintf(buf, "%u\n", session->discovery_logout_en); in iscsi_session_get_param()
3417 len = sprintf(buf, "%u\n", session->bidi_chap_en); in iscsi_session_get_param()
3420 len = sprintf(buf, "%u\n", session->discovery_auth_optional); in iscsi_session_get_param()
3423 len = sprintf(buf, "%d\n", session->time2wait); in iscsi_session_get_param()
3426 len = sprintf(buf, "%d\n", session->time2retain); in iscsi_session_get_param()
3429 len = sprintf(buf, "%u\n", session->tsid); in iscsi_session_get_param()
3433 session->isid[0], session->isid[1], in iscsi_session_get_param()
3434 session->isid[2], session->isid[3], in iscsi_session_get_param()
3435 session->isid[4], session->isid[5]); in iscsi_session_get_param()
3438 len = sprintf(buf, "%u\n", session->discovery_parent_idx); in iscsi_session_get_param()
3441 if (session->discovery_parent_type) in iscsi_session_get_param()
3443 session->discovery_parent_type); in iscsi_session_get_param()