Lines Matching refs:ist

57 sess_sm_event_locked(iscsit_sess_t *ist, iscsit_session_event_t event,
61 sess_sm_event_dispatch(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
64 sess_sm_q1_free(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
67 sess_sm_q2_active(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
70 sess_sm_q3_logged_in(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
73 sess_sm_q4_failed(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
76 sess_sm_q5_continue(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
79 sess_sm_q6_done(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
82 sess_sm_q7_error(iscsit_sess_t *ist, sess_event_ctx_t *ctx);
85 sess_sm_new_state(iscsit_sess_t *ist, sess_event_ctx_t *ctx,
213 iscsit_sess_t *ist = ist_void; in iscsit_sess_unref() local
226 mutex_enter(&ist->ist_mutex); in iscsit_sess_unref()
227 ASSERT(ist->ist_conn_count == 0); in iscsit_sess_unref()
228 iss = ist->ist_stmf_sess; in iscsit_sess_unref()
231 "peername_%"PRIxPTR"", (uintptr_t)ist); in iscsit_sess_unref()
233 stmf_deregister_scsi_session(ist->ist_lport, iss); in iscsit_sess_unref()
235 strlen(ist->ist_initiator_name) + 1); in iscsit_sess_unref()
241 mutex_exit(&ist->ist_mutex); in iscsit_sess_unref()
243 iscsit_sess_destroy(ist); in iscsit_sess_unref()
248 iscsit_sess_destroy(iscsit_sess_t *ist) in iscsit_sess_destroy() argument
250 idm_refcnt_destroy(&ist->ist_refcnt); in iscsit_sess_destroy()
251 if (ist->ist_initiator_name) in iscsit_sess_destroy()
252 kmem_free(ist->ist_initiator_name, in iscsit_sess_destroy()
253 strlen(ist->ist_initiator_name) + 1); in iscsit_sess_destroy()
254 if (ist->ist_initiator_alias) in iscsit_sess_destroy()
255 kmem_free(ist->ist_initiator_alias, in iscsit_sess_destroy()
256 strlen(ist->ist_initiator_alias) + 1); in iscsit_sess_destroy()
257 if (ist->ist_target_name) in iscsit_sess_destroy()
258 kmem_free(ist->ist_target_name, in iscsit_sess_destroy()
259 strlen(ist->ist_target_name) + 1); in iscsit_sess_destroy()
260 if (ist->ist_target_alias) in iscsit_sess_destroy()
261 kmem_free(ist->ist_target_alias, in iscsit_sess_destroy()
262 strlen(ist->ist_target_alias) + 1); in iscsit_sess_destroy()
263 avl_destroy(&ist->ist_task_list); in iscsit_sess_destroy()
264 kmem_free(ist->ist_rxpdu_queue, sizeof (iscsit_cbuf_t)); in iscsit_sess_destroy()
265 list_destroy(&ist->ist_conn_list); in iscsit_sess_destroy()
266 list_destroy(&ist->ist_events); in iscsit_sess_destroy()
267 cv_destroy(&ist->ist_cv); in iscsit_sess_destroy()
268 mutex_destroy(&ist->ist_mutex); in iscsit_sess_destroy()
269 mutex_destroy(&ist->ist_sn_mutex); in iscsit_sess_destroy()
270 kmem_free(ist, sizeof (*ist)); in iscsit_sess_destroy()
274 iscsit_sess_close(iscsit_sess_t *ist) in iscsit_sess_close() argument
278 mutex_enter(&ist->ist_mutex); in iscsit_sess_close()
284 ist->ist_admin_close = B_TRUE; in iscsit_sess_close()
285 if (ist->ist_state == SS_Q3_LOGGED_IN) { in iscsit_sess_close()
286 for (ict = list_head(&ist->ist_conn_list); in iscsit_sess_close()
288 ict = list_next(&ist->ist_conn_list, ict)) { in iscsit_sess_close()
293 mutex_exit(&ist->ist_mutex); in iscsit_sess_close()
298 iscsit_sess_bind_conn(iscsit_sess_t *ist, iscsit_conn_t *ict) in iscsit_sess_bind_conn() argument
301 iscsit_sess_hold(ist); in iscsit_sess_bind_conn()
302 ict->ict_sess = ist; in iscsit_sess_bind_conn()
303 mutex_enter(&ist->ist_mutex); in iscsit_sess_bind_conn()
304 ist->ist_conn_count++; in iscsit_sess_bind_conn()
305 list_insert_tail(&ist->ist_conn_list, ict); in iscsit_sess_bind_conn()
306 mutex_exit(&ist->ist_mutex); in iscsit_sess_bind_conn()
310 iscsit_sess_unbind_conn(iscsit_sess_t *ist, iscsit_conn_t *ict) in iscsit_sess_unbind_conn() argument
312 mutex_enter(&ist->ist_mutex); in iscsit_sess_unbind_conn()
313 list_remove(&ist->ist_conn_list, ict); in iscsit_sess_unbind_conn()
314 ist->ist_conn_count--; in iscsit_sess_unbind_conn()
315 mutex_exit(&ist->ist_mutex); in iscsit_sess_unbind_conn()
316 iscsit_sess_rele(ist); in iscsit_sess_unbind_conn()
321 iscsit_sess_hold(iscsit_sess_t *ist) in iscsit_sess_hold() argument
323 idm_refcnt_hold(&ist->ist_refcnt); in iscsit_sess_hold()
327 iscsit_sess_rele(iscsit_sess_t *ist) in iscsit_sess_rele() argument
329 idm_refcnt_rele(&ist->ist_refcnt); in iscsit_sess_rele()
333 iscsit_sess_check_hold(iscsit_sess_t *ist) in iscsit_sess_check_hold() argument
335 mutex_enter(&ist->ist_mutex); in iscsit_sess_check_hold()
336 if (ist->ist_state != SS_Q6_DONE && in iscsit_sess_check_hold()
337 ist->ist_state != SS_Q7_ERROR) { in iscsit_sess_check_hold()
338 idm_refcnt_hold(&ist->ist_refcnt); in iscsit_sess_check_hold()
339 mutex_exit(&ist->ist_mutex); in iscsit_sess_check_hold()
342 mutex_exit(&ist->ist_mutex); in iscsit_sess_check_hold()
347 iscsit_sess_lookup_conn(iscsit_sess_t *ist, uint16_t cid) in iscsit_sess_lookup_conn() argument
351 mutex_enter(&ist->ist_mutex); in iscsit_sess_lookup_conn()
352 for (result = list_head(&ist->ist_conn_list); in iscsit_sess_lookup_conn()
354 result = list_next(&ist->ist_conn_list, result)) { in iscsit_sess_lookup_conn()
357 mutex_exit(&ist->ist_mutex); in iscsit_sess_lookup_conn()
361 mutex_exit(&ist->ist_mutex); in iscsit_sess_lookup_conn()
367 iscsit_sess_reinstate(iscsit_tgt_t *tgt, iscsit_sess_t *ist, iscsit_conn_t *ict, in iscsit_sess_reinstate() argument
372 mutex_enter(&ist->ist_mutex); in iscsit_sess_reinstate()
379 ist->ist_isid, ist->ist_tpgt_tag, in iscsit_sess_reinstate()
380 ist->ist_initiator_name, ist->ist_target_name, in iscsit_sess_reinstate()
385 new_sess->ist_expcmdsn = ist->ist_expcmdsn; in iscsit_sess_reinstate()
386 new_sess->ist_maxcmdsn = ist->ist_expcmdsn + 1; in iscsit_sess_reinstate()
388 if (ist->ist_state != SS_Q6_DONE && in iscsit_sess_reinstate()
389 ist->ist_state != SS_Q7_ERROR) { in iscsit_sess_reinstate()
393 sess_sm_event_locked(ist, SE_SESSION_REINSTATE, NULL); in iscsit_sess_reinstate()
395 mutex_exit(&ist->ist_mutex); in iscsit_sess_reinstate()
470 iscsit_sess_sm_event(iscsit_sess_t *ist, iscsit_session_event_t event, in iscsit_sess_sm_event() argument
473 mutex_enter(&ist->ist_mutex); in iscsit_sess_sm_event()
474 sess_sm_event_locked(ist, event, ict); in iscsit_sess_sm_event()
475 mutex_exit(&ist->ist_mutex); in iscsit_sess_sm_event()
479 sess_sm_event_locked(iscsit_sess_t *ist, iscsit_session_event_t event, in sess_sm_event_locked() argument
484 iscsit_sess_hold(ist); in sess_sm_event_locked()
491 list_insert_tail(&ist->ist_events, ctx); in sess_sm_event_locked()
498 if (!ist->ist_sm_busy) { in sess_sm_event_locked()
499 ist->ist_sm_busy = B_TRUE; in sess_sm_event_locked()
500 while (!list_is_empty(&ist->ist_events)) { in sess_sm_event_locked()
501 ctx = list_head(&ist->ist_events); in sess_sm_event_locked()
502 list_remove(&ist->ist_events, ctx); in sess_sm_event_locked()
503 idm_sm_audit_event(&ist->ist_state_audit, in sess_sm_event_locked()
504 SAS_ISCSIT_SESS, (int)ist->ist_state, in sess_sm_event_locked()
506 mutex_exit(&ist->ist_mutex); in sess_sm_event_locked()
507 sess_sm_event_dispatch(ist, ctx); in sess_sm_event_locked()
508 mutex_enter(&ist->ist_mutex); in sess_sm_event_locked()
510 ist->ist_sm_busy = B_FALSE; in sess_sm_event_locked()
514 iscsit_sess_rele(ist); in sess_sm_event_locked()
518 sess_sm_event_dispatch(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_event_dispatch() argument
522 DTRACE_PROBE2(session__event, iscsit_sess_t *, ist, in sess_sm_event_dispatch()
526 (void *)ist, iscsit_se_name[ctx->se_ctx_event], ctx->se_ctx_event); in sess_sm_event_dispatch()
532 iscsit_sess_bind_conn(ist, ict); in sess_sm_event_dispatch()
536 iscsit_sess_unbind_conn(ist, ict); in sess_sm_event_dispatch()
541 switch (ist->ist_state) { in sess_sm_event_dispatch()
543 sess_sm_q1_free(ist, ctx); in sess_sm_event_dispatch()
546 sess_sm_q2_active(ist, ctx); in sess_sm_event_dispatch()
549 sess_sm_q3_logged_in(ist, ctx); in sess_sm_event_dispatch()
552 sess_sm_q4_failed(ist, ctx); in sess_sm_event_dispatch()
555 sess_sm_q5_continue(ist, ctx); in sess_sm_event_dispatch()
558 sess_sm_q6_done(ist, ctx); in sess_sm_event_dispatch()
561 sess_sm_q7_error(ist, ctx); in sess_sm_event_dispatch()
572 sess_sm_q1_free(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q1_free() argument
577 sess_sm_new_state(ist, ctx, SS_Q2_ACTIVE); in sess_sm_q1_free()
587 sess_sm_q2_active(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q2_active() argument
594 ist->ist_ffp_conn_count++; in sess_sm_q2_active()
595 sess_sm_new_state(ist, ctx, SS_Q3_LOGGED_IN); in sess_sm_q2_active()
602 sess_sm_new_state(ist, ctx, SS_Q7_ERROR); in sess_sm_q2_active()
612 mutex_enter(&ist->ist_mutex); in sess_sm_q2_active()
613 for (ict = list_head(&ist->ist_conn_list); in sess_sm_q2_active()
615 ict = list_next(&ist->ist_conn_list, ict)) { in sess_sm_q2_active()
618 mutex_exit(&ist->ist_mutex); in sess_sm_q2_active()
619 sess_sm_new_state(ist, ctx, SS_Q6_DONE); in sess_sm_q2_active()
628 sess_sm_q3_logged_in(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q3_logged_in() argument
639 ist->ist_ffp_conn_count++; in sess_sm_q3_logged_in()
650 ASSERT(ist->ist_ffp_conn_count >= 1); in sess_sm_q3_logged_in()
651 ist->ist_failed_conn = (iscsit_conn_t *)ctx->se_event_data; in sess_sm_q3_logged_in()
652 ist->ist_ffp_conn_count--; in sess_sm_q3_logged_in()
653 if (ist->ist_ffp_conn_count == 0) { in sess_sm_q3_logged_in()
662 sess_sm_new_state(ist, ctx, in sess_sm_q3_logged_in()
664 (ist->ist_admin_close)) ? in sess_sm_q3_logged_in()
671 mutex_enter(&ist->ist_mutex); in sess_sm_q3_logged_in()
673 ASSERT(ist->ist_ffp_conn_count >= 1); in sess_sm_q3_logged_in()
674 ist->ist_ffp_conn_count--; in sess_sm_q3_logged_in()
676 for (ict = list_head(&ist->ist_conn_list); in sess_sm_q3_logged_in()
678 ict = list_next(&ist->ist_conn_list, ict)) { in sess_sm_q3_logged_in()
689 mutex_exit(&ist->ist_mutex); in sess_sm_q3_logged_in()
691 sess_sm_new_state(ist, ctx, SS_Q6_DONE); in sess_sm_q3_logged_in()
702 iscsit_sess_t *ist = arg; in sess_sm_timeout() local
704 iscsit_sess_sm_event(ist, SE_SESSION_TIMEOUT, NULL); in sess_sm_timeout()
708 sess_sm_q4_failed(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q4_failed() argument
714 sess_sm_new_state(ist, ctx, SS_Q5_CONTINUE); in sess_sm_q4_failed()
718 (void) untimeout(ist->ist_state_timeout); in sess_sm_q4_failed()
722 sess_sm_new_state(ist, ctx, SS_Q6_DONE); in sess_sm_q4_failed()
734 sess_sm_q5_continue(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q5_continue() argument
739 sess_sm_new_state(ist, ctx, SS_Q4_FAILED); in sess_sm_q5_continue()
743 sess_sm_new_state(ist, ctx, SS_Q3_LOGGED_IN); in sess_sm_q5_continue()
747 sess_sm_new_state(ist, ctx, SS_Q6_DONE); in sess_sm_q5_continue()
756 sess_sm_q6_done(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q6_done() argument
769 ist->ist_ffp_conn_count++; in sess_sm_q6_done()
773 ASSERT(ist->ist_ffp_conn_count >= 1); in sess_sm_q6_done()
774 ist->ist_ffp_conn_count--; in sess_sm_q6_done()
777 if (ist->ist_conn_count == 0) { in sess_sm_q6_done()
778 idm_refcnt_async_wait_ref(&ist->ist_refcnt, in sess_sm_q6_done()
788 sess_sm_q7_error(iscsit_sess_t *ist, sess_event_ctx_t *ctx) in sess_sm_q7_error() argument
793 if (ist->ist_conn_count == 0) { in sess_sm_q7_error()
794 idm_refcnt_async_wait_ref(&ist->ist_refcnt, in sess_sm_q7_error()
804 sess_sm_new_state(iscsit_sess_t *ist, sess_event_ctx_t *ctx, in sess_sm_new_state() argument
819 "%s(%d) --> %s(%d)\n", (void *) ist, in sess_sm_new_state()
821 iscsit_ss_name[ist->ist_state], ist->ist_state, in sess_sm_new_state()
825 iscsit_sess_t *, ist, sess_event_ctx_t *, ctx, in sess_sm_new_state()
828 mutex_enter(&ist->ist_mutex); in sess_sm_new_state()
829 idm_sm_audit_state_change(&ist->ist_state_audit, SAS_ISCSIT_SESS, in sess_sm_new_state()
830 (int)ist->ist_state, (int)new_state); in sess_sm_new_state()
831 ist->ist_last_state = ist->ist_state; in sess_sm_new_state()
832 ist->ist_state = new_state; in sess_sm_new_state()
833 mutex_exit(&ist->ist_mutex); in sess_sm_new_state()
835 switch (ist->ist_state) { in sess_sm_new_state()
839 iscsit_tgt_bind_sess(ist->ist_tgt, ist); in sess_sm_new_state()
845 ist->ist_failed_conn->ict_op.op_default_time_2_retain; in sess_sm_new_state()
846 ist->ist_state_timeout = timeout(sess_sm_timeout, ist, in sess_sm_new_state()
858 if (ist->ist_tsih != ISCSI_UNSPEC_TSIH) { in sess_sm_new_state()
859 iscsit_tsih_free(ist->ist_tsih); in sess_sm_new_state()
867 iscsit_tgt_unbind_sess(ist->ist_tgt, ist); in sess_sm_new_state()
873 if (ist->ist_conn_count == 0) { in sess_sm_new_state()
874 idm_refcnt_async_wait_ref(&ist->ist_refcnt, in sess_sm_new_state()