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()
748 if (session->tt->xmit_task(task)) in __iscsi_conn_send_pdu()
761 spin_lock(&session->back_lock); in __iscsi_conn_send_pdu()
763 spin_unlock(&session->back_lock); in __iscsi_conn_send_pdu()
771 struct iscsi_session *session = conn->session; in iscsi_conn_send_pdu() local
774 spin_lock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
777 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_send_pdu()
798 struct iscsi_session *session = conn->session; in iscsi_scsi_cmd_rsp() local
801 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr); in iscsi_scsi_cmd_rsp()
815 BUG_ON(!session->tt->check_protection); in iscsi_scsi_cmd_rsp()
817 ascq = session->tt->check_protection(task, &sector); in iscsi_scsi_cmd_rsp()
853 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n", in iscsi_scsi_cmd_rsp()
876 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n", in iscsi_scsi_cmd_rsp()
901 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr); in iscsi_data_in_rsp()
916 ISCSI_DBG_SESSION(conn->session, "data in with status done " in iscsi_data_in_rsp()
1057 spin_unlock(&conn->session->back_lock); in iscsi_handle_reject()
1058 spin_lock(&conn->session->frwd_lock); in iscsi_handle_reject()
1061 spin_unlock(&conn->session->frwd_lock); in iscsi_handle_reject()
1062 spin_lock(&conn->session->back_lock); in iscsi_handle_reject()
1103 struct iscsi_session *session = conn->session; in iscsi_itt_to_task() local
1109 if (session->tt->parse_pdu_itt) in iscsi_itt_to_task()
1110 session->tt->parse_pdu_itt(conn, itt, &i, NULL); in iscsi_itt_to_task()
1113 if (i >= session->cmds_max) in iscsi_itt_to_task()
1116 return session->cmds[i]; in iscsi_itt_to_task()
1134 struct iscsi_session *session = conn->session; in __iscsi_complete_pdu() local
1149 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n", in __iscsi_complete_pdu()
1153 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1166 spin_unlock(&session->back_lock); in __iscsi_complete_pdu()
1167 spin_lock(&session->frwd_lock); in __iscsi_complete_pdu()
1169 spin_unlock(&session->frwd_lock); in __iscsi_complete_pdu()
1170 spin_lock(&session->back_lock); in __iscsi_complete_pdu()
1221 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()
1237 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1247 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1277 spin_lock(&conn->session->back_lock); in iscsi_complete_pdu()
1279 spin_unlock(&conn->session->back_lock); in iscsi_complete_pdu()
1286 struct iscsi_session *session = conn->session; in iscsi_verify_itt() local
1292 if (session->tt->parse_pdu_itt) in iscsi_verify_itt()
1293 session->tt->parse_pdu_itt(conn, itt, &i, &age); in iscsi_verify_itt()
1299 if (age != session->age) { in iscsi_verify_itt()
1302 (__force u32)itt, session->age); in iscsi_verify_itt()
1306 if (i >= session->cmds_max) { in iscsi_verify_itt()
1309 "%u.\n", i, session->cmds_max); in iscsi_verify_itt()
1336 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1337 iscsi_session_printk(KERN_ERR, conn->session, in iscsi_itt_to_ctask()
1339 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1347 void iscsi_session_failure(struct iscsi_session *session, in iscsi_session_failure() argument
1353 spin_lock_bh(&session->frwd_lock); in iscsi_session_failure()
1354 conn = session->leadconn; in iscsi_session_failure()
1355 if (session->state == ISCSI_STATE_TERMINATE || !conn) { in iscsi_session_failure()
1356 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1361 spin_unlock_bh(&session->frwd_lock); in iscsi_session_failure()
1379 struct iscsi_session *session = conn->session; in iscsi_conn_failure() local
1381 spin_lock_bh(&session->frwd_lock); in iscsi_conn_failure()
1382 if (session->state == ISCSI_STATE_FAILED) { in iscsi_conn_failure()
1383 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1388 session->state = ISCSI_STATE_FAILED; in iscsi_conn_failure()
1389 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_failure()
1399 struct iscsi_session *session = conn->session; in iscsi_check_cmdsn_window_closed() local
1404 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) { in iscsi_check_cmdsn_window_closed()
1405 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn " in iscsi_check_cmdsn_window_closed()
1407 session->exp_cmdsn, session->max_cmdsn, in iscsi_check_cmdsn_window_closed()
1408 session->cmdsn, session->queued_cmdsn); in iscsi_check_cmdsn_window_closed()
1422 spin_lock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1424 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1428 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1429 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1430 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1431 spin_lock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1438 spin_lock(&conn->session->back_lock); in iscsi_xmit_task()
1440 spin_unlock(&conn->session->back_lock); in iscsi_xmit_task()
1482 spin_lock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1484 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); in iscsi_data_xmit()
1485 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1509 spin_lock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1511 spin_unlock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1528 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) { in iscsi_data_xmit()
1564 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_data_xmit()
1584 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1588 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1610 if (!kfifo_out(&conn->session->cmdpool.queue, in iscsi_alloc_task()
1614 sc->SCp.phase = conn->session->age; in iscsi_alloc_task()
1647 struct iscsi_session *session; in iscsi_queuecommand() local
1657 session = cls_session->dd_data; in iscsi_queuecommand()
1658 spin_lock_bh(&session->frwd_lock); in iscsi_queuecommand()
1666 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_queuecommand()
1673 switch (session->state) { in iscsi_queuecommand()
1708 conn = session->leadconn; in iscsi_queuecommand()
1743 if (session->tt->xmit_task(task)) { in iscsi_queuecommand()
1744 session->cmdsn--; in iscsi_queuecommand()
1755 session->queued_cmdsn++; in iscsi_queuecommand()
1756 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1760 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1762 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1764 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1765 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n", in iscsi_queuecommand()
1770 spin_lock_bh(&session->back_lock); in iscsi_queuecommand()
1772 spin_unlock_bh(&session->back_lock); in iscsi_queuecommand()
1774 spin_unlock_bh(&session->frwd_lock); in iscsi_queuecommand()
1775 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n", in iscsi_queuecommand()
1786 struct iscsi_session *session = cls_session->dd_data; in iscsi_target_alloc() local
1788 starget->can_queue = session->scsi_cmds_max; in iscsi_target_alloc()
1796 struct iscsi_session *session = conn->session; in iscsi_tmf_timedout() local
1798 spin_lock(&session->frwd_lock); in iscsi_tmf_timedout()
1801 ISCSI_DBG_EH(session, "tmf timedout\n"); in iscsi_tmf_timedout()
1805 spin_unlock(&session->frwd_lock); in iscsi_tmf_timedout()
1811 __must_hold(&session->frwd_lock) in iscsi_exec_task_mgmt_fn()
1813 struct iscsi_session *session = conn->session; in iscsi_exec_task_mgmt_fn() local
1819 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1822 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1828 ISCSI_DBG_EH(session, "tmf set timeout\n"); in iscsi_exec_task_mgmt_fn()
1830 spin_unlock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1831 mutex_unlock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1841 wait_event_interruptible(conn->ehwait, age != session->age || in iscsi_exec_task_mgmt_fn()
1842 session->state != ISCSI_STATE_LOGGED_IN || in iscsi_exec_task_mgmt_fn()
1848 mutex_lock(&session->eh_mutex); in iscsi_exec_task_mgmt_fn()
1849 spin_lock_bh(&session->frwd_lock); in iscsi_exec_task_mgmt_fn()
1851 if (age != session->age || in iscsi_exec_task_mgmt_fn()
1852 session->state != ISCSI_STATE_LOGGED_IN) in iscsi_exec_task_mgmt_fn()
1866 for (i = 0; i < conn->session->cmds_max; i++) { in fail_scsi_tasks()
1867 task = conn->session->cmds[i]; in fail_scsi_tasks()
1874 ISCSI_DBG_SESSION(conn->session, in fail_scsi_tasks()
1894 spin_lock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1896 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1910 struct Scsi_Host *shost = conn->session->host; in iscsi_suspend_tx()
1946 struct iscsi_session *session; in iscsi_eh_cmd_timed_out() local
1951 session = cls_session->dd_data; in iscsi_eh_cmd_timed_out()
1953 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); in iscsi_eh_cmd_timed_out()
1955 spin_lock_bh(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
1966 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_eh_cmd_timed_out()
1976 ISCSI_DBG_EH(session, "sc on shutdown, handled\n"); in iscsi_eh_cmd_timed_out()
1988 conn = session->leadconn; in iscsi_eh_cmd_timed_out()
2003 ISCSI_DBG_EH(session, "Command making progress. Asking " in iscsi_eh_cmd_timed_out()
2023 for (i = 0; i < conn->session->cmds_max; i++) { in iscsi_eh_cmd_timed_out()
2024 running_task = conn->session->cmds[i]; in iscsi_eh_cmd_timed_out()
2048 ISCSI_DBG_EH(session, "Command has not made progress " in iscsi_eh_cmd_timed_out()
2082 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_cmd_timed_out()
2083 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? in iscsi_eh_cmd_timed_out()
2092 struct iscsi_session *session = conn->session; in iscsi_check_transport_timeouts() local
2095 spin_lock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2096 if (session->state != ISCSI_STATE_LOGGED_IN) in iscsi_check_transport_timeouts()
2112 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2130 spin_unlock(&session->frwd_lock); in iscsi_check_transport_timeouts()
2148 struct iscsi_session *session; in iscsi_eh_abort() local
2155 session = cls_session->dd_data; in iscsi_eh_abort()
2157 ISCSI_DBG_EH(session, "aborting sc %p\n", sc); in iscsi_eh_abort()
2159 mutex_lock(&session->eh_mutex); in iscsi_eh_abort()
2160 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2166 ISCSI_DBG_EH(session, "sc never reached iscsi layer or " in iscsi_eh_abort()
2168 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2169 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2177 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN || in iscsi_eh_abort()
2178 sc->SCp.phase != session->age) { in iscsi_eh_abort()
2179 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2180 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2181 ISCSI_DBG_EH(session, "failing abort due to dropped " in iscsi_eh_abort()
2186 conn = session->leadconn; in iscsi_eh_abort()
2188 age = session->age; in iscsi_eh_abort()
2191 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2196 ISCSI_DBG_EH(session, "sc completed while abort in progress\n"); in iscsi_eh_abort()
2213 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) in iscsi_eh_abort()
2218 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2229 spin_lock_bh(&session->frwd_lock); in iscsi_eh_abort()
2233 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2237 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2245 ISCSI_DBG_EH(session, "sc completed while abort in " in iscsi_eh_abort()
2256 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2258 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n", in iscsi_eh_abort()
2260 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2264 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_abort()
2266 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc, in iscsi_eh_abort()
2268 mutex_unlock(&session->eh_mutex); in iscsi_eh_abort()
2286 struct iscsi_session *session; in iscsi_eh_device_reset() local
2292 session = cls_session->dd_data; in iscsi_eh_device_reset()
2294 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc, in iscsi_eh_device_reset()
2297 mutex_lock(&session->eh_mutex); in iscsi_eh_device_reset()
2298 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2303 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_device_reset()
2305 conn = session->leadconn; in iscsi_eh_device_reset()
2315 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_device_reset()
2316 session->lu_reset_timeout)) { in iscsi_eh_device_reset()
2325 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2334 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2338 spin_lock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2342 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2348 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_device_reset()
2350 ISCSI_DBG_EH(session, "dev reset result = %s\n", in iscsi_eh_device_reset()
2352 mutex_unlock(&session->eh_mutex); in iscsi_eh_device_reset()
2359 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_recovery_timedout() local
2361 spin_lock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2362 if (session->state != ISCSI_STATE_LOGGED_IN) { in iscsi_session_recovery_timedout()
2363 session->state = ISCSI_STATE_RECOVERY_FAILED; in iscsi_session_recovery_timedout()
2364 if (session->leadconn) in iscsi_session_recovery_timedout()
2365 wake_up(&session->leadconn->ehwait); in iscsi_session_recovery_timedout()
2367 spin_unlock_bh(&session->frwd_lock); in iscsi_session_recovery_timedout()
2381 struct iscsi_session *session; in iscsi_eh_session_reset() local
2385 session = cls_session->dd_data; in iscsi_eh_session_reset()
2386 conn = session->leadconn; in iscsi_eh_session_reset()
2388 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2389 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2390 if (session->state == ISCSI_STATE_TERMINATE) { in iscsi_eh_session_reset()
2392 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2394 "%s [age %d]\n", session->targetname, in iscsi_eh_session_reset()
2395 session->age); in iscsi_eh_session_reset()
2396 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2397 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2401 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2402 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2409 ISCSI_DBG_EH(session, "wait for relogin\n"); in iscsi_eh_session_reset()
2411 session->state == ISCSI_STATE_TERMINATE || in iscsi_eh_session_reset()
2412 session->state == ISCSI_STATE_LOGGED_IN || in iscsi_eh_session_reset()
2413 session->state == ISCSI_STATE_RECOVERY_FAILED); in iscsi_eh_session_reset()
2417 mutex_lock(&session->eh_mutex); in iscsi_eh_session_reset()
2418 spin_lock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2419 if (session->state == ISCSI_STATE_LOGGED_IN) { in iscsi_eh_session_reset()
2420 ISCSI_DBG_EH(session, in iscsi_eh_session_reset()
2422 session->targetname, conn->persistent_address); in iscsi_eh_session_reset()
2425 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_session_reset()
2426 mutex_unlock(&session->eh_mutex); in iscsi_eh_session_reset()
2449 struct iscsi_session *session; in iscsi_eh_target_reset() local
2455 session = cls_session->dd_data; in iscsi_eh_target_reset()
2457 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc, in iscsi_eh_target_reset()
2458 session->targetname); in iscsi_eh_target_reset()
2460 mutex_lock(&session->eh_mutex); in iscsi_eh_target_reset()
2461 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2466 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN) in iscsi_eh_target_reset()
2468 conn = session->leadconn; in iscsi_eh_target_reset()
2478 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_target_reset()
2479 session->tgt_reset_timeout)) { in iscsi_eh_target_reset()
2488 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2497 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2501 spin_lock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2505 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2511 spin_unlock_bh(&session->frwd_lock); in iscsi_eh_target_reset()
2513 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname, in iscsi_eh_target_reset()
2515 mutex_unlock(&session->eh_mutex); in iscsi_eh_target_reset()
2744 struct iscsi_session *session; in iscsi_session_setup() local
2794 session = cls_session->dd_data; in iscsi_session_setup()
2795 session->cls_session = cls_session; in iscsi_session_setup()
2796 session->host = shost; in iscsi_session_setup()
2797 session->state = ISCSI_STATE_FREE; in iscsi_session_setup()
2798 session->fast_abort = 1; in iscsi_session_setup()
2799 session->tgt_reset_timeout = 30; in iscsi_session_setup()
2800 session->lu_reset_timeout = 15; in iscsi_session_setup()
2801 session->abort_timeout = 10; in iscsi_session_setup()
2802 session->scsi_cmds_max = scsi_cmds; in iscsi_session_setup()
2803 session->cmds_max = total_cmds; in iscsi_session_setup()
2804 session->queued_cmdsn = session->cmdsn = initial_cmdsn; in iscsi_session_setup()
2805 session->exp_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2806 session->max_cmdsn = initial_cmdsn + 1; in iscsi_session_setup()
2807 session->max_r2t = 1; in iscsi_session_setup()
2808 session->tt = iscsit; in iscsi_session_setup()
2809 session->dd_data = cls_session->dd_data + sizeof(*session); in iscsi_session_setup()
2811 mutex_init(&session->eh_mutex); in iscsi_session_setup()
2812 spin_lock_init(&session->frwd_lock); in iscsi_session_setup()
2813 spin_lock_init(&session->back_lock); in iscsi_session_setup()
2816 if (iscsi_pool_init(&session->cmdpool, session->cmds_max, in iscsi_session_setup()
2817 (void***)&session->cmds, in iscsi_session_setup()
2822 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { in iscsi_session_setup()
2823 struct iscsi_task *task = session->cmds[cmd_i]; in iscsi_session_setup()
2843 iscsi_pool_free(&session->cmdpool); in iscsi_session_setup()
2858 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_teardown() local
2860 struct Scsi_Host *shost = session->host; in iscsi_session_teardown()
2862 iscsi_pool_free(&session->cmdpool); in iscsi_session_teardown()
2866 kfree(session->password); in iscsi_session_teardown()
2867 kfree(session->password_in); in iscsi_session_teardown()
2868 kfree(session->username); in iscsi_session_teardown()
2869 kfree(session->username_in); in iscsi_session_teardown()
2870 kfree(session->targetname); in iscsi_session_teardown()
2871 kfree(session->targetalias); in iscsi_session_teardown()
2872 kfree(session->initiatorname); in iscsi_session_teardown()
2873 kfree(session->boot_root); in iscsi_session_teardown()
2874 kfree(session->boot_nic); in iscsi_session_teardown()
2875 kfree(session->boot_target); in iscsi_session_teardown()
2876 kfree(session->ifacename); in iscsi_session_teardown()
2877 kfree(session->portal_type); in iscsi_session_teardown()
2878 kfree(session->discovery_parent_type); in iscsi_session_teardown()
2897 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_setup() local
2910 conn->session = session; in iscsi_conn_setup()
2926 spin_lock_bh(&session->frwd_lock); in iscsi_conn_setup()
2927 if (!kfifo_out(&session->cmdpool.queue, in iscsi_conn_setup()
2930 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2933 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_setup()
2947 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_setup()
2965 struct iscsi_session *session = conn->session; in iscsi_conn_teardown() local
2969 mutex_lock(&session->eh_mutex); in iscsi_conn_teardown()
2970 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2972 if (session->leadconn == conn) { in iscsi_conn_teardown()
2976 session->state = ISCSI_STATE_TERMINATE; in iscsi_conn_teardown()
2979 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2984 spin_lock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2990 spin_lock_bh(&session->back_lock); in iscsi_conn_teardown()
2991 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_teardown()
2993 spin_unlock_bh(&session->back_lock); in iscsi_conn_teardown()
2994 if (session->leadconn == conn) in iscsi_conn_teardown()
2995 session->leadconn = NULL; in iscsi_conn_teardown()
2996 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_teardown()
2997 mutex_unlock(&session->eh_mutex); in iscsi_conn_teardown()
3006 struct iscsi_session *session = conn->session; in iscsi_conn_start() local
3008 if (!session) { in iscsi_conn_start()
3014 if ((session->imm_data_en || !session->initial_r2t_en) && in iscsi_conn_start()
3015 session->first_burst > session->max_burst) { in iscsi_conn_start()
3018 session->first_burst, session->max_burst); in iscsi_conn_start()
3034 spin_lock_bh(&session->frwd_lock); in iscsi_conn_start()
3036 session->state = ISCSI_STATE_LOGGED_IN; in iscsi_conn_start()
3037 session->queued_cmdsn = session->cmdsn; in iscsi_conn_start()
3053 session->age++; in iscsi_conn_start()
3054 if (session->age == 16) in iscsi_conn_start()
3055 session->age = 0; in iscsi_conn_start()
3063 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_start()
3065 iscsi_unblock_session(session->cls_session); in iscsi_conn_start()
3072 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn) in fail_mgmt_tasks() argument
3077 for (i = 0; i < conn->session->cmds_max; i++) { in fail_mgmt_tasks()
3078 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3085 ISCSI_DBG_SESSION(conn->session, in fail_mgmt_tasks()
3091 spin_lock_bh(&session->back_lock); in fail_mgmt_tasks()
3093 spin_unlock_bh(&session->back_lock); in fail_mgmt_tasks()
3097 static void iscsi_start_session_recovery(struct iscsi_session *session, in iscsi_start_session_recovery() argument
3102 mutex_lock(&session->eh_mutex); in iscsi_start_session_recovery()
3103 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3105 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3106 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3116 session->state = ISCSI_STATE_TERMINATE; in iscsi_start_session_recovery()
3118 session->state = ISCSI_STATE_IN_RECOVERY; in iscsi_start_session_recovery()
3122 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3127 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3129 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3140 if (session->state == ISCSI_STATE_IN_RECOVERY && in iscsi_start_session_recovery()
3142 ISCSI_DBG_SESSION(session, "blocking session\n"); in iscsi_start_session_recovery()
3143 iscsi_block_session(session->cls_session); in iscsi_start_session_recovery()
3150 spin_lock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3152 fail_mgmt_tasks(session, conn); in iscsi_start_session_recovery()
3154 spin_unlock_bh(&session->frwd_lock); in iscsi_start_session_recovery()
3155 mutex_unlock(&session->eh_mutex); in iscsi_start_session_recovery()
3161 struct iscsi_session *session = conn->session; in iscsi_conn_stop() local
3176 iscsi_start_session_recovery(session, conn, flag); in iscsi_conn_stop()
3183 struct iscsi_session *session = cls_session->dd_data; in iscsi_conn_bind() local
3186 spin_lock_bh(&session->frwd_lock); in iscsi_conn_bind()
3188 session->leadconn = conn; in iscsi_conn_bind()
3189 spin_unlock_bh(&session->frwd_lock); in iscsi_conn_bind()
3223 struct iscsi_session *session = conn->session; in iscsi_set_param() local
3228 sscanf(buf, "%d", &session->fast_abort); in iscsi_set_param()
3231 sscanf(buf, "%d", &session->abort_timeout); in iscsi_set_param()
3234 sscanf(buf, "%d", &session->lu_reset_timeout); in iscsi_set_param()
3237 sscanf(buf, "%d", &session->tgt_reset_timeout); in iscsi_set_param()
3258 sscanf(buf, "%d", &session->initial_r2t_en); in iscsi_set_param()
3261 sscanf(buf, "%hu", &session->max_r2t); in iscsi_set_param()
3264 sscanf(buf, "%d", &session->imm_data_en); in iscsi_set_param()
3267 sscanf(buf, "%d", &session->first_burst); in iscsi_set_param()
3270 sscanf(buf, "%d", &session->max_burst); in iscsi_set_param()
3273 sscanf(buf, "%d", &session->pdu_inorder_en); in iscsi_set_param()
3276 sscanf(buf, "%d", &session->dataseq_inorder_en); in iscsi_set_param()
3279 sscanf(buf, "%d", &session->erl); in iscsi_set_param()
3285 return iscsi_switch_str_param(&session->username, buf); in iscsi_set_param()
3287 return iscsi_switch_str_param(&session->username_in, buf); in iscsi_set_param()
3289 return iscsi_switch_str_param(&session->password, buf); in iscsi_set_param()
3291 return iscsi_switch_str_param(&session->password_in, buf); in iscsi_set_param()
3293 return iscsi_switch_str_param(&session->targetname, buf); in iscsi_set_param()
3295 return iscsi_switch_str_param(&session->targetalias, buf); in iscsi_set_param()
3297 sscanf(buf, "%d", &session->tpgt); in iscsi_set_param()
3305 return iscsi_switch_str_param(&session->ifacename, buf); in iscsi_set_param()
3307 return iscsi_switch_str_param(&session->initiatorname, buf); in iscsi_set_param()
3309 return iscsi_switch_str_param(&session->boot_root, buf); in iscsi_set_param()
3311 return iscsi_switch_str_param(&session->boot_nic, buf); in iscsi_set_param()
3313 return iscsi_switch_str_param(&session->boot_target, buf); in iscsi_set_param()
3315 return iscsi_switch_str_param(&session->portal_type, buf); in iscsi_set_param()
3317 return iscsi_switch_str_param(&session->discovery_parent_type, in iscsi_set_param()
3321 session->discovery_sess = !!val; in iscsi_set_param()
3336 struct iscsi_session *session = cls_session->dd_data; in iscsi_session_get_param() local
3341 len = sprintf(buf, "%d\n", session->fast_abort); in iscsi_session_get_param()
3344 len = sprintf(buf, "%d\n", session->abort_timeout); in iscsi_session_get_param()
3347 len = sprintf(buf, "%d\n", session->lu_reset_timeout); in iscsi_session_get_param()
3350 len = sprintf(buf, "%d\n", session->tgt_reset_timeout); in iscsi_session_get_param()
3353 len = sprintf(buf, "%d\n", session->initial_r2t_en); in iscsi_session_get_param()
3356 len = sprintf(buf, "%hu\n", session->max_r2t); in iscsi_session_get_param()
3359 len = sprintf(buf, "%d\n", session->imm_data_en); in iscsi_session_get_param()
3362 len = sprintf(buf, "%u\n", session->first_burst); in iscsi_session_get_param()
3365 len = sprintf(buf, "%u\n", session->max_burst); in iscsi_session_get_param()
3368 len = sprintf(buf, "%d\n", session->pdu_inorder_en); in iscsi_session_get_param()
3371 len = sprintf(buf, "%d\n", session->dataseq_inorder_en); in iscsi_session_get_param()
3374 len = sprintf(buf, "%d\n", session->def_taskmgmt_tmo); in iscsi_session_get_param()
3377 len = sprintf(buf, "%d\n", session->erl); in iscsi_session_get_param()
3380 len = sprintf(buf, "%s\n", session->targetname); in iscsi_session_get_param()
3383 len = sprintf(buf, "%s\n", session->targetalias); in iscsi_session_get_param()
3386 len = sprintf(buf, "%d\n", session->tpgt); in iscsi_session_get_param()
3389 len = sprintf(buf, "%s\n", session->username); in iscsi_session_get_param()
3392 len = sprintf(buf, "%s\n", session->username_in); in iscsi_session_get_param()
3395 len = sprintf(buf, "%s\n", session->password); in iscsi_session_get_param()
3398 len = sprintf(buf, "%s\n", session->password_in); in iscsi_session_get_param()
3401 len = sprintf(buf, "%s\n", session->ifacename); in iscsi_session_get_param()
3404 len = sprintf(buf, "%s\n", session->initiatorname); in iscsi_session_get_param()
3407 len = sprintf(buf, "%s\n", session->boot_root); in iscsi_session_get_param()
3410 len = sprintf(buf, "%s\n", session->boot_nic); in iscsi_session_get_param()
3413 len = sprintf(buf, "%s\n", session->boot_target); in iscsi_session_get_param()
3416 len = sprintf(buf, "%u\n", session->auto_snd_tgt_disable); in iscsi_session_get_param()
3419 len = sprintf(buf, "%u\n", session->discovery_sess); in iscsi_session_get_param()
3422 len = sprintf(buf, "%s\n", session->portal_type); in iscsi_session_get_param()
3425 len = sprintf(buf, "%u\n", session->chap_auth_en); in iscsi_session_get_param()
3428 len = sprintf(buf, "%u\n", session->discovery_logout_en); in iscsi_session_get_param()
3431 len = sprintf(buf, "%u\n", session->bidi_chap_en); in iscsi_session_get_param()
3434 len = sprintf(buf, "%u\n", session->discovery_auth_optional); in iscsi_session_get_param()
3437 len = sprintf(buf, "%d\n", session->time2wait); in iscsi_session_get_param()
3440 len = sprintf(buf, "%d\n", session->time2retain); in iscsi_session_get_param()
3443 len = sprintf(buf, "%u\n", session->tsid); in iscsi_session_get_param()
3447 session->isid[0], session->isid[1], in iscsi_session_get_param()
3448 session->isid[2], session->isid[3], in iscsi_session_get_param()
3449 session->isid[4], session->isid[5]); in iscsi_session_get_param()
3452 len = sprintf(buf, "%u\n", session->discovery_parent_idx); in iscsi_session_get_param()
3455 if (session->discovery_parent_type) in iscsi_session_get_param()
3457 session->discovery_parent_type); in iscsi_session_get_param()