Lines Matching refs:session

88 	struct Scsi_Host *shost = conn->session->host;
96 static void __iscsi_update_cmdsn(struct iscsi_session *session,
106 if (exp_cmdsn != session->exp_cmdsn &&
107 !iscsi_sna_lt(exp_cmdsn, session->exp_cmdsn))
108 session->exp_cmdsn = exp_cmdsn;
110 if (max_cmdsn != session->max_cmdsn &&
111 !iscsi_sna_lt(max_cmdsn, session->max_cmdsn))
112 session->max_cmdsn = max_cmdsn;
115 void iscsi_update_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr)
117 __iscsi_update_cmdsn(session, be32_to_cpu(hdr->exp_cmdsn),
210 ISCSI_DBG_SESSION(task->conn->session,
233 struct iscsi_session *session = task->conn->session;
234 struct iscsi_tm *tmf = &session->tmhdr;
237 if (session->tmf_state == TMF_INITIAL)
257 iscsi_session_printk(KERN_INFO, session,
266 if (session->fast_abort) {
267 iscsi_session_printk(KERN_INFO, session,
282 ISCSI_DBG_SESSION(session,
305 struct iscsi_session *session = conn->session;
316 if (conn->session->tt->alloc_pdu) {
317 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD);
325 if (session->tt->parse_pdu_itt)
329 task->conn->session->age);
376 if (session->imm_data_en) {
377 if (transfer_length >= session->first_burst)
378 task->imm_count = min(session->first_burst,
387 if (!session->initial_r2t_en) {
388 r2t->data_length = min(session->first_burst,
415 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn);
417 if (session->tt->init_task && session->tt->init_task(task))
421 session->cmdsn++;
424 ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x "
429 session->cmdsn,
430 session->max_cmdsn - session->exp_cmdsn + 1);
438 * Must be called with session back_lock.
445 struct iscsi_session *session = conn->session;
449 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n",
452 session->tt->cleanup_task(task);
461 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*));
490 struct iscsi_session *session = task->conn->session;
493 spin_lock_bh(&session->back_lock);
495 spin_unlock_bh(&session->back_lock);
504 * Must be called with session back_lock.
510 ISCSI_DBG_SESSION(conn->session,
537 * Called with session back_lock
544 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt);
547 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn);
569 * session recovery.
585 * session frwd lock must be held and if not called for a task that is still
594 spin_lock_bh(&conn->session->back_lock);
596 spin_unlock_bh(&conn->session->back_lock);
605 conn->session->queued_cmdsn--;
617 spin_unlock_bh(&conn->session->back_lock);
623 struct iscsi_session *session = conn->session;
628 if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
636 nop->cmdsn = cpu_to_be32(session->cmdsn);
639 * TODO: We always use immediate for normal session pdus.
648 session->queued_cmdsn++;
649 session->cmdsn++;
653 if (session->tt->init_task && session->tt->init_task(task))
657 session->state = ISCSI_STATE_LOGGING_OUT;
660 ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x "
670 struct iscsi_session *session = conn->session;
671 struct iscsi_host *ihost = shost_priv(session->host);
676 if (session->state == ISCSI_STATE_TERMINATE)
699 if (session->state != ISCSI_STATE_LOGGED_IN)
710 if (!kfifo_out(&session->cmdpool.queue,
731 if (conn->session->tt->alloc_pdu) {
732 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) {
744 if (session->tt->parse_pdu_itt)
748 task->conn->session->age);
758 if (session->tt->xmit_task(task))
769 spin_lock(&session->back_lock);
771 spin_unlock(&session->back_lock);
779 struct iscsi_session *session = conn->session;
782 spin_lock_bh(&session->frwd_lock);
785 spin_unlock_bh(&session->frwd_lock);
806 struct iscsi_session *session = conn->session;
809 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
823 BUG_ON(!session->tt->check_protection);
825 ascq = session->tt->check_protection(task, &sector);
861 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n",
884 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n",
909 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr);
924 ISCSI_DBG_SESSION(conn->session, "data in with status done "
934 struct iscsi_session *session = conn->session;
939 if (session->tmf_state != TMF_QUEUED)
943 session->tmf_state = TMF_SUCCESS;
945 session->tmf_state = TMF_NOT_FOUND;
947 session->tmf_state = TMF_FAILED;
948 wake_up(&session->ehwait);
1066 spin_unlock(&conn->session->back_lock);
1067 spin_lock(&conn->session->frwd_lock);
1070 spin_unlock(&conn->session->frwd_lock);
1071 spin_lock(&conn->session->back_lock);
1106 * the LDD's itt space does not include the session age.
1108 * The session back_lock must be held.
1112 struct iscsi_session *session = conn->session;
1118 if (session->tt->parse_pdu_itt)
1119 session->tt->parse_pdu_itt(conn, itt, &i, NULL);
1122 if (i >= session->cmds_max)
1125 return session->cmds[i];
1137 * queuecommand or send generic. session back_lock must be held and verify
1143 struct iscsi_session *session = conn->session;
1158 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n",
1162 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1175 spin_unlock(&session->back_lock);
1176 spin_lock(&session->frwd_lock);
1178 spin_unlock(&session->frwd_lock);
1179 spin_lock(&session->back_lock);
1230 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1239 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1246 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1256 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1286 spin_lock(&conn->session->back_lock);
1288 spin_unlock(&conn->session->back_lock);
1295 struct iscsi_session *session = conn->session;
1301 if (session->tt->parse_pdu_itt)
1302 session->tt->parse_pdu_itt(conn, itt, &i, &age);
1308 if (age != session->age) {
1310 "received itt %x expected session age (%x)\n",
1311 (__force u32)itt, session->age);
1315 if (i >= session->cmds_max) {
1318 "%u.\n", i, session->cmds_max);
1332 * The session back_lock must be held.
1345 if (task->sc->SCp.phase != conn->session->age) {
1346 iscsi_session_printk(KERN_ERR, conn->session,
1347 "task's session age %d, expected %d\n",
1348 task->sc->SCp.phase, conn->session->age);
1356 void iscsi_session_failure(struct iscsi_session *session,
1361 spin_lock_bh(&session->frwd_lock);
1362 conn = session->leadconn;
1363 if (session->state == ISCSI_STATE_TERMINATE || !conn) {
1364 spin_unlock_bh(&session->frwd_lock);
1369 spin_unlock_bh(&session->frwd_lock);
1373 * the session.
1385 struct iscsi_session *session = conn->session;
1387 if (session->state == ISCSI_STATE_FAILED)
1391 session->state = ISCSI_STATE_FAILED;
1400 struct iscsi_session *session = conn->session;
1403 spin_lock_bh(&session->frwd_lock);
1405 spin_unlock_bh(&session->frwd_lock);
1414 struct iscsi_session *session = conn->session;
1419 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) {
1420 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn "
1422 session->exp_cmdsn, session->max_cmdsn,
1423 session->cmdsn, session->queued_cmdsn);
1434 spin_lock_bh(&conn->session->back_lock);
1461 spin_unlock_bh(&conn->session->back_lock);
1464 spin_unlock_bh(&conn->session->back_lock);
1466 spin_unlock_bh(&conn->session->frwd_lock);
1467 rc = conn->session->tt->xmit_task(task);
1468 spin_lock_bh(&conn->session->frwd_lock);
1474 spin_lock(&conn->session->back_lock);
1485 spin_unlock(&conn->session->back_lock);
1490 * iscsi_requeue_task - requeue task to run from session workqueue
1503 spin_lock_bh(&conn->session->frwd_lock);
1514 spin_unlock_bh(&conn->session->frwd_lock);
1532 spin_lock_bh(&conn->session->frwd_lock);
1534 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n");
1535 spin_unlock_bh(&conn->session->frwd_lock);
1557 spin_lock_bh(&conn->session->back_lock);
1559 spin_unlock_bh(&conn->session->back_lock);
1572 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) {
1600 if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
1616 spin_unlock_bh(&conn->session->frwd_lock);
1620 spin_unlock_bh(&conn->session->frwd_lock);
1642 if (!kfifo_out(&conn->session->cmdpool.queue,
1646 sc->SCp.phase = conn->session->age;
1679 struct iscsi_session *session;
1689 session = cls_session->dd_data;
1690 spin_lock_bh(&session->frwd_lock);
1698 if (session->state != ISCSI_STATE_LOGGED_IN) {
1701 * and block the session we requeue here (commands could
1705 switch (session->state) {
1708 * cmds should fail during shutdown, if the session
1740 conn = session->leadconn;
1775 if (session->tt->xmit_task(task)) {
1776 session->cmdsn--;
1785 session->queued_cmdsn++;
1786 spin_unlock_bh(&session->frwd_lock);
1790 spin_lock_bh(&session->back_lock);
1792 spin_unlock_bh(&session->back_lock);
1794 spin_unlock_bh(&session->frwd_lock);
1795 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n",
1800 spin_lock_bh(&session->back_lock);
1802 spin_unlock_bh(&session->back_lock);
1804 spin_unlock_bh(&session->frwd_lock);
1805 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n",
1816 struct iscsi_session *session = cls_session->dd_data;
1818 starget->can_queue = session->scsi_cmds_max;
1825 struct iscsi_session *session = from_timer(session, t, tmf_timer);
1827 spin_lock(&session->frwd_lock);
1828 if (session->tmf_state == TMF_QUEUED) {
1829 session->tmf_state = TMF_TIMEDOUT;
1830 ISCSI_DBG_EH(session, "tmf timedout\n");
1832 wake_up(&session->ehwait);
1834 spin_unlock(&session->frwd_lock);
1840 __must_hold(&session->frwd_lock)
1842 struct iscsi_session *session = conn->session;
1848 spin_unlock_bh(&session->frwd_lock);
1851 spin_lock_bh(&session->frwd_lock);
1855 session->tmf_timer.expires = timeout * HZ + jiffies;
1856 add_timer(&session->tmf_timer);
1857 ISCSI_DBG_EH(session, "tmf set timeout\n");
1859 spin_unlock_bh(&session->frwd_lock);
1860 mutex_unlock(&session->eh_mutex);
1867 * 3) session is terminated or restarted or userspace has
1870 wait_event_interruptible(session->ehwait, age != session->age ||
1871 session->state != ISCSI_STATE_LOGGED_IN ||
1872 session->tmf_state != TMF_QUEUED);
1875 del_timer_sync(&session->tmf_timer);
1877 mutex_lock(&session->eh_mutex);
1878 spin_lock_bh(&session->frwd_lock);
1879 /* if the session drops it will clean up the task */
1880 if (age != session->age ||
1881 session->state != ISCSI_STATE_LOGGED_IN)
1887 * Fail commands. session frwd lock held and xmit thread flushed.
1891 struct iscsi_session *session = conn->session;
1895 spin_lock_bh(&session->back_lock);
1896 for (i = 0; i < session->cmds_max; i++) {
1897 task = session->cmds[i];
1905 spin_unlock_bh(&session->back_lock);
1907 ISCSI_DBG_SESSION(session,
1912 spin_unlock_bh(&session->frwd_lock);
1914 spin_lock_bh(&session->frwd_lock);
1916 spin_lock_bh(&session->back_lock);
1919 spin_unlock_bh(&session->back_lock);
1926 * This grabs the session frwd_lock to make sure no one is in
1935 spin_lock_bh(&conn->session->frwd_lock);
1937 spin_unlock_bh(&conn->session->frwd_lock);
1951 struct Scsi_Host *shost = conn->session->host;
1987 struct iscsi_session *session;
1992 session = cls_session->dd_data;
1994 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
1996 spin_lock_bh(&session->frwd_lock);
1997 spin_lock(&session->back_lock);
2005 spin_unlock(&session->back_lock);
2009 spin_unlock(&session->back_lock);
2011 if (session->state != ISCSI_STATE_LOGGED_IN) {
2013 * During shutdown, if session is prematurely disconnected,
2021 ISCSI_DBG_EH(session, "sc on shutdown, handled\n");
2033 conn = session->leadconn;
2048 ISCSI_DBG_EH(session, "Command making progress. Asking "
2068 spin_lock(&session->back_lock);
2069 for (i = 0; i < conn->session->cmds_max; i++) {
2070 running_task = conn->session->cmds[i];
2094 ISCSI_DBG_EH(session, "Command has not made progress "
2101 spin_unlock(&session->back_lock);
2106 spin_unlock(&session->back_lock);
2128 spin_unlock_bh(&session->frwd_lock);
2134 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ?
2143 struct iscsi_session *session = conn->session;
2146 spin_lock(&session->frwd_lock);
2147 if (session->state != ISCSI_STATE_LOGGED_IN)
2163 spin_unlock(&session->frwd_lock);
2181 spin_unlock(&session->frwd_lock);
2195 struct iscsi_session *session;
2202 session = conn->session;
2209 mutex_lock(&session->eh_mutex);
2214 spin_lock_bh(&session->frwd_lock);
2221 if (session->state == ISCSI_STATE_LOGGED_IN)
2224 spin_unlock_bh(&session->frwd_lock);
2225 mutex_unlock(&session->eh_mutex);
2244 struct iscsi_session *session;
2251 session = cls_session->dd_data;
2253 ISCSI_DBG_EH(session, "aborting sc %p\n", sc);
2255 mutex_lock(&session->eh_mutex);
2256 spin_lock_bh(&session->frwd_lock);
2258 * if session was ISCSI_STATE_IN_RECOVERY then we may not have
2262 ISCSI_DBG_EH(session, "sc never reached iscsi layer or "
2264 spin_unlock_bh(&session->frwd_lock);
2265 mutex_unlock(&session->eh_mutex);
2270 * If we are not logged in or we have started a new session
2273 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN ||
2274 sc->SCp.phase != session->age) {
2275 spin_unlock_bh(&session->frwd_lock);
2276 mutex_unlock(&session->eh_mutex);
2277 ISCSI_DBG_EH(session, "failing abort due to dropped "
2278 "session.\n");
2282 conn = session->leadconn;
2284 age = session->age;
2286 spin_lock(&session->back_lock);
2290 ISCSI_DBG_EH(session, "sc completed while abort in progress\n");
2292 spin_unlock(&session->back_lock);
2293 spin_unlock_bh(&session->frwd_lock);
2294 mutex_unlock(&session->eh_mutex);
2297 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", sc, task->itt);
2299 spin_unlock(&session->back_lock);
2307 if (session->tmf_state != TMF_INITIAL)
2309 session->tmf_state = TMF_QUEUED;
2311 hdr = &session->tmhdr;
2314 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout))
2317 switch (session->tmf_state) {
2319 spin_unlock_bh(&session->frwd_lock);
2330 spin_lock_bh(&session->frwd_lock);
2332 session->tmf_state = TMF_INITIAL;
2334 spin_unlock_bh(&session->frwd_lock);
2338 spin_unlock_bh(&session->frwd_lock);
2343 session->tmf_state = TMF_INITIAL;
2346 ISCSI_DBG_EH(session, "sc completed while abort in "
2352 session->tmf_state = TMF_INITIAL;
2357 spin_unlock_bh(&session->frwd_lock);
2359 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n",
2362 mutex_unlock(&session->eh_mutex);
2366 spin_unlock_bh(&session->frwd_lock);
2368 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc,
2371 mutex_unlock(&session->eh_mutex);
2389 struct iscsi_session *session;
2395 session = cls_session->dd_data;
2397 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc,
2400 mutex_lock(&session->eh_mutex);
2401 spin_lock_bh(&session->frwd_lock);
2406 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2408 conn = session->leadconn;
2411 if (session->tmf_state != TMF_INITIAL)
2413 session->tmf_state = TMF_QUEUED;
2415 hdr = &session->tmhdr;
2418 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2419 session->lu_reset_timeout)) {
2424 switch (session->tmf_state) {
2428 spin_unlock_bh(&session->frwd_lock);
2432 session->tmf_state = TMF_INITIAL;
2437 spin_unlock_bh(&session->frwd_lock);
2441 spin_lock_bh(&session->frwd_lock);
2444 session->tmf_state = TMF_INITIAL;
2445 spin_unlock_bh(&session->frwd_lock);
2451 spin_unlock_bh(&session->frwd_lock);
2453 ISCSI_DBG_EH(session, "dev reset result = %s\n",
2455 mutex_unlock(&session->eh_mutex);
2462 struct iscsi_session *session = cls_session->dd_data;
2464 spin_lock_bh(&session->frwd_lock);
2465 if (session->state != ISCSI_STATE_LOGGED_IN) {
2466 session->state = ISCSI_STATE_RECOVERY_FAILED;
2467 wake_up(&session->ehwait);
2469 spin_unlock_bh(&session->frwd_lock);
2474 * iscsi_eh_session_reset - drop session and attempt relogin
2477 * This function will wait for a relogin, session termination from
2483 struct iscsi_session *session;
2487 session = cls_session->dd_data;
2488 conn = session->leadconn;
2490 mutex_lock(&session->eh_mutex);
2491 spin_lock_bh(&session->frwd_lock);
2492 if (session->state == ISCSI_STATE_TERMINATE) {
2494 ISCSI_DBG_EH(session,
2495 "failing session reset: Could not log back into "
2496 "%s [age %d]\n", session->targetname,
2497 session->age);
2498 spin_unlock_bh(&session->frwd_lock);
2499 mutex_unlock(&session->eh_mutex);
2503 spin_unlock_bh(&session->frwd_lock);
2504 mutex_unlock(&session->eh_mutex);
2511 ISCSI_DBG_EH(session, "wait for relogin\n");
2512 wait_event_interruptible(session->ehwait,
2513 session->state == ISCSI_STATE_TERMINATE ||
2514 session->state == ISCSI_STATE_LOGGED_IN ||
2515 session->state == ISCSI_STATE_RECOVERY_FAILED);
2519 mutex_lock(&session->eh_mutex);
2520 spin_lock_bh(&session->frwd_lock);
2521 if (session->state == ISCSI_STATE_LOGGED_IN) {
2522 ISCSI_DBG_EH(session,
2523 "session reset succeeded for %s,%s\n",
2524 session->targetname, conn->persistent_address);
2527 spin_unlock_bh(&session->frwd_lock);
2528 mutex_unlock(&session->eh_mutex);
2551 struct iscsi_session *session;
2557 session = cls_session->dd_data;
2559 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc,
2560 session->targetname);
2562 mutex_lock(&session->eh_mutex);
2563 spin_lock_bh(&session->frwd_lock);
2568 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2570 conn = session->leadconn;
2573 if (session->tmf_state != TMF_INITIAL)
2575 session->tmf_state = TMF_QUEUED;
2577 hdr = &session->tmhdr;
2580 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2581 session->tgt_reset_timeout)) {
2586 switch (session->tmf_state) {
2590 spin_unlock_bh(&session->frwd_lock);
2594 session->tmf_state = TMF_INITIAL;
2599 spin_unlock_bh(&session->frwd_lock);
2603 spin_lock_bh(&session->frwd_lock);
2606 session->tmf_state = TMF_INITIAL;
2607 spin_unlock_bh(&session->frwd_lock);
2613 spin_unlock_bh(&session->frwd_lock);
2615 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname,
2617 mutex_unlock(&session->eh_mutex);
2622 * iscsi_eh_recover_target - reset target and possibly the session
2626 * we will escalate to ERL0 session recovery.
2861 "of session teardown event because host already "
2875 * iscsi_session_setup - create iscsi cls session and host and session
2878 * @cmds_max: session can queue
2879 * @dd_size: private driver data size, added to session allocation size
2882 * @id: target ID to add to this session
2885 * a session per scsi host.
2897 struct iscsi_session *session;
2919 session = cls_session->dd_data;
2920 session->cls_session = cls_session;
2921 session->host = shost;
2922 session->state = ISCSI_STATE_FREE;
2923 session->fast_abort = 1;
2924 session->tgt_reset_timeout = 30;
2925 session->lu_reset_timeout = 15;
2926 session->abort_timeout = 10;
2927 session->scsi_cmds_max = scsi_cmds;
2928 session->cmds_max = scsi_cmds + ISCSI_MGMT_CMDS_MAX;
2929 session->queued_cmdsn = session->cmdsn = initial_cmdsn;
2930 session->exp_cmdsn = initial_cmdsn + 1;
2931 session->max_cmdsn = initial_cmdsn + 1;
2932 session->max_r2t = 1;
2933 session->tt = iscsit;
2934 session->dd_data = cls_session->dd_data + sizeof(*session);
2936 session->tmf_state = TMF_INITIAL;
2937 timer_setup(&session->tmf_timer, iscsi_tmf_timedout, 0);
2938 mutex_init(&session->eh_mutex);
2940 spin_lock_init(&session->frwd_lock);
2941 spin_lock_init(&session->back_lock);
2944 if (iscsi_pool_init(&session->cmdpool, session->cmds_max,
2945 (void***)&session->cmds,
2950 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
2951 struct iscsi_task *task = session->cmds[cmd_i];
2971 iscsi_pool_free(&session->cmdpool);
2981 * iscsi_session_teardown - destroy session, host, and cls_session
2982 * @cls_session: iscsi session
2986 struct iscsi_session *session = cls_session->dd_data;
2988 struct Scsi_Host *shost = session->host;
2990 iscsi_pool_free(&session->cmdpool);
2994 kfree(session->password);
2995 kfree(session->password_in);
2996 kfree(session->username);
2997 kfree(session->username_in);
2998 kfree(session->targetname);
2999 kfree(session->targetalias);
3000 kfree(session->initiatorname);
3001 kfree(session->boot_root);
3002 kfree(session->boot_nic);
3003 kfree(session->boot_target);
3004 kfree(session->ifacename);
3005 kfree(session->portal_type);
3006 kfree(session->discovery_parent_type);
3025 struct iscsi_session *session = cls_session->dd_data;
3038 conn->session = session;
3052 spin_lock_bh(&session->frwd_lock);
3053 if (!kfifo_out(&session->cmdpool.queue,
3056 spin_unlock_bh(&session->frwd_lock);
3059 spin_unlock_bh(&session->frwd_lock);
3067 init_waitqueue_head(&session->ehwait);
3072 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
3090 struct iscsi_session *session = conn->session;
3096 mutex_lock(&session->eh_mutex);
3097 spin_lock_bh(&session->frwd_lock);
3099 if (session->leadconn == conn) {
3103 session->state = ISCSI_STATE_TERMINATE;
3104 wake_up(&session->ehwait);
3106 spin_unlock_bh(&session->frwd_lock);
3111 spin_lock_bh(&session->frwd_lock);
3115 spin_lock_bh(&session->back_lock);
3116 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
3118 spin_unlock_bh(&session->back_lock);
3119 if (session->leadconn == conn)
3120 session->leadconn = NULL;
3121 spin_unlock_bh(&session->frwd_lock);
3122 mutex_unlock(&session->eh_mutex);
3133 struct iscsi_session *session = conn->session;
3135 if (!session) {
3141 if ((session->imm_data_en || !session->initial_r2t_en) &&
3142 session->first_burst > session->max_burst) {
3145 session->first_burst, session->max_burst);
3161 spin_lock_bh(&session->frwd_lock);
3163 session->state = ISCSI_STATE_LOGGED_IN;
3164 session->queued_cmdsn = session->cmdsn;
3179 session->tmf_state = TMF_INITIAL;
3180 session->age++;
3181 if (session->age == 16)
3182 session->age = 0;
3190 spin_unlock_bh(&session->frwd_lock);
3192 iscsi_unblock_session(session->cls_session);
3193 wake_up(&session->ehwait);
3199 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn)
3204 for (i = 0; i < conn->session->cmds_max; i++) {
3205 task = conn->session->cmds[i];
3212 ISCSI_DBG_SESSION(conn->session,
3216 spin_lock_bh(&session->back_lock);
3218 spin_unlock_bh(&session->back_lock);
3226 spin_unlock_bh(&session->back_lock);
3233 struct iscsi_session *session = conn->session;
3236 mutex_lock(&session->eh_mutex);
3237 spin_lock_bh(&session->frwd_lock);
3239 spin_unlock_bh(&session->frwd_lock);
3240 mutex_unlock(&session->eh_mutex);
3250 session->state = ISCSI_STATE_TERMINATE;
3252 session->state = ISCSI_STATE_IN_RECOVERY;
3256 spin_unlock_bh(&session->frwd_lock);
3261 spin_lock_bh(&session->frwd_lock);
3263 spin_unlock_bh(&session->frwd_lock);
3274 if (session->state == ISCSI_STATE_IN_RECOVERY &&
3276 ISCSI_DBG_SESSION(session, "blocking session\n");
3277 iscsi_block_session(session->cls_session);
3284 spin_lock_bh(&session->frwd_lock);
3286 fail_mgmt_tasks(session, conn);
3287 memset(&session->tmhdr, 0, sizeof(session->tmhdr));
3288 spin_unlock_bh(&session->frwd_lock);
3289 mutex_unlock(&session->eh_mutex);
3296 struct iscsi_session *session = cls_session->dd_data;
3299 spin_lock_bh(&session->frwd_lock);
3301 session->leadconn = conn;
3302 spin_unlock_bh(&session->frwd_lock);
3308 spin_lock_bh(&session->back_lock);
3309 session->max_cmdsn = session->exp_cmdsn = session->cmdsn + 1;
3310 spin_unlock_bh(&session->back_lock);
3343 struct iscsi_session *session = conn->session;
3348 sscanf(buf, "%d", &session->fast_abort);
3351 sscanf(buf, "%d", &session->abort_timeout);
3354 sscanf(buf, "%d", &session->lu_reset_timeout);
3357 sscanf(buf, "%d", &session->tgt_reset_timeout);
3378 sscanf(buf, "%d", &session->initial_r2t_en);
3381 sscanf(buf, "%hu", &session->max_r2t);
3384 sscanf(buf, "%d", &session->imm_data_en);
3387 sscanf(buf, "%d", &session->first_burst);
3390 sscanf(buf, "%d", &session->max_burst);
3393 sscanf(buf, "%d", &session->pdu_inorder_en);
3396 sscanf(buf, "%d", &session->dataseq_inorder_en);
3399 sscanf(buf, "%d", &session->erl);
3405 return iscsi_switch_str_param(&session->username, buf);
3407 return iscsi_switch_str_param(&session->username_in, buf);
3409 return iscsi_switch_str_param(&session->password, buf);
3411 return iscsi_switch_str_param(&session->password_in, buf);
3413 return iscsi_switch_str_param(&session->targetname, buf);
3415 return iscsi_switch_str_param(&session->targetalias, buf);
3417 sscanf(buf, "%d", &session->tpgt);
3425 return iscsi_switch_str_param(&session->ifacename, buf);
3427 return iscsi_switch_str_param(&session->initiatorname, buf);
3429 return iscsi_switch_str_param(&session->boot_root, buf);
3431 return iscsi_switch_str_param(&session->boot_nic, buf);
3433 return iscsi_switch_str_param(&session->boot_target, buf);
3435 return iscsi_switch_str_param(&session->portal_type, buf);
3437 return iscsi_switch_str_param(&session->discovery_parent_type,
3441 session->discovery_sess = !!val;
3456 struct iscsi_session *session = cls_session->dd_data;
3461 len = sysfs_emit(buf, "%d\n", session->fast_abort);
3464 len = sysfs_emit(buf, "%d\n", session->abort_timeout);
3467 len = sysfs_emit(buf, "%d\n", session->lu_reset_timeout);
3470 len = sysfs_emit(buf, "%d\n", session->tgt_reset_timeout);
3473 len = sysfs_emit(buf, "%d\n", session->initial_r2t_en);
3476 len = sysfs_emit(buf, "%hu\n", session->max_r2t);
3479 len = sysfs_emit(buf, "%d\n", session->imm_data_en);
3482 len = sysfs_emit(buf, "%u\n", session->first_burst);
3485 len = sysfs_emit(buf, "%u\n", session->max_burst);
3488 len = sysfs_emit(buf, "%d\n", session->pdu_inorder_en);
3491 len = sysfs_emit(buf, "%d\n", session->dataseq_inorder_en);
3494 len = sysfs_emit(buf, "%d\n", session->def_taskmgmt_tmo);
3497 len = sysfs_emit(buf, "%d\n", session->erl);
3500 len = sysfs_emit(buf, "%s\n", session->targetname);
3503 len = sysfs_emit(buf, "%s\n", session->targetalias);
3506 len = sysfs_emit(buf, "%d\n", session->tpgt);
3509 len = sysfs_emit(buf, "%s\n", session->username);
3512 len = sysfs_emit(buf, "%s\n", session->username_in);
3515 len = sysfs_emit(buf, "%s\n", session->password);
3518 len = sysfs_emit(buf, "%s\n", session->password_in);
3521 len = sysfs_emit(buf, "%s\n", session->ifacename);
3524 len = sysfs_emit(buf, "%s\n", session->initiatorname);
3527 len = sysfs_emit(buf, "%s\n", session->boot_root);
3530 len = sysfs_emit(buf, "%s\n", session->boot_nic);
3533 len = sysfs_emit(buf, "%s\n", session->boot_target);
3536 len = sysfs_emit(buf, "%u\n", session->auto_snd_tgt_disable);
3539 len = sysfs_emit(buf, "%u\n", session->discovery_sess);
3542 len = sysfs_emit(buf, "%s\n", session->portal_type);
3545 len = sysfs_emit(buf, "%u\n", session->chap_auth_en);
3548 len = sysfs_emit(buf, "%u\n", session->discovery_logout_en);
3551 len = sysfs_emit(buf, "%u\n", session->bidi_chap_en);
3554 len = sysfs_emit(buf, "%u\n", session->discovery_auth_optional);
3557 len = sysfs_emit(buf, "%d\n", session->time2wait);
3560 len = sysfs_emit(buf, "%d\n", session->time2retain);
3563 len = sysfs_emit(buf, "%u\n", session->tsid);
3567 session->isid[0], session->isid[1],
3568 session->isid[2], session->isid[3],
3569 session->isid[4], session->isid[5]);
3572 len = sysfs_emit(buf, "%u\n", session->discovery_parent_idx);
3575 if (session->discovery_parent_type)
3577 session->discovery_parent_type);