Lines Matching refs:tgt

54 tgt_sm_event_dispatch(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
57 tgt_sm_created(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
60 tgt_sm_onlining(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
63 tgt_sm_online(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
66 tgt_sm_stmf_online(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
69 tgt_sm_deleting_need_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
72 tgt_sm_offlining(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
75 tgt_sm_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
78 tgt_sm_stmf_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
81 tgt_sm_deleting_stmf_dereg(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
84 tgt_sm_deleting_stmf_dereg_fail(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
87 tgt_sm_deleting(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx);
96 tgt_sm_new_state(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx,
104 iscsit_tgt_unref(void *tgt);
107 iscsit_tgt_async_wait_ref(iscsit_tgt_t *tgt, idm_refcnt_cb_t *cb_func);
110 iscsit_tgt_destroy(iscsit_tgt_t *tgt);
113 iscsit_tgt_lookup_tpgt_locked(iscsit_tgt_t *tgt, uint16_t tag);
123 iscsit_tgt_online(iscsit_tgt_t *tgt);
126 iscsit_tgt_offline(iscsit_tgt_t *tgt);
129 iscsit_tgt_modify(iscsit_tgt_t *tgt, it_tgt_t *cfg_tgt);
132 iscsit_tgt_merge_tpgt(iscsit_tgt_t *tgt, it_tgt_t *cfg_tgt,
172 iscsit_tgt_sm_event(iscsit_tgt_t *tgt, iscsit_tgt_event_t event)
174 mutex_enter(&tgt->target_mutex);
175 tgt_sm_event_locked(tgt, event);
176 mutex_exit(&tgt->target_mutex);
180 tgt_sm_event_locked(iscsit_tgt_t *tgt, iscsit_tgt_event_t event)
184 iscsit_tgt_hold(tgt);
190 list_insert_tail(&tgt->target_events, ctx);
197 if (!tgt->target_sm_busy) {
198 tgt->target_sm_busy = B_TRUE;
199 while (!list_is_empty(&tgt->target_events)) {
200 ctx = list_head(&tgt->target_events);
201 list_remove(&tgt->target_events, ctx);
202 idm_sm_audit_event(&tgt->target_state_audit,
203 SAS_ISCSIT_TGT, (int)tgt->target_state,
205 mutex_exit(&tgt->target_mutex);
206 tgt_sm_event_dispatch(tgt, ctx);
207 mutex_enter(&tgt->target_mutex);
209 tgt->target_sm_busy = B_FALSE;
213 iscsit_tgt_rele(tgt);
217 tgt_sm_event_dispatch(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
219 DTRACE_PROBE2(tgt__event, iscsit_tgt_t *, tgt,
222 IDM_SM_LOG(CE_NOTE, "tgt_sm_event_dispatch: tgt %p event %s(%d)",
223 (void *)tgt, iscsit_te_name[ctx->te_ctx_event], ctx->te_ctx_event);
228 tgt->target_deleting = B_TRUE;
233 switch (tgt->target_state) {
235 tgt_sm_created(tgt, ctx);
238 tgt_sm_onlining(tgt, ctx);
241 tgt_sm_online(tgt, ctx);
244 tgt_sm_stmf_online(tgt, ctx);
247 tgt_sm_deleting_need_offline(tgt, ctx);
250 tgt_sm_offlining(tgt, ctx);
253 tgt_sm_offline(tgt, ctx);
256 tgt_sm_stmf_offline(tgt, ctx);
259 tgt_sm_deleting_stmf_dereg(tgt, ctx);
262 tgt_sm_deleting_stmf_dereg_fail(tgt, ctx);
265 tgt_sm_deleting(tgt, ctx);
275 tgt_sm_created(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
281 tgt_sm_new_state(tgt, ctx, TS_ONLINING);
284 tgt_sm_new_state(tgt, ctx, TS_DELETING_STMF_DEREG);
293 tgt_sm_new_state(tgt, ctx, TS_OFFLINE);
295 tgt->target_stmf_lport, &scs);
307 tgt_sm_onlining(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
313 tgt_sm_new_state(tgt, ctx, TS_ONLINE);
316 tgt_sm_new_state(tgt, ctx, TS_STMF_OFFLINE);
332 tgt->target_stmf_lport, &scs);
344 tgt_sm_online(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
350 if (tgt->target_deleting) {
351 tgt_sm_new_state(tgt, ctx, TS_DELETING_NEED_OFFLINE);
353 tgt_sm_new_state(tgt, ctx, TS_STMF_ONLINE);
370 tgt->target_stmf_lport, &scs);
382 tgt_sm_stmf_online(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
390 (void) iscsit_isns_deregister(tgt);
391 tgt_sm_new_state(tgt, ctx, TS_DELETING_NEED_OFFLINE);
394 (void) iscsit_isns_deregister(tgt);
395 tgt_sm_new_state(tgt, ctx, TS_OFFLINING);
402 tgt->target_stmf_lport, &scs);
415 tgt_sm_deleting_need_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
421 tgt_sm_new_state(tgt, ctx, TS_OFFLINING);
433 tgt->target_stmf_lport, &scs);
446 tgt_sm_offlining(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
452 tgt_sm_new_state(tgt, ctx, TS_OFFLINE);
468 tgt->target_stmf_lport, &scs);
481 tgt_sm_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
487 if (tgt->target_deleting) {
488 tgt_sm_new_state(tgt, ctx, TS_DELETING_STMF_DEREG);
490 tgt_sm_new_state(tgt, ctx, TS_STMF_OFFLINE);
507 tgt->target_stmf_lport, &scs);
519 tgt_sm_stmf_offline(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
525 tgt_sm_new_state(tgt, ctx, TS_ONLINING);
528 tgt_sm_new_state(tgt, ctx, TS_DELETING_STMF_DEREG);
535 tgt->target_stmf_lport, &scs);
548 tgt_sm_deleting_stmf_dereg(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
564 tgt->target_stmf_lport, &scs);
571 tgt_sm_new_state(tgt, ctx, TS_DELETING);
574 tgt_sm_new_state(tgt, ctx, TS_DELETING_STMF_DEREG_FAIL);
582 tgt_sm_deleting_stmf_dereg_fail(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
598 tgt->target_stmf_lport, &scs);
605 tgt_sm_new_state(tgt, ctx, TS_DELETING_STMF_DEREG);
613 tgt_sm_deleting(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx)
629 tgt->target_stmf_lport, &scs);
644 iscsit_tgt_t *tgt = arg;
653 iscsit_tgt_dereg_task, tgt, DDI_NOSLEEP) == NULL) {
655 (void) timeout(iscsit_tgt_dereg_retry, tgt,
663 iscsit_tgt_t *tgt = arg;
665 iscsit_tgt_sm_event(tgt, TE_STMF_DEREG_RETRY);
669 tgt_sm_new_state(iscsit_tgt_t *tgt, tgt_event_ctx_t *ctx,
672 stmf_local_port_t *lport = tgt->target_stmf_lport;
690 IDM_SM_LOG(CE_NOTE, "tgt_sm_new_state: tgt %p, %s(%d) --> %s(%d)\n",
691 (void *) tgt, iscsit_ts_name[tgt->target_state], tgt->target_state,
694 iscsit_tgt_t *, tgt, tgt_event_ctx_t *, ctx,
697 mutex_enter(&tgt->target_mutex);
698 idm_sm_audit_state_change(&tgt->target_state_audit, SAS_ISCSIT_TGT,
699 (int)tgt->target_state, (int)new_state);
700 tgt->target_last_state = tgt->target_state;
701 tgt->target_state = new_state;
702 mutex_exit(&tgt->target_mutex);
704 switch (tgt->target_state) {
706 idmrc = iscsit_tgt_online(tgt);
709 iscsit_tgt_sm_event(tgt, TE_ONLINE_FAIL);
711 iscsit_tgt_sm_event(tgt, TE_ONLINE_SUCCESS);
722 (void) iscsit_isns_register(tgt);
731 iscsit_tgt_offline(tgt);
738 stmfrc = stmf_deregister_local_port(tgt->target_stmf_lport);
740 iscsit_tgt_sm_event(tgt, TE_STMF_DEREG_SUCCESS);
742 iscsit_tgt_sm_event(tgt, TE_STMF_DEREG_FAIL);
747 (void) timeout(iscsit_tgt_dereg_retry, tgt,
751 iscsit_tgt_async_wait_ref(tgt, iscsit_tgt_unref);
767 iscsit_tgt_t *tgt, *next_tgt;
779 for (tgt = avl_first(&iscsit_global.global_target_list);
780 tgt != NULL;
781 tgt = next_tgt) {
782 next_tgt = AVL_NEXT(&iscsit_global.global_target_list, tgt);
784 if (it_tgt_lookup(cfg, tgt->target_name) == NULL) {
785 avl_remove(&iscsit_global.global_target_list, tgt);
787 &iscsit_global.global_deleted_target_list, tgt);
788 iscsit_tgt_sm_event(tgt, TE_DELETE);
797 tgt = iscsit_tgt_lookup_locked(cfg_tgt->tgt_name);
799 if (tgt == NULL) {
800 tgt = iscsit_tgt_create(cfg_tgt);
801 if (tgt == NULL)
803 avl_add(&iscsit_global.global_target_list, tgt);
805 if (iscsit_tgt_modify(tgt, cfg_tgt) !=
808 iscsit_tgt_rele(tgt);
944 iscsit_tgt_modify(iscsit_tgt_t *tgt, it_tgt_t *cfg_tgt)
954 mutex_enter(&tgt->target_mutex);
955 if (tgt->target_props) {
956 nvlist_free(tgt->target_props);
957 tgt->target_props = NULL;
959 (void) nvlist_dup(cfg_tgt->tgt_properties, &tgt->target_props,
963 if (tgt->target_stmf_lport->lport_alias) {
964 strfree(tgt->target_stmf_lport->lport_alias);
965 tgt->target_stmf_lport->lport_alias = NULL;
967 if (nvlist_lookup_string(tgt->target_props, "alias", &alias) == 0)
968 tgt->target_stmf_lport->lport_alias = strdup(alias);
970 if ((idmrc = iscsit_tgt_merge_tpgt(tgt, cfg_tgt, &tpgt_del_list)) !=
975 "completed.", tgt->target_name);
978 mutex_exit(&tgt->target_mutex);
986 if ((tgt->target_generation > 0) &&
987 (cfg_tgt->tgt_generation > tgt->target_generation)) {
988 iscsit_isns_target_update(tgt);
991 tgt->target_generation = cfg_tgt->tgt_generation;
1015 iscsit_tgt_t *tgt = tgt_void;
1018 list_remove(&iscsit_global.global_deleted_target_list, tgt);
1020 iscsit_tgt_destroy(tgt);
1024 iscsit_tgt_async_wait_ref(iscsit_tgt_t *tgt, idm_refcnt_cb_t *cb_func)
1026 idm_refcnt_async_wait_ref(&tgt->target_refcnt, cb_func);
1030 iscsit_tgt_destroy(iscsit_tgt_t *tgt)
1034 ASSERT(tgt->target_state == TS_DELETING ||
1035 (tgt->target_state == TS_CREATED &&
1036 tgt->target_stmf_lport_registered == 0));
1041 mutex_enter(&tgt->target_mutex);
1042 for (tpgt = avl_first(&tgt->target_tpgt_list);
1045 next_tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt);
1046 avl_remove(&tgt->target_tpgt_list, tpgt);
1050 if (tgt->target_props) {
1051 nvlist_free(tgt->target_props);
1053 mutex_exit(&tgt->target_mutex);
1058 idm_refcnt_destroy(&tgt->target_sess_refcnt);
1059 idm_refcnt_destroy(&tgt->target_refcnt);
1060 list_destroy(&tgt->target_events);
1061 avl_destroy(&tgt->target_tpgt_list);
1062 avl_destroy(&tgt->target_sess_list);
1063 mutex_destroy(&tgt->target_mutex);
1064 if (tgt->target_stmf_lport->lport_alias)
1065 strfree(tgt->target_stmf_lport->lport_alias);
1066 stmf_free(tgt->target_stmf_lport); /* Also frees "tgt' */
1071 iscsit_tgt_hold(iscsit_tgt_t *tgt)
1073 idm_refcnt_hold(&tgt->target_refcnt);
1077 iscsit_tgt_rele(iscsit_tgt_t *tgt)
1079 idm_refcnt_rele(&tgt->target_refcnt);
1104 iscsit_tgt_lookup_tpgt(iscsit_tgt_t *tgt, uint16_t tag)
1108 mutex_enter(&tgt->target_mutex);
1109 result = iscsit_tgt_lookup_tpgt_locked(tgt, tag);
1110 mutex_exit(&tgt->target_mutex);
1116 iscsit_tgt_lookup_tpgt_locked(iscsit_tgt_t *tgt, uint16_t tag)
1121 /* Caller holds tgt->target_mutex */
1123 if ((result = avl_find(&tgt->target_tpgt_list, &tmp_tpgt, NULL)) !=
1132 iscsit_tgt_lookup_portal(iscsit_tgt_t *tgt, struct sockaddr_storage *sa,
1138 /* Caller holds tgt->target_mutex */
1139 ASSERT(mutex_owned(&tgt->target_mutex));
1140 for (tpgt = avl_first(&tgt->target_tpgt_list);
1142 tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt)) {
1156 iscsit_tgt_bind_sess(iscsit_tgt_t *tgt, iscsit_sess_t *sess)
1158 if (tgt) {
1159 sess->ist_lport = tgt->target_stmf_lport;
1160 iscsit_tgt_hold(tgt);
1161 idm_refcnt_hold(&tgt->target_sess_refcnt);
1162 mutex_enter(&tgt->target_mutex);
1163 avl_add(&tgt->target_sess_list, sess);
1164 mutex_exit(&tgt->target_mutex);
1175 iscsit_tgt_unbind_sess(iscsit_tgt_t *tgt, iscsit_sess_t *sess)
1177 if (tgt) {
1178 mutex_enter(&tgt->target_mutex);
1179 avl_remove(&tgt->target_sess_list, sess);
1180 mutex_exit(&tgt->target_mutex);
1182 idm_refcnt_rele(&tgt->target_sess_refcnt);
1183 iscsit_tgt_rele(tgt);
1209 iscsit_tgt_lookup_sess(iscsit_tgt_t *tgt, char *initiator_name,
1218 * If tgt is NULL then we are looking for a discovery session
1220 if (tgt == NULL) {
1223 sess_avl = &tgt->target_sess_list;
1226 LOCK_FOR_SESS_LOOKUP(tgt);
1228 UNLOCK_FOR_SESS_LOOKUP(tgt);
1280 UNLOCK_FOR_SESS_LOOKUP(tgt);
1285 iscsit_tgt_merge_tpgt(iscsit_tgt_t *tgt, it_tgt_t *cfg_tgt,
1299 ASSERT(avl_is_empty(&tgt->target_tpgt_list) ||
1303 for (tpgt = avl_first(&tgt->target_tpgt_list);
1305 next_tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt);
1306 avl_remove(&tgt->target_tpgt_list, tpgt);
1307 if (tgt->target_state == TS_STMF_ONLINE) {
1331 if (tgt->target_state == TS_STMF_ONLINE) {
1334 avl_add(&tgt->target_tpgt_list, tpgt);
1339 if (avl_numnodes(&tgt->target_tpgt_list) == 0) {
1341 if (tgt->target_state == TS_STMF_ONLINE) {
1344 avl_add(&tgt->target_tpgt_list, tpgt);
1420 iscsit_tgt_online(iscsit_tgt_t *tgt)
1425 mutex_enter(&tgt->target_mutex);
1427 ASSERT(tgt->target_sess_list.avl_numnodes == 0);
1428 idm_refcnt_reset(&tgt->target_sess_refcnt);
1429 for (tpgt = avl_first(&tgt->target_tpgt_list);
1431 tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt)) {
1439 mutex_exit(&tgt->target_mutex);
1445 for (tpgt = avl_first(&tgt->target_tpgt_list);
1447 tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt)) {
1450 mutex_exit(&tgt->target_mutex);
1457 iscsit_tgt_t *tgt = tgt_void;
1460 iscsit_tgt_sm_event(tgt, TE_OFFLINE_COMPLETE);
1465 tgt->target_stmf_lport, &scs);
1469 iscsit_tgt_offline(iscsit_tgt_t *tgt)
1474 mutex_enter(&tgt->target_mutex);
1477 for (tpgt = avl_first(&tgt->target_tpgt_list);
1479 tpgt = AVL_NEXT(&tgt->target_tpgt_list, tpgt)) {
1484 for (ist = avl_first(&tgt->target_sess_list);
1486 ist = AVL_NEXT(&tgt->target_sess_list, ist)) {
1495 mutex_exit(&tgt->target_mutex);
1500 idm_refcnt_async_wait_ref(&tgt->target_sess_refcnt,