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()
233 struct iscsi_session *session = task->conn->session; in iscsi_check_tmf_restrictions() local
234 struct iscsi_tm *tmf = &session->tmhdr; in iscsi_check_tmf_restrictions()
237 if (session->tmf_state == TMF_INITIAL) in iscsi_check_tmf_restrictions()
257 iscsi_session_printk(KERN_INFO, session, in iscsi_check_tmf_restrictions()
266 if (session->fast_abort) { in iscsi_check_tmf_restrictions()
267 iscsi_session_printk(KERN_INFO, session, in iscsi_check_tmf_restrictions()
282 ISCSI_DBG_SESSION(session, in iscsi_check_tmf_restrictions()
305 struct iscsi_session *session = conn->session; in iscsi_prep_scsi_cmd_pdu() local
316 if (conn->session->tt->alloc_pdu) { in iscsi_prep_scsi_cmd_pdu()
317 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD); in iscsi_prep_scsi_cmd_pdu()
325 if (session->tt->parse_pdu_itt) in iscsi_prep_scsi_cmd_pdu()
329 task->conn->session->age); in iscsi_prep_scsi_cmd_pdu()
376 if (session->imm_data_en) { in iscsi_prep_scsi_cmd_pdu()
377 if (transfer_length >= session->first_burst) in iscsi_prep_scsi_cmd_pdu()
378 task->imm_count = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
387 if (!session->initial_r2t_en) { in iscsi_prep_scsi_cmd_pdu()
388 r2t->data_length = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
415 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_scsi_cmd_pdu()
417 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_scsi_cmd_pdu()
421 session->cmdsn++; in iscsi_prep_scsi_cmd_pdu()
424 ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x " in iscsi_prep_scsi_cmd_pdu()
429 session->cmdsn, in iscsi_prep_scsi_cmd_pdu()
430 session->max_cmdsn - session->exp_cmdsn + 1); in iscsi_prep_scsi_cmd_pdu()
445 struct iscsi_session *session = conn->session; in iscsi_free_task() local
449 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n", in iscsi_free_task()
452 session->tt->cleanup_task(task); in iscsi_free_task()
461 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*)); in iscsi_free_task()
490 struct iscsi_session *session = task->conn->session; in iscsi_put_task() local
493 spin_lock_bh(&session->back_lock); in iscsi_put_task()
495 spin_unlock_bh(&session->back_lock); in iscsi_put_task()
510 ISCSI_DBG_SESSION(conn->session, in iscsi_complete_task()
554 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt); in iscsi_complete_scsi_task()
557 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn); in iscsi_complete_scsi_task()
588 conn->session->queued_cmdsn--; in fail_scsi_task()
600 spin_lock_bh(&conn->session->back_lock); in fail_scsi_task()
602 spin_unlock_bh(&conn->session->back_lock); in fail_scsi_task()
608 struct iscsi_session *session = conn->session; in iscsi_prep_mgmt_task() local
613 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_prep_mgmt_task()
621 nop->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_mgmt_task()
633 session->queued_cmdsn++; in iscsi_prep_mgmt_task()
634 session->cmdsn++; in iscsi_prep_mgmt_task()
638 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_mgmt_task()
642 session->state = ISCSI_STATE_LOGGING_OUT; in iscsi_prep_mgmt_task()
645 ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x " in iscsi_prep_mgmt_task()
655 struct iscsi_session *session = conn->session; in __iscsi_conn_send_pdu() local
656 struct iscsi_host *ihost = shost_priv(session->host); in __iscsi_conn_send_pdu()
661 if (session->state == ISCSI_STATE_TERMINATE) in __iscsi_conn_send_pdu()
684 if (session->state != ISCSI_STATE_LOGGED_IN) in __iscsi_conn_send_pdu()
695 if (!kfifo_out(&session->cmdpool.queue, in __iscsi_conn_send_pdu()
716 if (conn->session->tt->alloc_pdu) { in __iscsi_conn_send_pdu()
717 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) { in __iscsi_conn_send_pdu()
729 if (session->tt->parse_pdu_itt) in __iscsi_conn_send_pdu()
733 task->conn->session->age); in __iscsi_conn_send_pdu()
743 if (session->tt->xmit_task(task)) in __iscsi_conn_send_pdu()
756 spin_lock(&session->back_lock); in __iscsi_conn_send_pdu()
758 spin_unlock(&session->back_lock); in __iscsi_conn_send_pdu()
766 struct iscsi_session *session = conn->session; in iscsi_conn_send_pdu() local
769 spin_lock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
772 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
793 struct iscsi_session *session = conn->session; in iscsi_scsi_cmd_rsp() local
796 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr); in iscsi_scsi_cmd_rsp()
810 BUG_ON(!session->tt->check_protection); in iscsi_scsi_cmd_rsp()
812 ascq = session->tt->check_protection(task, §or); in iscsi_scsi_cmd_rsp()
848 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n", in iscsi_scsi_cmd_rsp()
871 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n", in iscsi_scsi_cmd_rsp()
896 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr); in iscsi_data_in_rsp()
911 ISCSI_DBG_SESSION(conn->session, "data in with status done " in iscsi_data_in_rsp()
921 struct iscsi_session *session = conn->session; in iscsi_tmf_rsp() local
926 if (session->tmf_state != TMF_QUEUED) in iscsi_tmf_rsp()
930 session->tmf_state = TMF_SUCCESS; in iscsi_tmf_rsp()
932 session->tmf_state = TMF_NOT_FOUND; in iscsi_tmf_rsp()
934 session->tmf_state = TMF_FAILED; in iscsi_tmf_rsp()
935 wake_up(&session->ehwait); in iscsi_tmf_rsp()
1053 spin_unlock(&conn->session->back_lock); in iscsi_handle_reject()
1054 spin_lock(&conn->session->frwd_lock); in iscsi_handle_reject()
1057 spin_unlock(&conn->session->frwd_lock); in iscsi_handle_reject()
1058 spin_lock(&conn->session->back_lock); in iscsi_handle_reject()
1099 struct iscsi_session *session = conn->session; in iscsi_itt_to_task() local
1105 if (session->tt->parse_pdu_itt) in iscsi_itt_to_task()
1106 session->tt->parse_pdu_itt(conn, itt, &i, NULL); in iscsi_itt_to_task()
1109 if (i >= session->cmds_max) in iscsi_itt_to_task()
1112 return session->cmds[i]; in iscsi_itt_to_task()
1130 struct iscsi_session *session = conn->session; in __iscsi_complete_pdu() local
1145 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n", in __iscsi_complete_pdu()
1149 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1162 spin_unlock(&session->back_lock); in __iscsi_complete_pdu()
1163 spin_lock(&session->frwd_lock); in __iscsi_complete_pdu()
1165 spin_unlock(&session->frwd_lock); in __iscsi_complete_pdu()
1166 spin_lock(&session->back_lock); in __iscsi_complete_pdu()
1217 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1226 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1233 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1243 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1273 spin_lock(&conn->session->back_lock); in iscsi_complete_pdu()
1275 spin_unlock(&conn->session->back_lock); in iscsi_complete_pdu()
1282 struct iscsi_session *session = conn->session; in iscsi_verify_itt() local
1288 if (session->tt->parse_pdu_itt) in iscsi_verify_itt()
1289 session->tt->parse_pdu_itt(conn, itt, &i, &age); in iscsi_verify_itt()
1295 if (age != session->age) { in iscsi_verify_itt()
1298 (__force u32)itt, session->age); in iscsi_verify_itt()
1302 if (i >= session->cmds_max) { in iscsi_verify_itt()
1305 "%u.\n", i, session->cmds_max); in iscsi_verify_itt()
1332 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1333 iscsi_session_printk(KERN_ERR, conn->session, in iscsi_itt_to_ctask()
1335 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1343 void iscsi_session_failure(struct iscsi_session *session, in iscsi_session_failure() argument
1348 spin_lock_bh(&session->frwd_lock); in iscsi_session_failure()
1349 conn = session->leadconn; in iscsi_session_failure()
1350 if (session->state == ISCSI_STATE_TERMINATE || !conn) { in iscsi_session_failure()
1351 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1356 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1372 struct iscsi_session *session = conn->session; in iscsi_set_conn_failed() local
1374 if (session->state == ISCSI_STATE_FAILED) in iscsi_set_conn_failed()
1378 session->state = ISCSI_STATE_FAILED; in iscsi_set_conn_failed()
1387 struct iscsi_session *session = conn->session; in iscsi_conn_failure() local
1390 spin_lock_bh(&session->frwd_lock); in iscsi_conn_failure()
1392 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1401 struct iscsi_session *session = conn->session; in iscsi_check_cmdsn_window_closed() local
1406 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) { in iscsi_check_cmdsn_window_closed()
1407 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn " in iscsi_check_cmdsn_window_closed()
1409 session->exp_cmdsn, session->max_cmdsn, in iscsi_check_cmdsn_window_closed()
1410 session->cmdsn, session->queued_cmdsn); in iscsi_check_cmdsn_window_closed()
1424 spin_lock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1426 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1430 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1431 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1432 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1433 spin_lock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1440 spin_lock(&conn->session->back_lock); in iscsi_xmit_task()
1442 spin_unlock(&conn->session->back_lock); in iscsi_xmit_task()
1484 spin_lock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1486 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); in iscsi_data_xmit()
1487 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1511 spin_lock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1513 spin_unlock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1530 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) { in iscsi_data_xmit()
1561 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_data_xmit()
1581 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1585 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1607 if (!kfifo_out(&conn->session->cmdpool.queue, in iscsi_alloc_task()
1611 sc->SCp.phase = conn->session->age; in iscsi_alloc_task()
1644 struct iscsi_session *session; in iscsi_queuecommand() local
1654 session = cls_session->dd_data; in iscsi_queuecommand()
1655 spin_lock_bh(&session->frwd_lock); in iscsi_queuecommand()
1663 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_queuecommand()
1670 switch (session->state) { in iscsi_queuecommand()
1705 conn = session->leadconn; in iscsi_queuecommand()
1740 if (session->tt->xmit_task(task)) { in iscsi_queuecommand()
1741 session->cmdsn--; in iscsi_queuecommand()
1752 session->queued_cmdsn++; in iscsi_queuecommand()
1753 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1757 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1759 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1761 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1762 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n", in iscsi_queuecommand()
1767 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1769 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1771 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1772 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n", in iscsi_queuecommand()
1783 struct iscsi_session *session = cls_session->dd_data; in iscsi_target_alloc() local
1785 starget->can_queue = session->scsi_cmds_max; in iscsi_target_alloc()
1792 struct iscsi_session *session = from_timer(session, t, tmf_timer); in iscsi_tmf_timedout() local
1794 spin_lock(&session->frwd_lock); in iscsi_tmf_timedout()
1795 if (session->tmf_state == TMF_QUEUED) { in iscsi_tmf_timedout()
1796 session->tmf_state = TMF_TIMEDOUT; in iscsi_tmf_timedout()
1797 ISCSI_DBG_EH(session, "tmf timedout\n"); in iscsi_tmf_timedout()
1799 wake_up(&session->ehwait); in iscsi_tmf_timedout()
1801 spin_unlock(&session->frwd_lock); in iscsi_tmf_timedout()
1807 __must_hold(&session->frwd_lock) in iscsi_exec_task_mgmt_fn()
1809 struct iscsi_session *session = conn->session; in iscsi_exec_task_mgmt_fn() local
1815 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1818 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1822 session->tmf_timer.expires = timeout * HZ + jiffies; in iscsi_exec_task_mgmt_fn()
1823 add_timer(&session->tmf_timer); in iscsi_exec_task_mgmt_fn()
1824 ISCSI_DBG_EH(session, "tmf set timeout\n"); in iscsi_exec_task_mgmt_fn()
1826 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1827 mutex_unlock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1837 wait_event_interruptible(session->ehwait, age != session->age || in iscsi_exec_task_mgmt_fn()
1838 session->state != ISCSI_STATE_LOGGED_IN || in iscsi_exec_task_mgmt_fn()
1839 session->tmf_state != TMF_QUEUED); in iscsi_exec_task_mgmt_fn()
1842 del_timer_sync(&session->tmf_timer); in iscsi_exec_task_mgmt_fn()
1844 mutex_lock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1845 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1847 if (age != session->age || in iscsi_exec_task_mgmt_fn()
1848 session->state != ISCSI_STATE_LOGGED_IN) in iscsi_exec_task_mgmt_fn()
1862 for (i = 0; i < conn->session->cmds_max; i++) { in fail_scsi_tasks()
1863 task = conn->session->cmds[i]; in fail_scsi_tasks()
1870 ISCSI_DBG_SESSION(conn->session, in fail_scsi_tasks()
1890 spin_lock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1892 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1906 struct Scsi_Host *shost = conn->session->host; in iscsi_suspend_tx()
1942 struct iscsi_session *session; in iscsi_eh_cmd_timed_out() local
1947 session = cls_session->dd_data; in iscsi_eh_cmd_timed_out()
1949 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); in iscsi_eh_cmd_timed_out()
1951 spin_lock_bh(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
1962 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_eh_cmd_timed_out()
1972 ISCSI_DBG_EH(session, "sc on shutdown, handled\n"); in iscsi_eh_cmd_timed_out()
1984 conn = session->leadconn; in iscsi_eh_cmd_timed_out()
1999 ISCSI_DBG_EH(session, "Command making progress. Asking " in iscsi_eh_cmd_timed_out()
2019 for (i = 0; i < conn->session->cmds_max; i++) { in iscsi_eh_cmd_timed_out()
2020 running_task = conn->session->cmds[i]; in iscsi_eh_cmd_timed_out()
2044 ISCSI_DBG_EH(session, "Command has not made progress " in iscsi_eh_cmd_timed_out()
2078 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
2079 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? in iscsi_eh_cmd_timed_out()
2088 struct iscsi_session *session = conn->session; in iscsi_check_transport_timeouts() local
2091 spin_lock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2092 if (session->state != ISCSI_STATE_LOGGED_IN) in iscsi_check_transport_timeouts()
2108 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2126 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2140 struct iscsi_session *session; in iscsi_conn_unbind() local
2147 session = conn->session; in iscsi_conn_unbind()
2154 mutex_lock(&session->eh_mutex); in iscsi_conn_unbind()
2159 spin_lock_bh(&session->frwd_lock); in iscsi_conn_unbind()
2166 if (session->state == ISCSI_STATE_LOGGED_IN) in iscsi_conn_unbind()
2169 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_unbind()
2170 mutex_unlock(&session->eh_mutex); in iscsi_conn_unbind()
2189 struct iscsi_session *session; in iscsi_eh_abort() local
2196 session = cls_session->dd_data; in iscsi_eh_abort()
2198 ISCSI_DBG_EH(session, "aborting sc %p\n", sc); in iscsi_eh_abort()
2200 mutex_lock(&session->eh_mutex); in iscsi_eh_abort()
2201 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2207 ISCSI_DBG_EH(session, "sc never reached iscsi layer or " in iscsi_eh_abort()
2209 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2210 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2218 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN || in iscsi_eh_abort()
2219 sc->SCp.phase != session->age) { in iscsi_eh_abort()
2220 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2221 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2222 ISCSI_DBG_EH(session, "failing abort due to dropped " in iscsi_eh_abort()
2227 conn = session->leadconn; in iscsi_eh_abort()
2229 age = session->age; in iscsi_eh_abort()
2232 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2237 ISCSI_DBG_EH(session, "sc completed while abort in progress\n"); in iscsi_eh_abort()
2247 if (session->tmf_state != TMF_INITIAL) in iscsi_eh_abort()
2249 session->tmf_state = TMF_QUEUED; in iscsi_eh_abort()
2251 hdr = &session->tmhdr; in iscsi_eh_abort()
2254 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) in iscsi_eh_abort()
2257 switch (session->tmf_state) { in iscsi_eh_abort()
2259 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2270 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2272 session->tmf_state = TMF_INITIAL; in iscsi_eh_abort()
2274 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2278 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2283 session->tmf_state = TMF_INITIAL; in iscsi_eh_abort()
2286 ISCSI_DBG_EH(session, "sc completed while abort in " in iscsi_eh_abort()
2292 session->tmf_state = TMF_INITIAL; in iscsi_eh_abort()
2297 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2299 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2301 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2305 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2307 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc, in iscsi_eh_abort()
2309 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2327 struct iscsi_session *session; in iscsi_eh_device_reset() local
2333 session = cls_session->dd_data; in iscsi_eh_device_reset()
2335 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc, in iscsi_eh_device_reset()
2338 mutex_lock(&session->eh_mutex); in iscsi_eh_device_reset()
2339 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2344 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_device_reset()
2346 conn = session->leadconn; in iscsi_eh_device_reset()
2349 if (session->tmf_state != TMF_INITIAL) in iscsi_eh_device_reset()
2351 session->tmf_state = TMF_QUEUED; in iscsi_eh_device_reset()
2353 hdr = &session->tmhdr; in iscsi_eh_device_reset()
2356 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_device_reset()
2357 session->lu_reset_timeout)) { in iscsi_eh_device_reset()
2362 switch (session->tmf_state) { in iscsi_eh_device_reset()
2366 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2370 session->tmf_state = TMF_INITIAL; in iscsi_eh_device_reset()
2375 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2379 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2382 session->tmf_state = TMF_INITIAL; in iscsi_eh_device_reset()
2383 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2389 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2391 ISCSI_DBG_EH(session, "dev reset result = %s\n", in iscsi_eh_device_reset()
2393 mutex_unlock(&session->eh_mutex); in iscsi_eh_device_reset()
2400 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_recovery_timedout() local
2402 spin_lock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2403 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_session_recovery_timedout()
2404 session->state = ISCSI_STATE_RECOVERY_FAILED; in iscsi_session_recovery_timedout()
2405 wake_up(&session->ehwait); in iscsi_session_recovery_timedout()
2407 spin_unlock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2421 struct iscsi_session *session; in iscsi_eh_session_reset() local
2425 session = cls_session->dd_data; in iscsi_eh_session_reset()
2426 conn = session->leadconn; in iscsi_eh_session_reset()
2428 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2429 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2430 if (session->state == ISCSI_STATE_TERMINATE) { in iscsi_eh_session_reset()
2432 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2434 "%s [age %d]\n", session->targetname, in iscsi_eh_session_reset()
2435 session->age); in iscsi_eh_session_reset()
2436 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2437 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2441 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2442 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2449 ISCSI_DBG_EH(session, "wait for relogin\n"); in iscsi_eh_session_reset()
2450 wait_event_interruptible(session->ehwait, in iscsi_eh_session_reset()
2451 session->state == ISCSI_STATE_TERMINATE || in iscsi_eh_session_reset()
2452 session->state == ISCSI_STATE_LOGGED_IN || in iscsi_eh_session_reset()
2453 session->state == ISCSI_STATE_RECOVERY_FAILED); in iscsi_eh_session_reset()
2457 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2458 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2459 if (session->state == ISCSI_STATE_LOGGED_IN) { in iscsi_eh_session_reset()
2460 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2462 session->targetname, conn->persistent_address); in iscsi_eh_session_reset()
2465 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2466 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2489 struct iscsi_session *session; in iscsi_eh_target_reset() local
2495 session = cls_session->dd_data; in iscsi_eh_target_reset()
2497 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc, in iscsi_eh_target_reset()
2498 session->targetname); in iscsi_eh_target_reset()
2500 mutex_lock(&session->eh_mutex); in iscsi_eh_target_reset()
2501 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2506 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_target_reset()
2508 conn = session->leadconn; in iscsi_eh_target_reset()
2511 if (session->tmf_state != TMF_INITIAL) in iscsi_eh_target_reset()
2513 session->tmf_state = TMF_QUEUED; in iscsi_eh_target_reset()
2515 hdr = &session->tmhdr; in iscsi_eh_target_reset()
2518 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_target_reset()
2519 session->tgt_reset_timeout)) { in iscsi_eh_target_reset()
2524 switch (session->tmf_state) { in iscsi_eh_target_reset()
2528 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2532 session->tmf_state = TMF_INITIAL; in iscsi_eh_target_reset()
2537 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2541 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2544 session->tmf_state = TMF_INITIAL; in iscsi_eh_target_reset()
2545 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2551 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2553 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname, in iscsi_eh_target_reset()
2555 mutex_unlock(&session->eh_mutex); in iscsi_eh_target_reset()
2784 struct iscsi_session *session; in iscsi_session_setup() local
2834 session = cls_session->dd_data; in iscsi_session_setup()
2835 session->cls_session = cls_session; in iscsi_session_setup()
2836 session->host = shost; in iscsi_session_setup()
2837 session->state = ISCSI_STATE_FREE; in iscsi_session_setup()
2838 session->fast_abort = 1; in iscsi_session_setup()
2839 session->tgt_reset_timeout = 30; in iscsi_session_setup()
2840 session->lu_reset_timeout = 15; in iscsi_session_setup()
2841 session->abort_timeout = 10; in iscsi_session_setup()
2842 session->scsi_cmds_max = scsi_cmds; in iscsi_session_setup()
2843 session->cmds_max = total_cmds; in iscsi_session_setup()
2844 session->queued_cmdsn = session->cmdsn = initial_cmdsn; in iscsi_session_setup()
2845 session->exp_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2846 session->max_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2847 session->max_r2t = 1; in iscsi_session_setup()
2848 session->tt = iscsit; in iscsi_session_setup()
2849 session->dd_data = cls_session->dd_data + sizeof(*session); in iscsi_session_setup()
2851 session->tmf_state = TMF_INITIAL; in iscsi_session_setup()
2852 timer_setup(&session->tmf_timer, iscsi_tmf_timedout, 0); in iscsi_session_setup()
2853 mutex_init(&session->eh_mutex); in iscsi_session_setup()
2855 spin_lock_init(&session->frwd_lock); in iscsi_session_setup()
2856 spin_lock_init(&session->back_lock); in iscsi_session_setup()
2859 if (iscsi_pool_init(&session->cmdpool, session->cmds_max, in iscsi_session_setup()
2860 (void***)&session->cmds, in iscsi_session_setup()
2865 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { in iscsi_session_setup()
2866 struct iscsi_task *task = session->cmds[cmd_i]; in iscsi_session_setup()
2886 iscsi_pool_free(&session->cmdpool); in iscsi_session_setup()
2901 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_teardown() local
2903 struct Scsi_Host *shost = session->host; in iscsi_session_teardown()
2905 iscsi_pool_free(&session->cmdpool); in iscsi_session_teardown()
2909 kfree(session->password); in iscsi_session_teardown()
2910 kfree(session->password_in); in iscsi_session_teardown()
2911 kfree(session->username); in iscsi_session_teardown()
2912 kfree(session->username_in); in iscsi_session_teardown()
2913 kfree(session->targetname); in iscsi_session_teardown()
2914 kfree(session->targetalias); in iscsi_session_teardown()
2915 kfree(session->initiatorname); in iscsi_session_teardown()
2916 kfree(session->boot_root); in iscsi_session_teardown()
2917 kfree(session->boot_nic); in iscsi_session_teardown()
2918 kfree(session->boot_target); in iscsi_session_teardown()
2919 kfree(session->ifacename); in iscsi_session_teardown()
2920 kfree(session->portal_type); in iscsi_session_teardown()
2921 kfree(session->discovery_parent_type); in iscsi_session_teardown()
2940 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_setup() local
2953 conn->session = session; in iscsi_conn_setup()
2968 spin_lock_bh(&session->frwd_lock); in iscsi_conn_setup()
2969 if (!kfifo_out(&session->cmdpool.queue, in iscsi_conn_setup()
2972 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2975 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2983 init_waitqueue_head(&session->ehwait); in iscsi_conn_setup()
2988 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_setup()
3006 struct iscsi_session *session = conn->session; in iscsi_conn_teardown() local
3012 mutex_lock(&session->eh_mutex); in iscsi_conn_teardown()
3013 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
3015 if (session->leadconn == conn) { in iscsi_conn_teardown()
3019 session->state = ISCSI_STATE_TERMINATE; in iscsi_conn_teardown()
3020 wake_up(&session->ehwait); in iscsi_conn_teardown()
3022 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
3027 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
3031 spin_lock_bh(&session->back_lock); in iscsi_conn_teardown()
3032 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_teardown()
3034 spin_unlock_bh(&session->back_lock); in iscsi_conn_teardown()
3035 if (session->leadconn == conn) in iscsi_conn_teardown()
3036 session->leadconn = NULL; in iscsi_conn_teardown()
3037 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
3038 mutex_unlock(&session->eh_mutex); in iscsi_conn_teardown()
3049 struct iscsi_session *session = conn->session; in iscsi_conn_start() local
3051 if (!session) { in iscsi_conn_start()
3057 if ((session->imm_data_en || !session->initial_r2t_en) && in iscsi_conn_start()
3058 session->first_burst > session->max_burst) { in iscsi_conn_start()
3061 session->first_burst, session->max_burst); in iscsi_conn_start()
3077 spin_lock_bh(&session->frwd_lock); in iscsi_conn_start()
3079 session->state = ISCSI_STATE_LOGGED_IN; in iscsi_conn_start()
3080 session->queued_cmdsn = session->cmdsn; in iscsi_conn_start()
3095 session->tmf_state = TMF_INITIAL; in iscsi_conn_start()
3096 session->age++; in iscsi_conn_start()
3097 if (session->age == 16) in iscsi_conn_start()
3098 session->age = 0; in iscsi_conn_start()
3106 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_start()
3108 iscsi_unblock_session(session->cls_session); in iscsi_conn_start()
3109 wake_up(&session->ehwait); in iscsi_conn_start()
3115 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn) in fail_mgmt_tasks() argument
3120 for (i = 0; i < conn->session->cmds_max; i++) { in fail_mgmt_tasks()
3121 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3128 ISCSI_DBG_SESSION(conn->session, in fail_mgmt_tasks()
3134 spin_lock_bh(&session->back_lock); in fail_mgmt_tasks()
3136 spin_unlock_bh(&session->back_lock); in fail_mgmt_tasks()
3143 struct iscsi_session *session = conn->session; in iscsi_conn_stop() local
3146 mutex_lock(&session->eh_mutex); in iscsi_conn_stop()
3147 spin_lock_bh(&session->frwd_lock); in iscsi_conn_stop()
3149 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_stop()
3150 mutex_unlock(&session->eh_mutex); in iscsi_conn_stop()
3160 session->state = ISCSI_STATE_TERMINATE; in iscsi_conn_stop()
3162 session->state = ISCSI_STATE_IN_RECOVERY; in iscsi_conn_stop()
3166 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_stop()
3171 spin_lock_bh(&session->frwd_lock); in iscsi_conn_stop()
3173 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_stop()
3184 if (session->state == ISCSI_STATE_IN_RECOVERY && in iscsi_conn_stop()
3186 ISCSI_DBG_SESSION(session, "blocking session\n"); in iscsi_conn_stop()
3187 iscsi_block_session(session->cls_session); in iscsi_conn_stop()
3194 spin_lock_bh(&session->frwd_lock); in iscsi_conn_stop()
3196 fail_mgmt_tasks(session, conn); in iscsi_conn_stop()
3197 memset(&session->tmhdr, 0, sizeof(session->tmhdr)); in iscsi_conn_stop()
3198 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_stop()
3199 mutex_unlock(&session->eh_mutex); in iscsi_conn_stop()
3206 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_bind() local
3209 spin_lock_bh(&session->frwd_lock); in iscsi_conn_bind()
3211 session->leadconn = conn; in iscsi_conn_bind()
3212 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_bind()
3246 struct iscsi_session *session = conn->session; in iscsi_set_param() local
3251 sscanf(buf, "%d", &session->fast_abort); in iscsi_set_param()
3254 sscanf(buf, "%d", &session->abort_timeout); in iscsi_set_param()
3257 sscanf(buf, "%d", &session->lu_reset_timeout); in iscsi_set_param()
3260 sscanf(buf, "%d", &session->tgt_reset_timeout); in iscsi_set_param()
3281 sscanf(buf, "%d", &session->initial_r2t_en); in iscsi_set_param()
3284 sscanf(buf, "%hu", &session->max_r2t); in iscsi_set_param()
3287 sscanf(buf, "%d", &session->imm_data_en); in iscsi_set_param()
3290 sscanf(buf, "%d", &session->first_burst); in iscsi_set_param()
3293 sscanf(buf, "%d", &session->max_burst); in iscsi_set_param()
3296 sscanf(buf, "%d", &session->pdu_inorder_en); in iscsi_set_param()
3299 sscanf(buf, "%d", &session->dataseq_inorder_en); in iscsi_set_param()
3302 sscanf(buf, "%d", &session->erl); in iscsi_set_param()
3308 return iscsi_switch_str_param(&session->username, buf); in iscsi_set_param()
3310 return iscsi_switch_str_param(&session->username_in, buf); in iscsi_set_param()
3312 return iscsi_switch_str_param(&session->password, buf); in iscsi_set_param()
3314 return iscsi_switch_str_param(&session->password_in, buf); in iscsi_set_param()
3316 return iscsi_switch_str_param(&session->targetname, buf); in iscsi_set_param()
3318 return iscsi_switch_str_param(&session->targetalias, buf); in iscsi_set_param()
3320 sscanf(buf, "%d", &session->tpgt); in iscsi_set_param()
3328 return iscsi_switch_str_param(&session->ifacename, buf); in iscsi_set_param()
3330 return iscsi_switch_str_param(&session->initiatorname, buf); in iscsi_set_param()
3332 return iscsi_switch_str_param(&session->boot_root, buf); in iscsi_set_param()
3334 return iscsi_switch_str_param(&session->boot_nic, buf); in iscsi_set_param()
3336 return iscsi_switch_str_param(&session->boot_target, buf); in iscsi_set_param()
3338 return iscsi_switch_str_param(&session->portal_type, buf); in iscsi_set_param()
3340 return iscsi_switch_str_param(&session->discovery_parent_type, in iscsi_set_param()
3344 session->discovery_sess = !!val; in iscsi_set_param()
3359 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_get_param() local
3364 len = sysfs_emit(buf, "%d\n", session->fast_abort); in iscsi_session_get_param()
3367 len = sysfs_emit(buf, "%d\n", session->abort_timeout); in iscsi_session_get_param()
3370 len = sysfs_emit(buf, "%d\n", session->lu_reset_timeout); in iscsi_session_get_param()
3373 len = sysfs_emit(buf, "%d\n", session->tgt_reset_timeout); in iscsi_session_get_param()
3376 len = sysfs_emit(buf, "%d\n", session->initial_r2t_en); in iscsi_session_get_param()
3379 len = sysfs_emit(buf, "%hu\n", session->max_r2t); in iscsi_session_get_param()
3382 len = sysfs_emit(buf, "%d\n", session->imm_data_en); in iscsi_session_get_param()
3385 len = sysfs_emit(buf, "%u\n", session->first_burst); in iscsi_session_get_param()
3388 len = sysfs_emit(buf, "%u\n", session->max_burst); in iscsi_session_get_param()
3391 len = sysfs_emit(buf, "%d\n", session->pdu_inorder_en); in iscsi_session_get_param()
3394 len = sysfs_emit(buf, "%d\n", session->dataseq_inorder_en); in iscsi_session_get_param()
3397 len = sysfs_emit(buf, "%d\n", session->def_taskmgmt_tmo); in iscsi_session_get_param()
3400 len = sysfs_emit(buf, "%d\n", session->erl); in iscsi_session_get_param()
3403 len = sysfs_emit(buf, "%s\n", session->targetname); in iscsi_session_get_param()
3406 len = sysfs_emit(buf, "%s\n", session->targetalias); in iscsi_session_get_param()
3409 len = sysfs_emit(buf, "%d\n", session->tpgt); in iscsi_session_get_param()
3412 len = sysfs_emit(buf, "%s\n", session->username); in iscsi_session_get_param()
3415 len = sysfs_emit(buf, "%s\n", session->username_in); in iscsi_session_get_param()
3418 len = sysfs_emit(buf, "%s\n", session->password); in iscsi_session_get_param()
3421 len = sysfs_emit(buf, "%s\n", session->password_in); in iscsi_session_get_param()
3424 len = sysfs_emit(buf, "%s\n", session->ifacename); in iscsi_session_get_param()
3427 len = sysfs_emit(buf, "%s\n", session->initiatorname); in iscsi_session_get_param()
3430 len = sysfs_emit(buf, "%s\n", session->boot_root); in iscsi_session_get_param()
3433 len = sysfs_emit(buf, "%s\n", session->boot_nic); in iscsi_session_get_param()
3436 len = sysfs_emit(buf, "%s\n", session->boot_target); in iscsi_session_get_param()
3439 len = sysfs_emit(buf, "%u\n", session->auto_snd_tgt_disable); in iscsi_session_get_param()
3442 len = sysfs_emit(buf, "%u\n", session->discovery_sess); in iscsi_session_get_param()
3445 len = sysfs_emit(buf, "%s\n", session->portal_type); in iscsi_session_get_param()
3448 len = sysfs_emit(buf, "%u\n", session->chap_auth_en); in iscsi_session_get_param()
3451 len = sysfs_emit(buf, "%u\n", session->discovery_logout_en); in iscsi_session_get_param()
3454 len = sysfs_emit(buf, "%u\n", session->bidi_chap_en); in iscsi_session_get_param()
3457 len = sysfs_emit(buf, "%u\n", session->discovery_auth_optional); in iscsi_session_get_param()
3460 len = sysfs_emit(buf, "%d\n", session->time2wait); in iscsi_session_get_param()
3463 len = sysfs_emit(buf, "%d\n", session->time2retain); in iscsi_session_get_param()
3466 len = sysfs_emit(buf, "%u\n", session->tsid); in iscsi_session_get_param()
3470 session->isid[0], session->isid[1], in iscsi_session_get_param()
3471 session->isid[2], session->isid[3], in iscsi_session_get_param()
3472 session->isid[4], session->isid[5]); in iscsi_session_get_param()
3475 len = sysfs_emit(buf, "%u\n", session->discovery_parent_idx); in iscsi_session_get_param()
3478 if (session->discovery_parent_type) in iscsi_session_get_param()
3480 session->discovery_parent_type); in iscsi_session_get_param()