Lines Matching refs:session

90 	struct Scsi_Host *shost = conn->session->host;
100 struct Scsi_Host *shost = conn->session->host;
108 static void __iscsi_update_cmdsn(struct iscsi_session *session,
118 if (exp_cmdsn != session->exp_cmdsn &&
119 !iscsi_sna_lt(exp_cmdsn, session->exp_cmdsn))
120 session->exp_cmdsn = exp_cmdsn;
122 if (max_cmdsn != session->max_cmdsn &&
123 !iscsi_sna_lt(max_cmdsn, session->max_cmdsn))
124 session->max_cmdsn = max_cmdsn;
127 void iscsi_update_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr)
129 __iscsi_update_cmdsn(session, be32_to_cpu(hdr->exp_cmdsn),
222 ISCSI_DBG_SESSION(task->conn->session,
245 struct iscsi_session *session = task->conn->session;
246 struct iscsi_tm *tmf = &session->tmhdr;
249 if (session->tmf_state == TMF_INITIAL)
269 iscsi_session_printk(KERN_INFO, session,
278 if (session->fast_abort) {
279 iscsi_session_printk(KERN_INFO, session,
294 ISCSI_DBG_SESSION(session,
317 struct iscsi_session *session = conn->session;
328 if (conn->session->tt->alloc_pdu) {
329 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD);
337 if (session->tt->parse_pdu_itt)
341 task->conn->session->age);
388 if (session->imm_data_en) {
389 if (transfer_length >= session->first_burst)
390 task->imm_count = min(session->first_burst,
399 if (!session->initial_r2t_en) {
400 r2t->data_length = min(session->first_burst,
427 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn);
429 if (session->tt->init_task && session->tt->init_task(task))
433 session->cmdsn++;
436 ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x "
441 session->cmdsn,
442 session->max_cmdsn - session->exp_cmdsn + 1);
450 * Must be called with session back_lock.
457 struct iscsi_session *session = conn->session;
461 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n",
464 session->tt->cleanup_task(task);
473 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*));
508 struct iscsi_session *session = task->conn->session;
511 spin_lock_bh(&session->back_lock);
513 spin_unlock_bh(&session->back_lock);
523 * Must be called with session back_lock.
529 ISCSI_DBG_SESSION(conn->session,
556 * Called with session back_lock
563 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt);
566 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn);
591 * from a TMF or session recovery.
598 if (conn->session->running_aborted_task == task) {
599 conn->session->running_aborted_task = NULL;
612 * session back and frwd lock must be held and if not called for a task that
629 conn->session->queued_cmdsn--;
645 struct iscsi_session *session = task->conn->session;
647 spin_lock_bh(&session->back_lock);
649 spin_unlock_bh(&session->back_lock);
655 struct iscsi_session *session = conn->session;
660 if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
668 nop->cmdsn = cpu_to_be32(session->cmdsn);
671 * TODO: We always use immediate for normal session pdus.
680 session->queued_cmdsn++;
681 session->cmdsn++;
685 if (session->tt->init_task && session->tt->init_task(task))
689 session->state = ISCSI_STATE_LOGGING_OUT;
692 ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x "
709 struct iscsi_session *session = conn->session;
714 if (session->state == ISCSI_STATE_TERMINATE ||
738 if (session->state != ISCSI_STATE_LOGGED_IN)
749 if (!kfifo_out(&session->cmdpool.queue,
770 if (conn->session->tt->alloc_pdu) {
771 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) {
783 if (session->tt->parse_pdu_itt)
787 task->conn->session->age);
807 struct iscsi_session *session = conn->session;
808 struct iscsi_host *ihost = shost_priv(conn->session->host);
816 rc = session->tt->xmit_task(task);
847 struct iscsi_session *session = conn->session;
850 spin_lock_bh(&session->frwd_lock);
853 spin_unlock_bh(&session->frwd_lock);
874 struct iscsi_session *session = conn->session;
877 iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
891 BUG_ON(!session->tt->check_protection);
893 ascq = session->tt->check_protection(task, &sector);
926 ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n",
949 ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n",
974 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr);
989 ISCSI_DBG_SESSION(conn->session, "data in with status done "
999 struct iscsi_session *session = conn->session;
1004 if (session->tmf_state != TMF_QUEUED)
1008 session->tmf_state = TMF_SUCCESS;
1010 session->tmf_state = TMF_NOT_FOUND;
1012 session->tmf_state = TMF_FAILED;
1013 wake_up(&session->ehwait);
1138 spin_unlock(&conn->session->back_lock);
1139 spin_lock(&conn->session->frwd_lock);
1142 spin_unlock(&conn->session->frwd_lock);
1143 spin_lock(&conn->session->back_lock);
1178 * the LDD's itt space does not include the session age.
1180 * The session back_lock must be held.
1184 struct iscsi_session *session = conn->session;
1190 if (session->tt->parse_pdu_itt)
1191 session->tt->parse_pdu_itt(conn, itt, &i, NULL);
1194 if (i >= session->cmds_max)
1197 return session->cmds[i];
1209 * queuecommand or send generic. session back_lock must be held and verify
1215 struct iscsi_session *session = conn->session;
1230 ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n",
1234 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1247 spin_unlock(&session->back_lock);
1248 spin_lock(&session->frwd_lock);
1250 spin_unlock(&session->frwd_lock);
1251 spin_lock(&session->back_lock);
1302 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1311 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1318 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1328 iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1358 spin_lock(&conn->session->back_lock);
1360 spin_unlock(&conn->session->back_lock);
1367 struct iscsi_session *session = conn->session;
1373 if (session->tt->parse_pdu_itt)
1374 session->tt->parse_pdu_itt(conn, itt, &i, &age);
1380 if (age != session->age) {
1382 "received itt %x expected session age (%x)\n",
1383 (__force u32)itt, session->age);
1387 if (i >= session->cmds_max) {
1390 "%u.\n", i, session->cmds_max);
1404 * The session back_lock must be held.
1417 if (iscsi_cmd(task->sc)->age != conn->session->age) {
1418 iscsi_session_printk(KERN_ERR, conn->session,
1419 "task's session age %d, expected %d\n",
1420 iscsi_cmd(task->sc)->age, conn->session->age);
1428 void iscsi_session_failure(struct iscsi_session *session,
1433 spin_lock_bh(&session->frwd_lock);
1434 conn = session->leadconn;
1435 if (session->state == ISCSI_STATE_TERMINATE || !conn) {
1436 spin_unlock_bh(&session->frwd_lock);
1441 spin_unlock_bh(&session->frwd_lock);
1445 * the session.
1457 struct iscsi_session *session = conn->session;
1459 if (session->state == ISCSI_STATE_FAILED)
1463 session->state = ISCSI_STATE_FAILED;
1472 struct iscsi_session *session = conn->session;
1475 spin_lock_bh(&session->frwd_lock);
1477 spin_unlock_bh(&session->frwd_lock);
1486 struct iscsi_session *session = conn->session;
1491 if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) {
1492 ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn "
1494 session->exp_cmdsn, session->max_cmdsn,
1495 session->cmdsn, session->queued_cmdsn);
1542 spin_unlock_bh(&conn->session->frwd_lock);
1543 rc = conn->session->tt->xmit_task(task);
1544 spin_lock_bh(&conn->session->frwd_lock);
1562 * iscsi_requeue_task - requeue task to run from session workqueue
1575 spin_lock_bh(&conn->session->frwd_lock);
1586 spin_unlock_bh(&conn->session->frwd_lock);
1604 spin_lock_bh(&conn->session->frwd_lock);
1606 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n");
1607 spin_unlock_bh(&conn->session->frwd_lock);
1629 spin_lock_bh(&conn->session->back_lock);
1631 spin_unlock_bh(&conn->session->back_lock);
1644 if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
1666 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) {
1692 spin_unlock_bh(&conn->session->frwd_lock);
1696 spin_unlock_bh(&conn->session->frwd_lock);
1718 if (!kfifo_out(&conn->session->cmdpool.queue,
1722 iscsi_cmd(sc)->age = conn->session->age;
1755 struct iscsi_session *session;
1765 session = cls_session->dd_data;
1766 spin_lock_bh(&session->frwd_lock);
1774 if (session->state != ISCSI_STATE_LOGGED_IN) {
1777 * and block the session we requeue here (commands could
1781 switch (session->state) {
1784 * cmds should fail during shutdown, if the session
1816 conn = session->leadconn;
1851 if (session->tt->xmit_task(task)) {
1852 session->cmdsn--;
1861 session->queued_cmdsn++;
1862 spin_unlock_bh(&session->frwd_lock);
1866 spin_lock_bh(&session->back_lock);
1868 spin_unlock_bh(&session->back_lock);
1870 spin_unlock_bh(&session->frwd_lock);
1871 ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n",
1876 spin_lock_bh(&session->back_lock);
1878 spin_unlock_bh(&session->back_lock);
1880 spin_unlock_bh(&session->frwd_lock);
1881 ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n",
1892 struct iscsi_session *session = cls_session->dd_data;
1894 starget->can_queue = session->scsi_cmds_max;
1901 struct iscsi_session *session = from_timer(session, t, tmf_timer);
1903 spin_lock(&session->frwd_lock);
1904 if (session->tmf_state == TMF_QUEUED) {
1905 session->tmf_state = TMF_TIMEDOUT;
1906 ISCSI_DBG_EH(session, "tmf timedout\n");
1908 wake_up(&session->ehwait);
1910 spin_unlock(&session->frwd_lock);
1916 __must_hold(&session->frwd_lock)
1918 struct iscsi_session *session = conn->session;
1921 spin_unlock_bh(&session->frwd_lock);
1924 spin_lock_bh(&session->frwd_lock);
1928 session->tmf_timer.expires = timeout * HZ + jiffies;
1929 add_timer(&session->tmf_timer);
1930 ISCSI_DBG_EH(session, "tmf set timeout\n");
1932 spin_unlock_bh(&session->frwd_lock);
1933 mutex_unlock(&session->eh_mutex);
1940 * 3) session is terminated or restarted or userspace has
1943 wait_event_interruptible(session->ehwait, age != session->age ||
1944 session->state != ISCSI_STATE_LOGGED_IN ||
1945 session->tmf_state != TMF_QUEUED);
1948 del_timer_sync(&session->tmf_timer);
1950 mutex_lock(&session->eh_mutex);
1951 spin_lock_bh(&session->frwd_lock);
1952 /* if the session drops it will clean up the task */
1953 if (age != session->age ||
1954 session->state != ISCSI_STATE_LOGGED_IN)
1960 * Fail commands. session frwd lock held and xmit thread flushed.
1964 struct iscsi_session *session = conn->session;
1969 spin_lock_bh(&session->back_lock);
1970 for (i = 0; i < session->cmds_max; i++) {
1971 task = session->cmds[i];
1983 spin_unlock_bh(&session->back_lock);
1984 spin_unlock_bh(&session->frwd_lock);
1986 spin_lock_bh(&session->frwd_lock);
1990 ISCSI_DBG_SESSION(session,
1996 spin_unlock_bh(&session->back_lock);
2003 * This grabs the session frwd_lock to make sure no one is in
2012 spin_lock_bh(&conn->session->frwd_lock);
2014 spin_unlock_bh(&conn->session->frwd_lock);
2028 struct Scsi_Host *shost = conn->session->host;
2049 struct Scsi_Host *shost = conn->session->host;
2079 struct iscsi_session *session;
2084 session = cls_session->dd_data;
2086 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
2088 spin_lock_bh(&session->frwd_lock);
2089 spin_lock(&session->back_lock);
2097 spin_unlock(&session->back_lock);
2107 spin_unlock(&session->back_lock);
2110 spin_unlock(&session->back_lock);
2112 if (session->state != ISCSI_STATE_LOGGED_IN) {
2114 * During shutdown, if session is prematurely disconnected,
2122 ISCSI_DBG_EH(session, "sc on shutdown, handled\n");
2134 conn = session->leadconn;
2149 ISCSI_DBG_EH(session, "Command making progress. Asking "
2169 spin_lock(&session->back_lock);
2170 for (i = 0; i < conn->session->cmds_max; i++) {
2171 running_task = conn->session->cmds[i];
2195 ISCSI_DBG_EH(session, "Command has not made progress "
2202 spin_unlock(&session->back_lock);
2207 spin_unlock(&session->back_lock);
2229 spin_unlock_bh(&session->frwd_lock);
2235 ISCSI_DBG_EH(session, "return %s\n", rc == SCSI_EH_RESET_TIMER ?
2244 struct iscsi_session *session = conn->session;
2247 spin_lock(&session->frwd_lock);
2248 if (session->state != ISCSI_STATE_LOGGED_IN)
2264 spin_unlock(&session->frwd_lock);
2282 spin_unlock(&session->frwd_lock);
2296 struct iscsi_session *session;
2303 session = conn->session;
2310 mutex_lock(&session->eh_mutex);
2315 spin_lock_bh(&session->frwd_lock);
2324 if (session->state == ISCSI_STATE_LOGGED_IN)
2327 spin_unlock_bh(&session->frwd_lock);
2328 mutex_unlock(&session->eh_mutex);
2347 struct iscsi_session *session;
2354 session = cls_session->dd_data;
2356 ISCSI_DBG_EH(session, "aborting sc %p\n", sc);
2359 mutex_lock(&session->eh_mutex);
2360 spin_lock_bh(&session->frwd_lock);
2362 * if session was ISCSI_STATE_IN_RECOVERY then we may not have
2366 ISCSI_DBG_EH(session, "sc never reached iscsi layer or "
2368 spin_unlock_bh(&session->frwd_lock);
2369 mutex_unlock(&session->eh_mutex);
2374 * If we are not logged in or we have started a new session
2377 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN ||
2378 iscsi_cmd(sc)->age != session->age) {
2379 spin_unlock_bh(&session->frwd_lock);
2380 mutex_unlock(&session->eh_mutex);
2381 ISCSI_DBG_EH(session, "failing abort due to dropped "
2382 "session.\n");
2386 spin_lock(&session->back_lock);
2390 ISCSI_DBG_EH(session, "sc completed while abort in progress\n");
2392 spin_unlock(&session->back_lock);
2393 spin_unlock_bh(&session->frwd_lock);
2394 mutex_unlock(&session->eh_mutex);
2399 spin_unlock(&session->back_lock);
2400 spin_unlock_bh(&session->frwd_lock);
2401 mutex_unlock(&session->eh_mutex);
2407 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", sc, task->itt);
2408 conn = session->leadconn;
2411 age = session->age;
2412 spin_unlock(&session->back_lock);
2420 if (session->tmf_state != TMF_INITIAL)
2422 session->tmf_state = TMF_QUEUED;
2424 hdr = &session->tmhdr;
2427 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout))
2430 switch (session->tmf_state) {
2432 spin_unlock_bh(&session->frwd_lock);
2443 spin_lock_bh(&session->frwd_lock);
2445 session->tmf_state = TMF_INITIAL;
2447 spin_unlock_bh(&session->frwd_lock);
2451 session->running_aborted_task = task;
2452 spin_unlock_bh(&session->frwd_lock);
2457 session->tmf_state = TMF_INITIAL;
2460 ISCSI_DBG_EH(session, "sc completed while abort in "
2466 session->tmf_state = TMF_INITIAL;
2471 spin_unlock_bh(&session->frwd_lock);
2473 ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n",
2477 mutex_unlock(&session->eh_mutex);
2481 spin_unlock_bh(&session->frwd_lock);
2483 ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc,
2490 if (!session->running_aborted_task)
2494 mutex_unlock(&session->eh_mutex);
2512 struct iscsi_session *session;
2518 session = cls_session->dd_data;
2520 ISCSI_DBG_EH(session, "LU Reset [sc %p lun %llu]\n", sc,
2523 mutex_lock(&session->eh_mutex);
2524 spin_lock_bh(&session->frwd_lock);
2529 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2531 conn = session->leadconn;
2534 if (session->tmf_state != TMF_INITIAL)
2536 session->tmf_state = TMF_QUEUED;
2538 hdr = &session->tmhdr;
2541 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2542 session->lu_reset_timeout)) {
2547 switch (session->tmf_state) {
2551 spin_unlock_bh(&session->frwd_lock);
2555 session->tmf_state = TMF_INITIAL;
2560 spin_unlock_bh(&session->frwd_lock);
2564 spin_lock_bh(&session->frwd_lock);
2567 session->tmf_state = TMF_INITIAL;
2568 spin_unlock_bh(&session->frwd_lock);
2574 spin_unlock_bh(&session->frwd_lock);
2576 ISCSI_DBG_EH(session, "dev reset result = %s\n",
2578 mutex_unlock(&session->eh_mutex);
2585 struct iscsi_session *session = cls_session->dd_data;
2587 spin_lock_bh(&session->frwd_lock);
2588 if (session->state != ISCSI_STATE_LOGGED_IN) {
2589 session->state = ISCSI_STATE_RECOVERY_FAILED;
2590 wake_up(&session->ehwait);
2592 spin_unlock_bh(&session->frwd_lock);
2597 * iscsi_eh_session_reset - drop session and attempt relogin
2600 * This function will wait for a relogin, session termination from
2606 struct iscsi_session *session;
2610 session = cls_session->dd_data;
2612 mutex_lock(&session->eh_mutex);
2613 spin_lock_bh(&session->frwd_lock);
2614 if (session->state == ISCSI_STATE_TERMINATE) {
2616 ISCSI_DBG_EH(session,
2617 "failing session reset: Could not log back into "
2618 "%s [age %d]\n", session->targetname,
2619 session->age);
2620 spin_unlock_bh(&session->frwd_lock);
2621 mutex_unlock(&session->eh_mutex);
2625 conn = session->leadconn;
2628 spin_unlock_bh(&session->frwd_lock);
2629 mutex_unlock(&session->eh_mutex);
2634 ISCSI_DBG_EH(session, "wait for relogin\n");
2635 wait_event_interruptible(session->ehwait,
2636 session->state == ISCSI_STATE_TERMINATE ||
2637 session->state == ISCSI_STATE_LOGGED_IN ||
2638 session->state == ISCSI_STATE_RECOVERY_FAILED);
2642 mutex_lock(&session->eh_mutex);
2643 spin_lock_bh(&session->frwd_lock);
2644 if (session->state == ISCSI_STATE_LOGGED_IN) {
2645 ISCSI_DBG_EH(session,
2646 "session reset succeeded for %s,%s\n",
2647 session->targetname, conn->persistent_address);
2650 spin_unlock_bh(&session->frwd_lock);
2651 mutex_unlock(&session->eh_mutex);
2674 struct iscsi_session *session;
2680 session = cls_session->dd_data;
2682 ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc,
2683 session->targetname);
2685 mutex_lock(&session->eh_mutex);
2686 spin_lock_bh(&session->frwd_lock);
2691 if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2693 conn = session->leadconn;
2696 if (session->tmf_state != TMF_INITIAL)
2698 session->tmf_state = TMF_QUEUED;
2700 hdr = &session->tmhdr;
2703 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2704 session->tgt_reset_timeout)) {
2709 switch (session->tmf_state) {
2713 spin_unlock_bh(&session->frwd_lock);
2717 session->tmf_state = TMF_INITIAL;
2722 spin_unlock_bh(&session->frwd_lock);
2726 spin_lock_bh(&session->frwd_lock);
2729 session->tmf_state = TMF_INITIAL;
2730 spin_unlock_bh(&session->frwd_lock);
2736 spin_unlock_bh(&session->frwd_lock);
2738 ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname,
2740 mutex_unlock(&session->eh_mutex);
2745 * iscsi_eh_recover_target - reset target and possibly the session
2749 * we will escalate to ERL0 session recovery.
2987 "of session teardown event because host already "
3001 * iscsi_session_setup - create iscsi cls session and host and session
3004 * @cmds_max: session can queue
3005 * @dd_size: private driver data size, added to session allocation size
3008 * @id: target ID to add to this session
3011 * a session per scsi host.
3023 struct iscsi_session *session;
3045 session = cls_session->dd_data;
3046 session->cls_session = cls_session;
3047 session->host = shost;
3048 session->state = ISCSI_STATE_FREE;
3049 session->fast_abort = 1;
3050 session->tgt_reset_timeout = 30;
3051 session->lu_reset_timeout = 15;
3052 session->abort_timeout = 10;
3053 session->scsi_cmds_max = scsi_cmds;
3054 session->cmds_max = scsi_cmds + ISCSI_MGMT_CMDS_MAX;
3055 session->queued_cmdsn = session->cmdsn = initial_cmdsn;
3056 session->exp_cmdsn = initial_cmdsn + 1;
3057 session->max_cmdsn = initial_cmdsn + 1;
3058 session->max_r2t = 1;
3059 session->tt = iscsit;
3060 session->dd_data = cls_session->dd_data + sizeof(*session);
3062 session->tmf_state = TMF_INITIAL;
3063 timer_setup(&session->tmf_timer, iscsi_tmf_timedout, 0);
3064 mutex_init(&session->eh_mutex);
3065 init_waitqueue_head(&session->ehwait);
3067 spin_lock_init(&session->frwd_lock);
3068 spin_lock_init(&session->back_lock);
3071 if (iscsi_pool_init(&session->cmdpool, session->cmds_max,
3072 (void***)&session->cmds,
3077 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
3078 struct iscsi_task *task = session->cmds[cmd_i];
3098 iscsi_pool_free(&session->cmdpool);
3108 * issi_session_remove - Remove session from iSCSI class.
3112 struct iscsi_session *session = cls_session->dd_data;
3113 struct Scsi_Host *shost = session->host;
3119 * the session, so drop the session count here.
3126 * iscsi_session_free - Free iscsi session and it's resources
3127 * @cls_session: iscsi session
3131 struct iscsi_session *session = cls_session->dd_data;
3134 iscsi_pool_free(&session->cmdpool);
3135 kfree(session->password);
3136 kfree(session->password_in);
3137 kfree(session->username);
3138 kfree(session->username_in);
3139 kfree(session->targetname);
3140 kfree(session->targetalias);
3141 kfree(session->initiatorname);
3142 kfree(session->boot_root);
3143 kfree(session->boot_nic);
3144 kfree(session->boot_target);
3145 kfree(session->ifacename);
3146 kfree(session->portal_type);
3147 kfree(session->discovery_parent_type);
3155 * iscsi_session_teardown - destroy session and cls_session
3156 * @cls_session: iscsi session
3175 struct iscsi_session *session = cls_session->dd_data;
3188 conn->session = session;
3202 spin_lock_bh(&session->frwd_lock);
3203 if (!kfifo_out(&session->cmdpool.queue,
3206 spin_unlock_bh(&session->frwd_lock);
3209 spin_unlock_bh(&session->frwd_lock);
3228 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
3246 struct iscsi_session *session = conn->session;
3252 mutex_lock(&session->eh_mutex);
3253 spin_lock_bh(&session->frwd_lock);
3255 if (session->leadconn == conn) {
3259 session->state = ISCSI_STATE_TERMINATE;
3260 wake_up(&session->ehwait);
3262 spin_unlock_bh(&session->frwd_lock);
3267 spin_lock_bh(&session->frwd_lock);
3273 spin_lock_bh(&session->back_lock);
3274 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
3276 spin_unlock_bh(&session->back_lock);
3277 if (session->leadconn == conn)
3278 session->leadconn = NULL;
3279 spin_unlock_bh(&session->frwd_lock);
3280 mutex_unlock(&session->eh_mutex);
3289 struct iscsi_session *session = conn->session;
3291 if (!session) {
3297 if ((session->imm_data_en || !session->initial_r2t_en) &&
3298 session->first_burst > session->max_burst) {
3301 session->first_burst, session->max_burst);
3317 spin_lock_bh(&session->frwd_lock);
3319 session->state = ISCSI_STATE_LOGGED_IN;
3320 session->queued_cmdsn = session->cmdsn;
3335 session->tmf_state = TMF_INITIAL;
3336 session->age++;
3337 if (session->age == 16)
3338 session->age = 0;
3346 spin_unlock_bh(&session->frwd_lock);
3348 iscsi_unblock_session(session->cls_session);
3349 wake_up(&session->ehwait);
3355 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn)
3360 for (i = 0; i < conn->session->cmds_max; i++) {
3361 task = conn->session->cmds[i];
3368 ISCSI_DBG_SESSION(conn->session,
3372 spin_lock_bh(&session->back_lock);
3374 spin_unlock_bh(&session->back_lock);
3382 spin_unlock_bh(&session->back_lock);
3389 struct iscsi_session *session = conn->session;
3392 mutex_lock(&session->eh_mutex);
3393 spin_lock_bh(&session->frwd_lock);
3395 spin_unlock_bh(&session->frwd_lock);
3396 mutex_unlock(&session->eh_mutex);
3406 session->state = ISCSI_STATE_TERMINATE;
3408 session->state = ISCSI_STATE_IN_RECOVERY;
3412 spin_unlock_bh(&session->frwd_lock);
3417 spin_lock_bh(&session->frwd_lock);
3419 spin_unlock_bh(&session->frwd_lock);
3430 if (session->state == ISCSI_STATE_IN_RECOVERY &&
3432 ISCSI_DBG_SESSION(session, "blocking session\n");
3433 iscsi_block_session(session->cls_session);
3440 spin_lock_bh(&session->frwd_lock);
3442 fail_mgmt_tasks(session, conn);
3443 memset(&session->tmhdr, 0, sizeof(session->tmhdr));
3444 spin_unlock_bh(&session->frwd_lock);
3445 mutex_unlock(&session->eh_mutex);
3452 struct iscsi_session *session = cls_session->dd_data;
3455 spin_lock_bh(&session->frwd_lock);
3457 session->leadconn = conn;
3460 spin_unlock_bh(&session->frwd_lock);
3466 spin_lock_bh(&session->back_lock);
3467 session->max_cmdsn = session->exp_cmdsn = session->cmdsn + 1;
3468 spin_unlock_bh(&session->back_lock);
3501 struct iscsi_session *session = conn->session;
3506 sscanf(buf, "%d", &session->fast_abort);
3509 sscanf(buf, "%d", &session->abort_timeout);
3512 sscanf(buf, "%d", &session->lu_reset_timeout);
3515 sscanf(buf, "%d", &session->tgt_reset_timeout);
3536 sscanf(buf, "%d", &session->initial_r2t_en);
3539 sscanf(buf, "%hu", &session->max_r2t);
3542 sscanf(buf, "%d", &session->imm_data_en);
3545 sscanf(buf, "%d", &session->first_burst);
3548 sscanf(buf, "%d", &session->max_burst);
3551 sscanf(buf, "%d", &session->pdu_inorder_en);
3554 sscanf(buf, "%d", &session->dataseq_inorder_en);
3557 sscanf(buf, "%d", &session->erl);
3563 return iscsi_switch_str_param(&session->username, buf);
3565 return iscsi_switch_str_param(&session->username_in, buf);
3567 return iscsi_switch_str_param(&session->password, buf);
3569 return iscsi_switch_str_param(&session->password_in, buf);
3571 return iscsi_switch_str_param(&session->targetname, buf);
3573 return iscsi_switch_str_param(&session->targetalias, buf);
3575 sscanf(buf, "%d", &session->tpgt);
3583 return iscsi_switch_str_param(&session->ifacename, buf);
3585 return iscsi_switch_str_param(&session->initiatorname, buf);
3587 return iscsi_switch_str_param(&session->boot_root, buf);
3589 return iscsi_switch_str_param(&session->boot_nic, buf);
3591 return iscsi_switch_str_param(&session->boot_target, buf);
3593 return iscsi_switch_str_param(&session->portal_type, buf);
3595 return iscsi_switch_str_param(&session->discovery_parent_type,
3599 session->discovery_sess = !!val;
3614 struct iscsi_session *session = cls_session->dd_data;
3619 len = sysfs_emit(buf, "%d\n", session->fast_abort);
3622 len = sysfs_emit(buf, "%d\n", session->abort_timeout);
3625 len = sysfs_emit(buf, "%d\n", session->lu_reset_timeout);
3628 len = sysfs_emit(buf, "%d\n", session->tgt_reset_timeout);
3631 len = sysfs_emit(buf, "%d\n", session->initial_r2t_en);
3634 len = sysfs_emit(buf, "%hu\n", session->max_r2t);
3637 len = sysfs_emit(buf, "%d\n", session->imm_data_en);
3640 len = sysfs_emit(buf, "%u\n", session->first_burst);
3643 len = sysfs_emit(buf, "%u\n", session->max_burst);
3646 len = sysfs_emit(buf, "%d\n", session->pdu_inorder_en);
3649 len = sysfs_emit(buf, "%d\n", session->dataseq_inorder_en);
3652 len = sysfs_emit(buf, "%d\n", session->def_taskmgmt_tmo);
3655 len = sysfs_emit(buf, "%d\n", session->erl);
3658 len = sysfs_emit(buf, "%s\n", session->targetname);
3661 len = sysfs_emit(buf, "%s\n", session->targetalias);
3664 len = sysfs_emit(buf, "%d\n", session->tpgt);
3667 len = sysfs_emit(buf, "%s\n", session->username);
3670 len = sysfs_emit(buf, "%s\n", session->username_in);
3673 len = sysfs_emit(buf, "%s\n", session->password);
3676 len = sysfs_emit(buf, "%s\n", session->password_in);
3679 len = sysfs_emit(buf, "%s\n", session->ifacename);
3682 len = sysfs_emit(buf, "%s\n", session->initiatorname);
3685 len = sysfs_emit(buf, "%s\n", session->boot_root);
3688 len = sysfs_emit(buf, "%s\n", session->boot_nic);
3691 len = sysfs_emit(buf, "%s\n", session->boot_target);
3694 len = sysfs_emit(buf, "%u\n", session->auto_snd_tgt_disable);
3697 len = sysfs_emit(buf, "%u\n", session->discovery_sess);
3700 len = sysfs_emit(buf, "%s\n", session->portal_type);
3703 len = sysfs_emit(buf, "%u\n", session->chap_auth_en);
3706 len = sysfs_emit(buf, "%u\n", session->discovery_logout_en);
3709 len = sysfs_emit(buf, "%u\n", session->bidi_chap_en);
3712 len = sysfs_emit(buf, "%u\n", session->discovery_auth_optional);
3715 len = sysfs_emit(buf, "%d\n", session->time2wait);
3718 len = sysfs_emit(buf, "%d\n", session->time2retain);
3721 len = sysfs_emit(buf, "%u\n", session->tsid);
3725 session->isid[0], session->isid[1],
3726 session->isid[2], session->isid[3],
3727 session->isid[4], session->isid[5]);
3730 len = sysfs_emit(buf, "%u\n", session->discovery_parent_idx);
3733 if (session->discovery_parent_type)
3735 session->discovery_parent_type);