Lines Matching refs:conn
86 inline void iscsi_conn_queue_work(struct iscsi_conn *conn) in iscsi_conn_queue_work() argument
88 struct Scsi_Host *shost = conn->session->host; in iscsi_conn_queue_work()
92 queue_work(ihost->workq, &conn->xmitwork); in iscsi_conn_queue_work()
137 struct iscsi_conn *conn = task->conn; in iscsi_prep_data_out_pdu() local
151 if (left > conn->max_xmit_dlength) { in iscsi_prep_data_out_pdu()
152 hton24(hdr->dlength, conn->max_xmit_dlength); in iscsi_prep_data_out_pdu()
153 r2t->data_count = conn->max_xmit_dlength; in iscsi_prep_data_out_pdu()
160 conn->dataout_pdus_cnt++; in iscsi_prep_data_out_pdu()
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()
304 struct iscsi_conn *conn = task->conn; in iscsi_prep_scsi_cmd_pdu() local
305 struct iscsi_session *session = conn->session; in iscsi_prep_scsi_cmd_pdu()
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()
329 task->conn->session->age); in iscsi_prep_scsi_cmd_pdu()
338 hdr->exp_statsn = cpu_to_be32(conn->exp_statsn); in iscsi_prep_scsi_cmd_pdu()
379 conn->max_xmit_dlength); in iscsi_prep_scsi_cmd_pdu()
382 conn->max_xmit_dlength); in iscsi_prep_scsi_cmd_pdu()
393 r2t->exp_statsn = cpu_to_be32(conn->exp_statsn); in iscsi_prep_scsi_cmd_pdu()
423 conn->scsicmd_pdus_cnt++; in iscsi_prep_scsi_cmd_pdu()
427 "write" : "read", conn->id, sc, sc->cmnd[0], in iscsi_prep_scsi_cmd_pdu()
444 struct iscsi_conn *conn = task->conn; in iscsi_free_task() local
445 struct iscsi_session *session = conn->session; in iscsi_free_task()
458 if (conn->login_task == task) in iscsi_free_task()
490 struct iscsi_session *session = task->conn->session; in iscsi_put_task()
508 struct iscsi_conn *conn = task->conn; in iscsi_complete_task() local
510 ISCSI_DBG_SESSION(conn->session, in iscsi_complete_task()
521 if (READ_ONCE(conn->ping_task) == task) in iscsi_complete_task()
522 WRITE_ONCE(conn->ping_task, NULL); in iscsi_complete_task()
542 struct iscsi_conn *conn = task->conn; in iscsi_complete_scsi_task() local
544 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt); in iscsi_complete_scsi_task()
546 conn->last_recv = jiffies; in iscsi_complete_scsi_task()
547 __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn); in iscsi_complete_scsi_task()
557 struct iscsi_conn *conn = task->conn; in cleanup_queued_task() local
576 if (conn->session->running_aborted_task == task) { in cleanup_queued_task()
577 conn->session->running_aborted_task = NULL; in cleanup_queued_task()
581 if (conn->task == task) { in cleanup_queued_task()
582 conn->task = NULL; in cleanup_queued_task()
595 struct iscsi_conn *conn = task->conn; in fail_scsi_task() local
599 spin_lock_bh(&conn->session->back_lock); in fail_scsi_task()
601 spin_unlock_bh(&conn->session->back_lock); in fail_scsi_task()
610 conn->session->queued_cmdsn--; in fail_scsi_task()
622 spin_unlock_bh(&conn->session->back_lock); in fail_scsi_task()
625 static int iscsi_prep_mgmt_task(struct iscsi_conn *conn, in iscsi_prep_mgmt_task() argument
628 struct iscsi_session *session = conn->session; in iscsi_prep_mgmt_task()
633 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_prep_mgmt_task()
637 nop->exp_statsn = cpu_to_be32(conn->exp_statsn); in iscsi_prep_mgmt_task()
651 if (conn->c_stage == ISCSI_CONN_STARTED && in iscsi_prep_mgmt_task()
672 __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in __iscsi_conn_send_pdu() argument
675 struct iscsi_session *session = conn->session; in __iscsi_conn_send_pdu()
691 if (conn->login_task->state != ISCSI_TASK_FREE) { in __iscsi_conn_send_pdu()
692 iscsi_conn_printk(KERN_ERR, conn, "Login/Text in " in __iscsi_conn_send_pdu()
698 …iscsi_conn_printk(KERN_ERR, conn, "Invalid buffer len of %u for login task. Max len is %u\n", data… in __iscsi_conn_send_pdu()
702 task = conn->login_task; in __iscsi_conn_send_pdu()
708 …iscsi_conn_printk(KERN_ERR, conn, "Can not send data buffer of len %u for op 0x%x\n", data_size, o… in __iscsi_conn_send_pdu()
712 BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE); in __iscsi_conn_send_pdu()
713 BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED); in __iscsi_conn_send_pdu()
725 task->conn = conn; in __iscsi_conn_send_pdu()
736 if (conn->session->tt->alloc_pdu) { in __iscsi_conn_send_pdu()
737 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) { in __iscsi_conn_send_pdu()
738 iscsi_conn_printk(KERN_ERR, conn, "Could not allocate " in __iscsi_conn_send_pdu()
753 task->conn->session->age); in __iscsi_conn_send_pdu()
756 if (unlikely(READ_ONCE(conn->ping_task) == INVALID_SCSI_TASK)) in __iscsi_conn_send_pdu()
757 WRITE_ONCE(conn->ping_task, task); in __iscsi_conn_send_pdu()
760 if (iscsi_prep_mgmt_task(conn, task)) in __iscsi_conn_send_pdu()
766 list_add_tail(&task->running, &conn->mgmtqueue); in __iscsi_conn_send_pdu()
767 iscsi_conn_queue_work(conn); in __iscsi_conn_send_pdu()
783 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_send_pdu() local
784 struct iscsi_session *session = conn->session; in iscsi_conn_send_pdu()
788 if (!__iscsi_conn_send_pdu(conn, hdr, data, data_size)) in iscsi_conn_send_pdu()
806 static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in iscsi_scsi_cmd_rsp() argument
811 struct iscsi_session *session = conn->session; in iscsi_scsi_cmd_rsp()
815 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1; in iscsi_scsi_cmd_rsp()
850 iscsi_conn_printk(KERN_ERR, conn, in iscsi_scsi_cmd_rsp()
888 conn->scsirsp_pdus_cnt++; in iscsi_scsi_cmd_rsp()
902 iscsi_data_in_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in iscsi_data_in_rsp() argument
911 iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr); in iscsi_data_in_rsp()
913 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1; in iscsi_data_in_rsp()
926 ISCSI_DBG_SESSION(conn->session, "data in with status done " in iscsi_data_in_rsp()
929 conn->scsirsp_pdus_cnt++; in iscsi_data_in_rsp()
933 static void iscsi_tmf_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr) in iscsi_tmf_rsp() argument
936 struct iscsi_session *session = conn->session; in iscsi_tmf_rsp()
938 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1; in iscsi_tmf_rsp()
939 conn->tmfrsp_pdus_cnt++; in iscsi_tmf_rsp()
953 static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr) in iscsi_send_nopout() argument
959 if (READ_ONCE(conn->ping_task)) in iscsi_send_nopout()
961 WRITE_ONCE(conn->ping_task, INVALID_SCSI_TASK); in iscsi_send_nopout()
975 task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0); in iscsi_send_nopout()
978 WRITE_ONCE(conn->ping_task, NULL); in iscsi_send_nopout()
979 iscsi_conn_printk(KERN_ERR, conn, "Could not send nopout\n"); in iscsi_send_nopout()
983 conn->last_ping = jiffies; in iscsi_send_nopout()
1002 struct iscsi_conn *conn = task->conn; in iscsi_nop_out_rsp() local
1005 if (READ_ONCE(conn->ping_task) != task) { in iscsi_nop_out_rsp()
1010 if (iscsi_recv_pdu(conn->cls_conn, (struct iscsi_hdr *)nop, in iscsi_nop_out_rsp()
1014 mod_timer(&conn->transport_timer, jiffies + conn->recv_timeout); in iscsi_nop_out_rsp()
1019 static int iscsi_handle_reject(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in iscsi_handle_reject() argument
1026 conn->exp_statsn = be32_to_cpu(reject->statsn) + 1; in iscsi_handle_reject()
1030 iscsi_conn_printk(KERN_ERR, conn, "Cannot handle rejected " in iscsi_handle_reject()
1041 iscsi_conn_printk(KERN_ERR, conn, in iscsi_handle_reject()
1047 iscsi_conn_printk(KERN_ERR, conn, in iscsi_handle_reject()
1068 spin_unlock(&conn->session->back_lock); in iscsi_handle_reject()
1069 spin_lock(&conn->session->frwd_lock); in iscsi_handle_reject()
1070 iscsi_send_nopout(conn, in iscsi_handle_reject()
1072 spin_unlock(&conn->session->frwd_lock); in iscsi_handle_reject()
1073 spin_lock(&conn->session->back_lock); in iscsi_handle_reject()
1080 task = iscsi_itt_to_task(conn, rejected_pdu.itt); in iscsi_handle_reject()
1082 iscsi_conn_printk(KERN_ERR, conn, in iscsi_handle_reject()
1093 iscsi_conn_printk(KERN_ERR, conn, in iscsi_handle_reject()
1112 struct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *conn, itt_t itt) in iscsi_itt_to_task() argument
1114 struct iscsi_session *session = conn->session; in iscsi_itt_to_task()
1121 session->tt->parse_pdu_itt(conn, itt, &i, NULL); in iscsi_itt_to_task()
1142 int __iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in __iscsi_complete_pdu() argument
1145 struct iscsi_session *session = conn->session; in __iscsi_complete_pdu()
1150 conn->last_recv = jiffies; in __iscsi_complete_pdu()
1151 rc = iscsi_verify_itt(conn, hdr->itt); in __iscsi_complete_pdu()
1161 opcode, conn->id, itt, datalen); in __iscsi_complete_pdu()
1179 iscsi_send_nopout(conn, (struct iscsi_nopin*)hdr); in __iscsi_complete_pdu()
1184 rc = iscsi_handle_reject(conn, hdr, data, datalen); in __iscsi_complete_pdu()
1187 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1; in __iscsi_complete_pdu()
1188 if (iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen)) in __iscsi_complete_pdu()
1201 task = iscsi_itt_to_ctask(conn, hdr->itt); in __iscsi_complete_pdu()
1216 task = iscsi_itt_to_task(conn, hdr->itt); in __iscsi_complete_pdu()
1226 iscsi_scsi_cmd_rsp(conn, hdr, task, data, datalen); in __iscsi_complete_pdu()
1229 iscsi_data_in_rsp(conn, hdr, task); in __iscsi_complete_pdu()
1237 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1; in __iscsi_complete_pdu()
1254 iscsi_tmf_rsp(conn, hdr); in __iscsi_complete_pdu()
1263 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1; in __iscsi_complete_pdu()
1276 if (iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen)) in __iscsi_complete_pdu()
1283 int iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, in iscsi_complete_pdu() argument
1288 spin_lock(&conn->session->back_lock); in iscsi_complete_pdu()
1289 rc = __iscsi_complete_pdu(conn, hdr, data, datalen); in iscsi_complete_pdu()
1290 spin_unlock(&conn->session->back_lock); in iscsi_complete_pdu()
1295 int iscsi_verify_itt(struct iscsi_conn *conn, itt_t itt) in iscsi_verify_itt() argument
1297 struct iscsi_session *session = conn->session; in iscsi_verify_itt()
1304 session->tt->parse_pdu_itt(conn, itt, &i, &age); in iscsi_verify_itt()
1311 iscsi_conn_printk(KERN_ERR, conn, in iscsi_verify_itt()
1318 iscsi_conn_printk(KERN_ERR, conn, in iscsi_verify_itt()
1336 struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *conn, itt_t itt) in iscsi_itt_to_ctask() argument
1340 if (iscsi_verify_itt(conn, itt)) in iscsi_itt_to_ctask()
1343 task = iscsi_itt_to_task(conn, itt); in iscsi_itt_to_ctask()
1347 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1348 iscsi_session_printk(KERN_ERR, conn->session, in iscsi_itt_to_ctask()
1350 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1361 struct iscsi_conn *conn; in iscsi_session_failure() local
1364 conn = session->leadconn; in iscsi_session_failure()
1365 if (session->state == ISCSI_STATE_TERMINATE || !conn) { in iscsi_session_failure()
1370 iscsi_get_conn(conn->cls_conn); in iscsi_session_failure()
1378 iscsi_conn_error_event(conn->cls_conn, err); in iscsi_session_failure()
1380 iscsi_conn_failure(conn, err); in iscsi_session_failure()
1381 iscsi_put_conn(conn->cls_conn); in iscsi_session_failure()
1385 static bool iscsi_set_conn_failed(struct iscsi_conn *conn) in iscsi_set_conn_failed() argument
1387 struct iscsi_session *session = conn->session; in iscsi_set_conn_failed()
1392 if (conn->stop_stage == 0) in iscsi_set_conn_failed()
1395 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); in iscsi_set_conn_failed()
1396 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx); in iscsi_set_conn_failed()
1400 void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err) in iscsi_conn_failure() argument
1402 struct iscsi_session *session = conn->session; in iscsi_conn_failure()
1406 needs_evt = iscsi_set_conn_failed(conn); in iscsi_conn_failure()
1410 iscsi_conn_error_event(conn->cls_conn, err); in iscsi_conn_failure()
1414 static int iscsi_check_cmdsn_window_closed(struct iscsi_conn *conn) in iscsi_check_cmdsn_window_closed() argument
1416 struct iscsi_session *session = conn->session; in iscsi_check_cmdsn_window_closed()
1431 static int iscsi_xmit_task(struct iscsi_conn *conn, struct iscsi_task *task, in iscsi_xmit_task() argument
1436 spin_lock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1438 if (!conn->task) { in iscsi_xmit_task()
1443 conn->task = NULL; in iscsi_xmit_task()
1457 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) { in iscsi_xmit_task()
1462 conn->task = task; in iscsi_xmit_task()
1463 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1466 spin_unlock_bh(&conn->session->back_lock); in iscsi_xmit_task()
1468 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1469 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1470 spin_lock_bh(&conn->session->frwd_lock); in iscsi_xmit_task()
1476 spin_lock(&conn->session->back_lock); in iscsi_xmit_task()
1483 conn->task = task; in iscsi_xmit_task()
1487 spin_unlock(&conn->session->back_lock); in iscsi_xmit_task()
1499 struct iscsi_conn *conn = task->conn; in iscsi_requeue_task() local
1505 spin_lock_bh(&conn->session->frwd_lock); in iscsi_requeue_task()
1507 list_add_tail(&task->running, &conn->requeue); in iscsi_requeue_task()
1515 iscsi_conn_queue_work(conn); in iscsi_requeue_task()
1516 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_requeue_task()
1529 static int iscsi_data_xmit(struct iscsi_conn *conn) in iscsi_data_xmit() argument
1534 spin_lock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1535 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) { in iscsi_data_xmit()
1536 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); in iscsi_data_xmit()
1537 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1541 if (conn->task) { in iscsi_data_xmit()
1542 rc = iscsi_xmit_task(conn, conn->task, false); in iscsi_data_xmit()
1553 while (!list_empty(&conn->mgmtqueue)) { in iscsi_data_xmit()
1554 task = list_entry(conn->mgmtqueue.next, struct iscsi_task, in iscsi_data_xmit()
1557 if (iscsi_prep_mgmt_task(conn, task)) { in iscsi_data_xmit()
1559 spin_lock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1561 spin_unlock_bh(&conn->session->back_lock); in iscsi_data_xmit()
1564 rc = iscsi_xmit_task(conn, task, false); in iscsi_data_xmit()
1570 while (!list_empty(&conn->cmdqueue)) { in iscsi_data_xmit()
1571 task = list_entry(conn->cmdqueue.next, struct iscsi_task, in iscsi_data_xmit()
1574 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) { in iscsi_data_xmit()
1586 rc = iscsi_xmit_task(conn, task, false); in iscsi_data_xmit()
1594 if (!list_empty(&conn->mgmtqueue)) in iscsi_data_xmit()
1598 while (!list_empty(&conn->requeue)) { in iscsi_data_xmit()
1602 if (conn->session->state == ISCSI_STATE_LOGGING_OUT) in iscsi_data_xmit()
1605 task = list_entry(conn->requeue.next, struct iscsi_task, in iscsi_data_xmit()
1612 rc = iscsi_xmit_task(conn, task, true); in iscsi_data_xmit()
1615 if (!list_empty(&conn->mgmtqueue)) in iscsi_data_xmit()
1618 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1622 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_data_xmit()
1628 struct iscsi_conn *conn = in iscsi_xmitworker() local
1635 rc = iscsi_data_xmit(conn); in iscsi_xmitworker()
1639 static inline struct iscsi_task *iscsi_alloc_task(struct iscsi_conn *conn, in iscsi_alloc_task() argument
1644 if (!kfifo_out(&conn->session->cmdpool.queue, in iscsi_alloc_task()
1648 sc->SCp.phase = conn->session->age; in iscsi_alloc_task()
1653 task->conn = conn; in iscsi_alloc_task()
1682 struct iscsi_conn *conn; in iscsi_queuecommand() local
1742 conn = session->leadconn; in iscsi_queuecommand()
1743 if (!conn) { in iscsi_queuecommand()
1749 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) { in iscsi_queuecommand()
1755 if (iscsi_check_cmdsn_window_closed(conn)) { in iscsi_queuecommand()
1760 task = iscsi_alloc_task(conn, sc); in iscsi_queuecommand()
1783 list_add_tail(&task->running, &conn->cmdqueue); in iscsi_queuecommand()
1784 iscsi_conn_queue_work(conn); in iscsi_queuecommand()
1839 static int iscsi_exec_task_mgmt_fn(struct iscsi_conn *conn, in iscsi_exec_task_mgmt_fn() argument
1844 struct iscsi_session *session = conn->session; in iscsi_exec_task_mgmt_fn()
1847 task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)hdr, in iscsi_exec_task_mgmt_fn()
1851 iscsi_conn_printk(KERN_ERR, conn, "Could not send TMF.\n"); in iscsi_exec_task_mgmt_fn()
1852 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); in iscsi_exec_task_mgmt_fn()
1856 conn->tmfcmd_pdus_cnt++; in iscsi_exec_task_mgmt_fn()
1891 static void fail_scsi_tasks(struct iscsi_conn *conn, u64 lun, int error) in fail_scsi_tasks() argument
1893 struct iscsi_session *session = conn->session; in fail_scsi_tasks()
1935 void iscsi_suspend_queue(struct iscsi_conn *conn) in iscsi_suspend_queue() argument
1937 spin_lock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1938 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); in iscsi_suspend_queue()
1939 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_suspend_queue()
1951 void iscsi_suspend_tx(struct iscsi_conn *conn) in iscsi_suspend_tx() argument
1953 struct Scsi_Host *shost = conn->session->host; in iscsi_suspend_tx()
1956 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); in iscsi_suspend_tx()
1962 static void iscsi_start_tx(struct iscsi_conn *conn) in iscsi_start_tx() argument
1964 clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); in iscsi_start_tx()
1965 iscsi_conn_queue_work(conn); in iscsi_start_tx()
1974 static int iscsi_has_ping_timed_out(struct iscsi_conn *conn) in iscsi_has_ping_timed_out() argument
1976 if (READ_ONCE(conn->ping_task) && in iscsi_has_ping_timed_out()
1977 time_before_eq(conn->last_recv + (conn->recv_timeout * HZ) + in iscsi_has_ping_timed_out()
1978 (conn->ping_timeout * HZ), jiffies)) in iscsi_has_ping_timed_out()
1990 struct iscsi_conn *conn; in iscsi_eh_cmd_timed_out() local
2035 conn = session->leadconn; in iscsi_eh_cmd_timed_out()
2036 if (!conn) { in iscsi_eh_cmd_timed_out()
2059 if (!conn->recv_timeout && !conn->ping_timeout) in iscsi_eh_cmd_timed_out()
2065 if (iscsi_has_ping_timed_out(conn)) { in iscsi_eh_cmd_timed_out()
2071 for (i = 0; i < conn->session->cmds_max; i++) { in iscsi_eh_cmd_timed_out()
2072 running_task = conn->session->cmds[i]; in iscsi_eh_cmd_timed_out()
2118 if (READ_ONCE(conn->ping_task)) { in iscsi_eh_cmd_timed_out()
2125 iscsi_send_nopout(conn, NULL); in iscsi_eh_cmd_timed_out()
2144 struct iscsi_conn *conn = from_timer(conn, t, transport_timer); in iscsi_check_transport_timeouts() local
2145 struct iscsi_session *session = conn->session; in iscsi_check_transport_timeouts()
2152 recv_timeout = conn->recv_timeout; in iscsi_check_transport_timeouts()
2157 last_recv = conn->last_recv; in iscsi_check_transport_timeouts()
2159 if (iscsi_has_ping_timed_out(conn)) { in iscsi_check_transport_timeouts()
2160 iscsi_conn_printk(KERN_ERR, conn, "ping timeout of %d secs " in iscsi_check_transport_timeouts()
2163 conn->ping_timeout, conn->recv_timeout, in iscsi_check_transport_timeouts()
2164 last_recv, conn->last_ping, jiffies); in iscsi_check_transport_timeouts()
2166 iscsi_conn_failure(conn, ISCSI_ERR_NOP_TIMEDOUT); in iscsi_check_transport_timeouts()
2172 ISCSI_DBG_CONN(conn, "Sending nopout as ping\n"); in iscsi_check_transport_timeouts()
2173 if (iscsi_send_nopout(conn, NULL)) in iscsi_check_transport_timeouts()
2176 next_timeout = conn->last_ping + (conn->ping_timeout * HZ); in iscsi_check_transport_timeouts()
2180 ISCSI_DBG_CONN(conn, "Setting next tmo %lu\n", next_timeout); in iscsi_check_transport_timeouts()
2181 mod_timer(&conn->transport_timer, next_timeout); in iscsi_check_transport_timeouts()
2198 struct iscsi_conn *conn; in iscsi_conn_unbind() local
2203 conn = cls_conn->dd_data; in iscsi_conn_unbind()
2204 session = conn->session; in iscsi_conn_unbind()
2213 iscsi_suspend_queue(conn); in iscsi_conn_unbind()
2214 iscsi_suspend_tx(conn); in iscsi_conn_unbind()
2224 iscsi_set_conn_failed(conn); in iscsi_conn_unbind()
2247 struct iscsi_conn *conn; in iscsi_eh_abort() local
2296 conn = session->leadconn; in iscsi_eh_abort()
2297 iscsi_get_conn(conn->cls_conn); in iscsi_eh_abort()
2298 conn->eh_abort_cnt++; in iscsi_eh_abort()
2318 if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) in iscsi_eh_abort()
2328 iscsi_suspend_tx(conn); in iscsi_eh_abort()
2339 iscsi_start_tx(conn); in iscsi_eh_abort()
2344 iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST); in iscsi_eh_abort()
2367 iscsi_put_conn(conn->cls_conn); in iscsi_eh_abort()
2384 iscsi_put_conn(conn->cls_conn); in iscsi_eh_abort()
2404 struct iscsi_conn *conn; in iscsi_eh_device_reset() local
2422 conn = session->leadconn; in iscsi_eh_device_reset()
2432 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_device_reset()
2443 iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST); in iscsi_eh_device_reset()
2453 iscsi_suspend_tx(conn); in iscsi_eh_device_reset()
2457 fail_scsi_tasks(conn, sc->device->lun, DID_ERROR); in iscsi_eh_device_reset()
2461 iscsi_start_tx(conn); in iscsi_eh_device_reset()
2498 struct iscsi_conn *conn; in iscsi_eh_session_reset() local
2516 conn = session->leadconn; in iscsi_eh_session_reset()
2517 iscsi_get_conn(conn->cls_conn); in iscsi_eh_session_reset()
2522 iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST); in iscsi_eh_session_reset()
2523 iscsi_put_conn(conn->cls_conn); in iscsi_eh_session_reset()
2538 session->targetname, conn->persistent_address); in iscsi_eh_session_reset()
2566 struct iscsi_conn *conn; in iscsi_eh_target_reset() local
2584 conn = session->leadconn; in iscsi_eh_target_reset()
2594 if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age, in iscsi_eh_target_reset()
2605 iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST); in iscsi_eh_target_reset()
2615 iscsi_suspend_tx(conn); in iscsi_eh_target_reset()
2619 fail_scsi_tasks(conn, -1, DID_ERROR); in iscsi_eh_target_reset()
2623 iscsi_start_tx(conn); in iscsi_eh_target_reset()
3040 struct iscsi_conn *conn; in iscsi_conn_setup() local
3044 cls_conn = iscsi_create_conn(cls_session, sizeof(*conn) + dd_size, in iscsi_conn_setup()
3048 conn = cls_conn->dd_data; in iscsi_conn_setup()
3049 memset(conn, 0, sizeof(*conn) + dd_size); in iscsi_conn_setup()
3051 conn->dd_data = cls_conn->dd_data + sizeof(*conn); in iscsi_conn_setup()
3052 conn->session = session; in iscsi_conn_setup()
3053 conn->cls_conn = cls_conn; in iscsi_conn_setup()
3054 conn->c_stage = ISCSI_CONN_INITIAL_STAGE; in iscsi_conn_setup()
3055 conn->id = conn_idx; in iscsi_conn_setup()
3056 conn->exp_statsn = 0; in iscsi_conn_setup()
3058 timer_setup(&conn->transport_timer, iscsi_check_transport_timeouts, 0); in iscsi_conn_setup()
3060 INIT_LIST_HEAD(&conn->mgmtqueue); in iscsi_conn_setup()
3061 INIT_LIST_HEAD(&conn->cmdqueue); in iscsi_conn_setup()
3062 INIT_LIST_HEAD(&conn->requeue); in iscsi_conn_setup()
3063 INIT_WORK(&conn->xmitwork, iscsi_xmitworker); in iscsi_conn_setup()
3068 (void*)&conn->login_task, in iscsi_conn_setup()
3079 conn->login_task->data = conn->data = data; in iscsi_conn_setup()
3084 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_setup()
3101 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_teardown() local
3102 struct iscsi_session *session = conn->session; in iscsi_conn_teardown()
3103 char *tmp_persistent_address = conn->persistent_address; in iscsi_conn_teardown()
3104 char *tmp_local_ipaddr = conn->local_ipaddr; in iscsi_conn_teardown()
3106 del_timer_sync(&conn->transport_timer); in iscsi_conn_teardown()
3110 conn->c_stage = ISCSI_CONN_CLEANUP_WAIT; in iscsi_conn_teardown()
3111 if (session->leadconn == conn) { in iscsi_conn_teardown()
3121 iscsi_suspend_tx(conn); in iscsi_conn_teardown()
3124 free_pages((unsigned long) conn->data, in iscsi_conn_teardown()
3128 kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task, in iscsi_conn_teardown()
3131 if (session->leadconn == conn) in iscsi_conn_teardown()
3144 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_start() local
3145 struct iscsi_session *session = conn->session; in iscsi_conn_start()
3148 iscsi_conn_printk(KERN_ERR, conn, in iscsi_conn_start()
3155 iscsi_conn_printk(KERN_INFO, conn, "invalid burst lengths: " in iscsi_conn_start()
3161 if (conn->ping_timeout && !conn->recv_timeout) { in iscsi_conn_start()
3162 iscsi_conn_printk(KERN_ERR, conn, "invalid recv timeout of " in iscsi_conn_start()
3164 conn->recv_timeout = 5; in iscsi_conn_start()
3167 if (conn->recv_timeout && !conn->ping_timeout) { in iscsi_conn_start()
3168 iscsi_conn_printk(KERN_ERR, conn, "invalid ping timeout of " in iscsi_conn_start()
3170 conn->ping_timeout = 5; in iscsi_conn_start()
3174 conn->c_stage = ISCSI_CONN_STARTED; in iscsi_conn_start()
3178 conn->last_recv = jiffies; in iscsi_conn_start()
3179 conn->last_ping = jiffies; in iscsi_conn_start()
3180 if (conn->recv_timeout && conn->ping_timeout) in iscsi_conn_start()
3181 mod_timer(&conn->transport_timer, in iscsi_conn_start()
3182 jiffies + (conn->recv_timeout * HZ)); in iscsi_conn_start()
3184 switch(conn->stop_stage) { in iscsi_conn_start()
3190 conn->stop_stage = 0; in iscsi_conn_start()
3197 conn->stop_stage = 0; in iscsi_conn_start()
3211 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn) in fail_mgmt_tasks() argument
3216 for (i = 0; i < conn->session->cmds_max; i++) { in fail_mgmt_tasks()
3217 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3224 ISCSI_DBG_SESSION(conn->session, in fail_mgmt_tasks()
3244 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_stop() local
3245 struct iscsi_session *session = conn->session; in iscsi_conn_stop()
3250 if (conn->stop_stage == STOP_CONN_TERM) { in iscsi_conn_stop()
3263 else if (conn->stop_stage != STOP_CONN_RECOVER) in iscsi_conn_stop()
3266 old_stop_stage = conn->stop_stage; in iscsi_conn_stop()
3267 conn->stop_stage = flag; in iscsi_conn_stop()
3270 del_timer_sync(&conn->transport_timer); in iscsi_conn_stop()
3271 iscsi_suspend_tx(conn); in iscsi_conn_stop()
3274 conn->c_stage = ISCSI_CONN_STOPPED; in iscsi_conn_stop()
3284 conn->hdrdgst_en = 0; in iscsi_conn_stop()
3285 conn->datadgst_en = 0; in iscsi_conn_stop()
3297 fail_scsi_tasks(conn, -1, DID_TRANSPORT_DISRUPTED); in iscsi_conn_stop()
3298 fail_mgmt_tasks(session, conn); in iscsi_conn_stop()
3309 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_bind() local
3313 session->leadconn = conn; in iscsi_conn_bind()
3326 clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx); in iscsi_conn_bind()
3327 clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); in iscsi_conn_bind()
3354 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_set_param() local
3355 struct iscsi_session *session = conn->session; in iscsi_set_param()
3372 sscanf(buf, "%d", &conn->ping_timeout); in iscsi_set_param()
3375 sscanf(buf, "%d", &conn->recv_timeout); in iscsi_set_param()
3378 sscanf(buf, "%d", &conn->max_recv_dlength); in iscsi_set_param()
3381 sscanf(buf, "%d", &conn->max_xmit_dlength); in iscsi_set_param()
3384 sscanf(buf, "%d", &conn->hdrdgst_en); in iscsi_set_param()
3387 sscanf(buf, "%d", &conn->datadgst_en); in iscsi_set_param()
3414 sscanf(buf, "%u", &conn->exp_statsn); in iscsi_set_param()
3432 sscanf(buf, "%d", &conn->persistent_port); in iscsi_set_param()
3435 return iscsi_switch_str_param(&conn->persistent_address, buf); in iscsi_set_param()
3456 return iscsi_switch_str_param(&conn->local_ipaddr, buf); in iscsi_set_param()
3646 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_conn_get_param() local
3651 len = sysfs_emit(buf, "%u\n", conn->ping_timeout); in iscsi_conn_get_param()
3654 len = sysfs_emit(buf, "%u\n", conn->recv_timeout); in iscsi_conn_get_param()
3657 len = sysfs_emit(buf, "%u\n", conn->max_recv_dlength); in iscsi_conn_get_param()
3660 len = sysfs_emit(buf, "%u\n", conn->max_xmit_dlength); in iscsi_conn_get_param()
3663 len = sysfs_emit(buf, "%d\n", conn->hdrdgst_en); in iscsi_conn_get_param()
3666 len = sysfs_emit(buf, "%d\n", conn->datadgst_en); in iscsi_conn_get_param()
3669 len = sysfs_emit(buf, "%d\n", conn->ifmarker_en); in iscsi_conn_get_param()
3672 len = sysfs_emit(buf, "%d\n", conn->ofmarker_en); in iscsi_conn_get_param()
3675 len = sysfs_emit(buf, "%u\n", conn->exp_statsn); in iscsi_conn_get_param()
3678 len = sysfs_emit(buf, "%d\n", conn->persistent_port); in iscsi_conn_get_param()
3681 len = sysfs_emit(buf, "%s\n", conn->persistent_address); in iscsi_conn_get_param()
3684 len = sysfs_emit(buf, "%u\n", conn->statsn); in iscsi_conn_get_param()
3687 len = sysfs_emit(buf, "%u\n", conn->max_segment_size); in iscsi_conn_get_param()
3690 len = sysfs_emit(buf, "%u\n", conn->keepalive_tmo); in iscsi_conn_get_param()
3693 len = sysfs_emit(buf, "%u\n", conn->local_port); in iscsi_conn_get_param()
3696 len = sysfs_emit(buf, "%u\n", conn->tcp_timestamp_stat); in iscsi_conn_get_param()
3699 len = sysfs_emit(buf, "%u\n", conn->tcp_nagle_disable); in iscsi_conn_get_param()
3702 len = sysfs_emit(buf, "%u\n", conn->tcp_wsf_disable); in iscsi_conn_get_param()
3705 len = sysfs_emit(buf, "%u\n", conn->tcp_timer_scale); in iscsi_conn_get_param()
3708 len = sysfs_emit(buf, "%u\n", conn->tcp_timestamp_en); in iscsi_conn_get_param()
3711 len = sysfs_emit(buf, "%u\n", conn->fragment_disable); in iscsi_conn_get_param()
3714 len = sysfs_emit(buf, "%u\n", conn->ipv4_tos); in iscsi_conn_get_param()
3717 len = sysfs_emit(buf, "%u\n", conn->ipv6_traffic_class); in iscsi_conn_get_param()
3720 len = sysfs_emit(buf, "%u\n", conn->ipv6_flow_label); in iscsi_conn_get_param()
3723 len = sysfs_emit(buf, "%u\n", conn->is_fw_assigned_ipv6); in iscsi_conn_get_param()
3726 len = sysfs_emit(buf, "%u\n", conn->tcp_xmit_wsf); in iscsi_conn_get_param()
3729 len = sysfs_emit(buf, "%u\n", conn->tcp_recv_wsf); in iscsi_conn_get_param()
3732 len = sysfs_emit(buf, "%s\n", conn->local_ipaddr); in iscsi_conn_get_param()