Lines Matching defs:isp

67 void iscsi_update_flow_control(iscsi_sess_t *isp,
69 static iscsi_status_t iscsi_rx_process_scsi_itt_to_icmdp(iscsi_sess_t *isp,
71 static iscsi_status_t iscsi_rx_process_itt_to_icmdp(iscsi_sess_t *isp,
73 static void iscsi_process_rsp_status(iscsi_sess_t *isp, iscsi_conn_t *icp,
100 static iscsi_status_t iscsi_tx_scsi(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
101 static iscsi_status_t iscsi_tx_nop(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
102 static iscsi_status_t iscsi_tx_abort(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
103 static iscsi_status_t iscsi_tx_reset(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
104 static iscsi_status_t iscsi_tx_logout(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
105 static iscsi_status_t iscsi_tx_text(iscsi_sess_t *isp, iscsi_cmd_t *icmdp);
113 static void iscsi_timeout_checks(iscsi_sess_t *isp);
114 static void iscsi_nop_checks(iscsi_sess_t *isp);
222 iscsi_update_flow_control(iscsi_sess_t *isp, uint32_t max, uint32_t exp)
224 ASSERT(isp != NULL);
225 ASSERT(mutex_owned(&isp->sess_cmdsn_mutex));
229 if (!iscsi_sna_lte(exp, isp->sess_expcmdsn)) {
230 isp->sess_expcmdsn = exp;
233 if (!iscsi_sna_lte(max, isp->sess_maxcmdsn)) {
234 isp->sess_maxcmdsn = max;
235 if (iscsi_sna_lte(isp->sess_cmdsn,
236 isp->sess_maxcmdsn)) {
241 iscsi_sess_redrive_io(isp);
262 iscsi_sess_t *isp;
272 isp = icp->conn_sess;
273 ASSERT(isp != NULL);
276 isp->sess_rx_lbolt = icp->conn_rx_lbolt = ddi_get_lbolt();
293 iscsi_process_rsp_status(isp, icp, status);
330 iscsi_rx_chk(iscsi_conn_t *icp, iscsi_sess_t *isp,
335 mutex_enter(&isp->sess_cmdsn_mutex);
344 mutex_exit(&isp->sess_cmdsn_mutex);
351 rval = iscsi_rx_process_scsi_itt_to_icmdp(isp, icp->conn_ic,
354 rval = iscsi_rx_process_itt_to_icmdp(isp,
359 mutex_exit(&isp->sess_cmdsn_mutex);
364 iscsi_update_flow_control(isp, ntohl(irhp->maxcmdsn),
366 mutex_exit(&isp->sess_cmdsn_mutex);
649 iscsi_sess_t *isp = icp->conn_sess;
663 if ((rval = iscsi_rx_chk(icp, isp, issrhp,
734 issrhp->expcmdsn, isp->sess_cmdsn, isp->sess_expcmdsn,
767 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E3, isp);
861 iscsi_sess_t *isp = NULL;
872 isp = icp->conn_sess;
875 if ((rval = iscsi_rx_chk(icp, isp, (iscsi_scsi_rsp_hdr_t *)idrhp,
974 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E3, isp);
989 iscsi_sess_t *isp = NULL;
1001 isp = icp->conn_sess;
1002 ASSERT(isp != NULL);
1003 mutex_enter(&isp->sess_queue_pending.mutex);
1005 mutex_enter(&isp->sess_cmdsn_mutex);
1008 isp, (iscsi_hdr_t *)inihp, &icmdp))) {
1012 mutex_exit(&isp->sess_cmdsn_mutex);
1014 mutex_exit(&isp->sess_queue_pending.mutex);
1020 iscsi_update_flow_control(isp, ntohl(inihp->maxcmdsn),
1022 mutex_exit(&isp->sess_cmdsn_mutex);
1032 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E3, isp);
1047 mutex_exit(&isp->sess_queue_pending.mutex);
1060 iscsi_sess_t *isp = NULL;
1069 isp = icp->conn_sess;
1070 ASSERT(isp != NULL);
1080 mutex_enter(&isp->sess_cmdsn_mutex);
1089 mutex_exit(&isp->sess_cmdsn_mutex);
1093 iscsi_update_flow_control(isp, ntohl(irrhp->maxcmdsn),
1096 mutex_exit(&isp->sess_cmdsn_mutex);
1184 iscsi_sess_t *isp = NULL;
1188 isp = icp->conn_sess;
1190 ASSERT(isp != NULL);
1193 mutex_enter(&isp->sess_cmdsn_mutex);
1195 isp, old_ihp, &icmdp))) {
1196 mutex_exit(&isp->sess_cmdsn_mutex);
1200 mutex_exit(&isp->sess_cmdsn_mutex);
1226 iscsi_sess_t *isp = NULL;
1232 isp = icp->conn_sess;
1236 if ((status = iscsi_rx_chk(icp, isp, (iscsi_scsi_rsp_hdr_t *)istmrhp,
1249 ISCSI_CMD_EVENT_E3, isp);
1263 ISCSI_CMD_EVENT_E4, isp);
1277 ISCSI_CMD_EVENT_E3, isp);
1322 iscsi_sess_t *isp;
1325 isp = icp->conn_sess;
1336 mutex_enter(&isp->sess_cmdsn_mutex);
1339 isp, (iscsi_hdr_t *)ilrhp, &icmdp))) {
1340 mutex_exit(&isp->sess_cmdsn_mutex);
1347 iscsi_update_flow_control(isp, ntohl(ilrhp->maxcmdsn),
1349 mutex_exit(&isp->sess_cmdsn_mutex);
1376 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E3, isp);
1398 iscsi_sess_t *isp = icp->conn_sess;
1406 ASSERT(isp != NULL);
1408 mutex_enter(&isp->sess_cmdsn_mutex);
1416 mutex_exit(&isp->sess_cmdsn_mutex);
1419 mutex_exit(&isp->sess_cmdsn_mutex);
1442 if (isp->sess_type == ISCSI_SESS_TYPE_NORMAL) {
1443 rw_enter(&isp->sess_state_rwlock, RW_READER);
1444 if (isp->sess_state == ISCSI_SESS_STATE_LOGGED_IN) {
1445 (void) iscsi_sess_enum_request(isp, B_FALSE,
1446 isp->sess_state_event_count);
1448 rw_exit(&isp->sess_state_rwlock);
1475 if (ddi_taskq_dispatch(isp->sess_login_taskq,
1534 if (ddi_taskq_dispatch(isp->sess_login_taskq,
1573 iscsi_sess_t *isp = NULL;
1583 isp = icp->conn_sess;
1586 if ((rval = iscsi_rx_chk(icp, isp, (iscsi_scsi_rsp_hdr_t *)ithp,
1667 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E3, isp);
1677 iscsi_rx_process_scsi_itt_to_icmdp(iscsi_sess_t *isp, idm_conn_t *ic,
1682 ASSERT(isp != NULL);
1685 ASSERT(mutex_owned(&isp->sess_cmdsn_mutex));
1690 isp->sess_oid, ihp->itt);
1707 iscsi_rx_process_itt_to_icmdp(iscsi_sess_t *isp, iscsi_hdr_t *ihp,
1712 ASSERT(isp != NULL);
1715 ASSERT(mutex_owned(&isp->sess_cmdsn_mutex));
1719 if (isp->sess_cmd_table[cmd_table_idx] == NULL) {
1722 isp->sess_oid, ihp->itt);
1727 if (isp->sess_cmd_table[cmd_table_idx]->cmd_itt != ihp->itt) {
1729 " which is out of sync with itt:0x%x", isp->sess_oid,
1730 ihp->itt, isp->sess_cmd_table[cmd_table_idx]->cmd_itt);
1735 if (isp->sess_cmd_table[cmd_table_idx]->cmd_state !=
1739 isp->sess_oid, ihp->itt,
1740 (void *)isp->sess_cmd_table[cmd_table_idx]);
1745 *icmdp = isp->sess_cmd_table[cmd_table_idx];
1772 iscsi_sess_t *isp = NULL;
1778 isp = icp->conn_sess;
1779 ASSERT(isp != NULL);
1789 isp->sess_window_open = B_TRUE;
1795 mutex_enter(&isp->sess_queue_pending.mutex);
1796 while ((isp->sess_window_open == B_TRUE) &&
1797 ((icmdp = isp->sess_queue_pending.head) != NULL)) {
1806 ISCSI_CMD_EVENT_E2, isp);
1809 &isp->sess_queue_pending.mutex));
1810 mutex_enter(&isp->sess_queue_pending.mutex);
1829 mutex_exit(&isp->sess_queue_pending.mutex);
1855 iscsi_tx_cmd(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
1859 ASSERT(isp != NULL);
1865 rval = iscsi_tx_scsi(isp, icmdp);
1868 rval = iscsi_tx_nop(isp, icmdp);
1871 rval = iscsi_tx_abort(isp, icmdp);
1874 rval = iscsi_tx_reset(isp, icmdp);
1877 rval = iscsi_tx_logout(isp, icmdp);
1880 rval = iscsi_tx_text(isp, icmdp);
1888 ASSERT(!mutex_owned(&isp->sess_queue_pending.mutex));
1908 iscsi_tx_init_hdr(iscsi_sess_t *isp, iscsi_conn_t *icp,
1913 mutex_enter(&isp->sess_cmdsn_mutex);
1914 icmdp->cmd_sn = isp->sess_cmdsn;
1915 ihp->cmdsn = htonl(isp->sess_cmdsn);
1916 isp->sess_cmdsn++;
1917 mutex_exit(&isp->sess_cmdsn_mutex);
2147 iscsi_tx_scsi(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2157 ASSERT(isp != NULL);
2183 iscsi_tx_init_hdr(isp, icp, (iscsi_text_hdr_t *)ihp,
2204 mutex_exit(&isp->sess_queue_pending.mutex);
2252 iscsi_tx_nop(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2258 ASSERT(isp != NULL);
2270 mutex_enter(&isp->sess_cmdsn_mutex);
2271 icmdp->cmd_sn = isp->sess_cmdsn;
2272 inohp->cmdsn = htonl(isp->sess_cmdsn);
2273 mutex_exit(&isp->sess_cmdsn_mutex);
2287 iscsi_tx_abort(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2293 ASSERT(isp != NULL);
2300 mutex_enter(&isp->sess_cmdsn_mutex);
2301 icmdp->cmd_sn = isp->sess_cmdsn;
2302 istmh->cmdsn = htonl(isp->sess_cmdsn);
2303 mutex_exit(&isp->sess_cmdsn_mutex);
2324 iscsi_tx_reset(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2330 ASSERT(isp != NULL);
2338 mutex_enter(&isp->sess_cmdsn_mutex);
2339 icmdp->cmd_sn = isp->sess_cmdsn;
2340 istmh->cmdsn = htonl(isp->sess_cmdsn);
2341 mutex_exit(&isp->sess_cmdsn_mutex);
2374 iscsi_tx_logout(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2380 ASSERT(isp != NULL);
2390 mutex_enter(&isp->sess_cmdsn_mutex);
2391 icmdp->cmd_sn = isp->sess_cmdsn;
2392 ilh->cmdsn = htonl(isp->sess_cmdsn);
2393 mutex_exit(&isp->sess_cmdsn_mutex);
2414 iscsi_tx_text(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
2429 iscsi_tx_init_hdr(isp, icp, (iscsi_text_hdr_t *)ith,
2452 iscsi_sess_t *isp = NULL;
2460 isp = icp->conn_sess;
2461 ASSERT(isp != NULL);
2474 iscsi_cmd_state_machine(new_icmdp, ISCSI_CMD_EVENT_E1, isp);
2485 iscsi_sess_t *isp = icp->conn_sess;
2499 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E9, isp);
2519 iscsi_sess_t *isp = NULL;
2523 isp = icp->conn_sess;
2524 ASSERT(isp != NULL);
2537 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E1, isp);
2545 iscsi_handle_reset(iscsi_sess_t *isp, int level, iscsi_lun_t *ilp)
2551 ASSERT(isp != NULL);
2554 rw_enter(&isp->sess_lun_list_rwlock, RW_WRITER);
2557 rw_exit(&isp->sess_lun_list_rwlock);
2561 rw_exit(&isp->sess_lun_list_rwlock);
2563 mutex_enter(&isp->sess_reset_mutex);
2564 if (isp->sess_reset_in_progress == B_TRUE) {
2569 mutex_exit(&isp->sess_reset_mutex);
2572 isp->sess_reset_in_progress = B_TRUE;
2573 mutex_exit(&isp->sess_reset_mutex);
2593 rw_enter(&isp->sess_state_rwlock, RW_READER);
2594 if (!ISCSI_SESS_STATE_FULL_FEATURE(isp->sess_state)) {
2596 rw_exit(&isp->sess_state_rwlock);
2599 rw_enter(&isp->sess_lun_list_rwlock, RW_WRITER);
2601 rw_exit(&isp->sess_lun_list_rwlock);
2603 mutex_enter(&isp->sess_reset_mutex);
2604 isp->sess_reset_in_progress = B_FALSE;
2605 mutex_exit(&isp->sess_reset_mutex);
2611 mutex_enter(&isp->sess_queue_pending.mutex);
2612 iscsi_cmd_state_machine(&icmd, ISCSI_CMD_EVENT_E1, isp);
2613 mutex_exit(&isp->sess_queue_pending.mutex);
2614 rw_exit(&isp->sess_state_rwlock);
2631 rw_enter(&isp->sess_conn_list_rwlock, RW_READER);
2632 icp = isp->sess_conn_list;
2697 ISCSI_CMD_EVENT_E7, isp);
2708 rw_exit(&isp->sess_conn_list_rwlock);
2716 rw_enter(&isp->sess_lun_list_rwlock, RW_WRITER);
2718 rw_exit(&isp->sess_lun_list_rwlock);
2720 mutex_enter(&isp->sess_reset_mutex);
2721 isp->sess_reset_in_progress = B_FALSE;
2722 mutex_exit(&isp->sess_reset_mutex);
2753 iscsi_sess_t *isp;
2759 isp = icp->conn_sess;
2761 ASSERT(isp != NULL);
2762 ASSERT(isp->sess_hba != NULL);
2784 mutex_enter(&isp->sess_queue_pending.mutex);
2785 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E1, isp);
2786 mutex_exit(&isp->sess_queue_pending.mutex);
2847 iscsi_sess_t *isp;
2855 isp = icp->conn_sess;
2856 ASSERT(isp != NULL);
2887 rw_enter(&isp->sess_state_rwlock, RW_READER);
2888 if (!ISCSI_SESS_STATE_FULL_FEATURE(isp->sess_state)) {
2890 rw_exit(&isp->sess_state_rwlock);
2894 mutex_enter(&isp->sess_queue_pending.mutex);
2895 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E1, isp);
2896 mutex_exit(&isp->sess_queue_pending.mutex);
2897 rw_exit(&isp->sess_state_rwlock);
2963 iscsi_handle_passthru(iscsi_sess_t *isp, uint16_t lun, struct uscsi_cmd *ucmdp)
2972 ASSERT(isp != NULL);
3027 rw_enter(&isp->sess_state_rwlock, RW_READER);
3028 if (!ISCSI_SESS_STATE_FULL_FEATURE(isp->sess_state)) {
3029 rw_exit(&isp->sess_state_rwlock);
3040 mutex_enter(&isp->sess_queue_pending.mutex);
3041 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E1, isp);
3042 mutex_exit(&isp->sess_queue_pending.mutex);
3043 rw_exit(&isp->sess_state_rwlock);
3152 iscsi_process_rsp_status(iscsi_sess_t *isp, iscsi_conn_t *icp,
3157 if ((isp->sess_state == ISCSI_SESS_STATE_IN_FLUSH) &&
3182 iscsi_sess_t *isp;
3185 isp = icp->conn_sess;
3186 ASSERT(isp != NULL);
3187 iscsi_process_rsp_status(isp, icp, status);
3196 iscsi_sess_t *isp;
3200 isp = icp->conn_sess;
3201 isp->sess_rx_lbolt = icp->conn_rx_lbolt = ddi_get_lbolt();
3236 iscsi_process_rsp_status(isp, icp, status);
3251 iscsi_sess_t *isp = (iscsi_sess_t *)arg;
3257 ASSERT(isp != NULL);
3276 mutex_enter(&isp->sess_queue_completion.mutex);
3277 icmdp = isp->sess_queue_completion.head;
3288 (void) iscsi_dequeue_cmd(&isp->
3290 &isp->sess_queue_completion.tail,
3292 --isp->sess_queue_completion.count;
3300 mutex_exit(&isp->sess_queue_completion.mutex);
3304 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E8, isp);
3329 iscsi_iodone(iscsi_sess_t *isp, iscsi_cmd_t *icmdp)
3334 ASSERT(isp != NULL);
3344 KSTAT_SESS_RX_IO_DONE(isp, bp->b_bcount);
3346 KSTAT_SESS_TX_IO_DONE(isp, bp->b_bcount);
3392 iscsi_sess_t *isp = (iscsi_sess_t *)arg;
3395 ASSERT(isp != NULL);
3399 iscsi_timeout_checks(isp);
3400 iscsi_nop_checks(isp);
3411 iscsi_timeout_checks(iscsi_sess_t *isp)
3417 ASSERT(isp != NULL);
3420 rw_enter(&isp->sess_state_rwlock, RW_READER);
3421 mutex_enter(&isp->sess_queue_pending.mutex);
3422 for (icmdp = isp->sess_queue_pending.head;
3452 iscsi_cmd_state_machine(icmdp, ISCSI_CMD_EVENT_E6, isp);
3454 mutex_exit(&isp->sess_queue_pending.mutex);
3455 rw_exit(&isp->sess_state_rwlock);
3457 rw_enter(&isp->sess_conn_list_rwlock, RW_READER);
3458 icp = isp->sess_conn_list;
3464 mutex_enter(&isp->sess_queue_pending.mutex);
3496 ISCSI_CMD_EVENT_E7, isp);
3500 ISCSI_CMD_EVENT_E6, isp);
3505 mutex_exit(&isp->sess_queue_pending.mutex);
3511 icp = isp->sess_conn_list;
3520 rw_exit(&isp->sess_conn_list_rwlock);
3532 iscsi_nop_checks(iscsi_sess_t *isp)
3536 ASSERT(isp != NULL);
3538 if (isp->sess_type == ISCSI_SESS_TYPE_DISCOVERY) {
3542 rw_enter(&isp->sess_conn_list_rwlock, RW_READER);
3543 icp = isp->sess_conn_act;
3548 (ddi_get_lbolt() > isp->sess_conn_act->conn_rx_lbolt +
3550 isp->sess_conn_act->conn_nop_lbolt +
3558 mutex_enter(&isp->sess_queue_pending.mutex);
3559 iscsi_handle_nop(isp->sess_conn_act,
3561 mutex_exit(&isp->sess_queue_pending.mutex);
3567 rw_exit(&isp->sess_conn_list_rwlock);
3653 iscsi_sess_t *isp = NULL;
3657 isp = icmdp->cmd_conn->conn_sess;
3688 rw_enter(&isp->sess_state_rwlock, RW_READER);
3689 if ((isp->sess_state == ISCSI_SESS_STATE_LOGGED_IN) &&
3690 (iscsi_sess_enum_request(isp, B_FALSE,
3691 isp->sess_state_event_count) !=
3694 " session(%u) %s", isp->sess_oid, isp->sess_name);
3696 rw_exit(&isp->sess_state_rwlock);