Lines Matching refs:v

178 #define	IS_ENABLED(v) ((v)->gv_flags & (GV_ENABLED | GV_ENBLD_NOOVR))  argument
208 #define is_depgrp_bypassed(v) ((v->gv_type == GVT_GROUP) && \ argument
209 ((v->gv_depgroup == DEPGRP_EXCLUDE_ALL) || \
210 (v->gv_depgroup == DEPGRP_OPTIONAL_ALL) || \
211 (v->gv_restart < RERR_RESTART)))
306 static boolean_t should_be_in_subgraph(graph_vertex_t *v);
387 graph_vertex_t *v; in graph_add_vertex() local
395 v = startd_zalloc(sizeof (*v)); in graph_add_vertex()
397 v->gv_id = id; in graph_add_vertex()
399 v->gv_name = startd_alloc(strlen(name) + 1); in graph_add_vertex()
400 (void) strcpy(v->gv_name, name); in graph_add_vertex()
402 v->gv_dependencies = startd_list_create(graph_edge_pool, v, 0); in graph_add_vertex()
403 v->gv_dependents = startd_list_create(graph_edge_pool, v, 0); in graph_add_vertex()
408 uu_list_node_init(v, &v->gv_link, graph_vertex_pool); in graph_add_vertex()
409 uu_list_insert(dgraph, v, idx); in graph_add_vertex()
411 return (v); in graph_add_vertex()
419 graph_remove_vertex(graph_vertex_t *v) in graph_remove_vertex() argument
423 assert(uu_list_numnodes(v->gv_dependencies) == 0); in graph_remove_vertex()
424 assert(uu_list_numnodes(v->gv_dependents) == 0); in graph_remove_vertex()
425 assert(v->gv_refs == 0); in graph_remove_vertex()
427 startd_free(v->gv_name, strlen(v->gv_name) + 1); in graph_remove_vertex()
428 uu_list_destroy(v->gv_dependencies); in graph_remove_vertex()
429 uu_list_destroy(v->gv_dependents); in graph_remove_vertex()
430 uu_list_remove(dgraph, v); in graph_remove_vertex()
432 startd_free(v, sizeof (graph_vertex_t)); in graph_remove_vertex()
462 graph_remove_edge(graph_vertex_t *v, graph_vertex_t *dv) in graph_remove_edge() argument
466 for (e = uu_list_first(v->gv_dependencies); in graph_remove_edge()
468 e = uu_list_next(v->gv_dependencies, e)) { in graph_remove_edge()
470 uu_list_remove(v->gv_dependencies, e); in graph_remove_edge()
479 if (e->ge_vertex == v) { in graph_remove_edge()
488 remove_inst_vertex(graph_vertex_t *v) in remove_inst_vertex() argument
495 assert(uu_list_numnodes(v->gv_dependents) == 1); in remove_inst_vertex()
496 assert(uu_list_numnodes(v->gv_dependencies) == 0); in remove_inst_vertex()
497 assert(v->gv_refs == 0); in remove_inst_vertex()
498 assert((v->gv_flags & GV_CONFIGURED) == 0); in remove_inst_vertex()
500 e = uu_list_first(v->gv_dependents); in remove_inst_vertex()
502 graph_remove_edge(sv, v); in remove_inst_vertex()
505 if (up_svcs_p[i] == v) in remove_inst_vertex()
509 if (manifest_import_p == v) in remove_inst_vertex()
512 graph_remove_vertex(v); in remove_inst_vertex()
521 graph_walk_dependents(graph_vertex_t *v, void (*func)(graph_vertex_t *, void *), in graph_walk_dependents() argument
526 for (e = uu_list_first(v->gv_dependents); in graph_walk_dependents()
528 e = uu_list_next(v->gv_dependents, e)) in graph_walk_dependents()
533 graph_walk_dependencies(graph_vertex_t *v, void (*func)(graph_vertex_t *, in graph_walk_dependencies() argument
540 for (e = uu_list_first(v->gv_dependencies); in graph_walk_dependencies()
542 e = uu_list_next(v->gv_dependencies, e)) { in graph_walk_dependencies()
587 graph_vertex_t *v = e->ge_vertex; in graph_walk_recurse() local
591 i = v->gv_id / 8; in graph_walk_recurse()
592 b = 1 << (v->gv_id % 8); in graph_walk_recurse()
605 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in graph_walk_recurse()
612 if ((gip->gi_ret = gip->gi_pre(v, gip->gi_arg)) == UU_WALK_NEXT) { in graph_walk_recurse()
617 list = v->gv_dependents; in graph_walk_recurse()
619 list = v->gv_dependencies; in graph_walk_recurse()
635 (void) gip->gi_post(v, gip->gi_arg); in graph_walk_recurse()
646 graph_walk(graph_vertex_t *v, graph_walk_dir_t dir, in graph_walk() argument
664 fake.ge_vertex = v; in graph_walk()
682 child_pre(graph_vertex_t *v, void *arg) in child_pre() argument
688 if (v->gv_id == cs->id) { in child_pre()
698 child_post(graph_vertex_t *v, void *arg) in child_post() argument
705 cs->path[cs->depth] = v->gv_id; in child_post()
736 graph_vertex_t *v; in path_to_str() local
750 v = vertex_get_by_id(path[i]); in path_to_str()
752 if (v == NULL) in path_to_str()
754 else if (v->gv_type == GVT_INST || v->gv_type == GVT_SVC) in path_to_str()
755 name = v->gv_name; in path_to_str()
785 graph_clogin_start(graph_vertex_t *v) in graph_clogin_start() argument
792 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_clogin_start()
796 graph_su_start(graph_vertex_t *v) in graph_su_start() argument
805 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_su_start()
862 vertex_send_event(graph_vertex_t *v, restarter_event_type_t e) in vertex_send_event() argument
866 assert(v->gv_state == RESTARTER_STATE_UNINIT); in vertex_send_event()
874 log_framework(LOG_DEBUG, "Enabling %s.\n", v->gv_name); in vertex_send_event()
875 assert(v->gv_state == RESTARTER_STATE_UNINIT || in vertex_send_event()
876 v->gv_state == RESTARTER_STATE_DISABLED || in vertex_send_event()
877 v->gv_state == RESTARTER_STATE_MAINT); in vertex_send_event()
882 log_framework(LOG_DEBUG, "Disabling %s.\n", v->gv_name); in vertex_send_event()
883 assert(v->gv_state != RESTARTER_STATE_DISABLED); in vertex_send_event()
888 log_framework(LOG_DEBUG, "Stopping %s.\n", v->gv_name); in vertex_send_event()
889 assert(v->gv_state == RESTARTER_STATE_DEGRADED || in vertex_send_event()
890 v->gv_state == RESTARTER_STATE_ONLINE); in vertex_send_event()
894 log_framework(LOG_DEBUG, "Starting %s.\n", v->gv_name); in vertex_send_event()
895 assert(v->gv_state == RESTARTER_STATE_OFFLINE); in vertex_send_event()
916 restarter_protocol_send_event(v->gv_name, v->gv_restarter_channel, e, in vertex_send_event()
917 v->gv_reason); in vertex_send_event()
921 graph_unset_restarter(graph_vertex_t *v) in graph_unset_restarter() argument
924 assert(v->gv_flags & GV_CONFIGURED); in graph_unset_restarter()
926 vertex_send_event(v, RESTARTER_EVENT_TYPE_REMOVE_INSTANCE); in graph_unset_restarter()
928 if (v->gv_restarter_id != -1) { in graph_unset_restarter()
931 rv = vertex_get_by_id(v->gv_restarter_id); in graph_unset_restarter()
932 graph_remove_edge(v, rv); in graph_unset_restarter()
935 v->gv_restarter_id = -1; in graph_unset_restarter()
936 v->gv_restarter_channel = NULL; in graph_unset_restarter()
944 free_if_unrefed(graph_vertex_t *v) in free_if_unrefed() argument
948 if (v->gv_refs > 0) in free_if_unrefed()
951 if (v->gv_type == GVT_SVC && in free_if_unrefed()
952 uu_list_numnodes(v->gv_dependents) == 0 && in free_if_unrefed()
953 uu_list_numnodes(v->gv_dependencies) == 0) { in free_if_unrefed()
954 graph_remove_vertex(v); in free_if_unrefed()
956 } else if (v->gv_type == GVT_INST && in free_if_unrefed()
957 (v->gv_flags & GV_CONFIGURED) == 0 && in free_if_unrefed()
958 uu_list_numnodes(v->gv_dependents) == 1 && in free_if_unrefed()
959 uu_list_numnodes(v->gv_dependencies) == 0) { in free_if_unrefed()
960 remove_inst_vertex(v); in free_if_unrefed()
968 delete_depgroup(graph_vertex_t *v) in delete_depgroup() argument
974 assert(v->gv_type == GVT_GROUP); in delete_depgroup()
975 assert(uu_list_numnodes(v->gv_dependents) == 0); in delete_depgroup()
977 while ((e = uu_list_first(v->gv_dependencies)) != NULL) { in delete_depgroup()
980 graph_remove_edge(v, dv); in delete_depgroup()
1003 graph_remove_vertex(v); in delete_depgroup()
1009 graph_vertex_t *v = ptrs[0]; in delete_instance_deps_cb() local
1024 assert(dv->gv_id == v->gv_restarter_id); in delete_instance_deps_cb()
1026 graph_remove_edge(v, dv); in delete_instance_deps_cb()
1030 graph_remove_edge(v, dv); in delete_instance_deps_cb()
1049 delete_instance_dependencies(graph_vertex_t *v, boolean_t delete_restarter_dep) in delete_instance_dependencies() argument
1055 assert(v->gv_type == GVT_INST); in delete_instance_dependencies()
1057 ptrs[0] = v; in delete_instance_dependencies()
1060 r = uu_list_walk(v->gv_dependencies, in delete_instance_dependencies()
1205 inst_running(graph_vertex_t *v) in inst_running() argument
1207 assert(v->gv_type == GVT_INST); in inst_running()
1209 if (v->gv_state == RESTARTER_STATE_ONLINE || in inst_running()
1210 v->gv_state == RESTARTER_STATE_DEGRADED) in inst_running()
1316 graph_vertex_t *v; in optional_all_satisfied() local
1327 v = edge->ge_vertex; in optional_all_satisfied()
1329 switch (v->gv_type) { in optional_all_satisfied()
1332 if ((v->gv_flags & (GV_CONFIGURED | GV_ENABLED)) != in optional_all_satisfied()
1336 if (v->gv_state == RESTARTER_STATE_MAINT) in optional_all_satisfied()
1339 if (v->gv_flags & GV_TOOFFLINE) in optional_all_satisfied()
1343 if (v->gv_state == RESTARTER_STATE_OFFLINE) { in optional_all_satisfied()
1348 i = dependency_satisfied(v, B_TRUE); in optional_all_satisfied()
1351 } else if (v->gv_state == RESTARTER_STATE_DISABLED) { in optional_all_satisfied()
1359 i = dependency_satisfied(v, satbility); in optional_all_satisfied()
1365 i = dependency_satisfied(v, satbility); in optional_all_satisfied()
1380 for (e2 = uu_list_first(v->gv_dependencies); in optional_all_satisfied()
1382 e2 = uu_list_next(v->gv_dependencies, e2)) { in optional_all_satisfied()
1439 __LINE__, v->gv_type); in optional_all_satisfied()
1449 v->gv_name, i == 0 ? "ed" : "able"); in optional_all_satisfied()
1470 #define LOG_EXCLUDE(u, v) \ argument
1473 (u)->gv_name, (v)->gv_name)
1480 graph_vertex_t *v, *v2; in exclude_all_satisfied() local
1485 v = edge->ge_vertex; in exclude_all_satisfied()
1487 switch (v->gv_type) { in exclude_all_satisfied()
1489 if ((v->gv_flags & GV_CONFIGURED) == 0) in exclude_all_satisfied()
1492 switch (v->gv_state) { in exclude_all_satisfied()
1495 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1496 return (v->gv_flags & GV_ENABLED ? -1 : 0); in exclude_all_satisfied()
1500 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1510 __FILE__, __LINE__, v->gv_state); in exclude_all_satisfied()
1520 if (!file_ready(v)) in exclude_all_satisfied()
1522 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1529 __LINE__, v->gv_type); in exclude_all_satisfied()
1535 if (uu_list_numnodes(v->gv_dependencies) == 0) in exclude_all_satisfied()
1538 for (e2 = uu_list_first(v->gv_dependencies); in exclude_all_satisfied()
1540 e2 = uu_list_next(v->gv_dependencies, e2)) { in exclude_all_satisfied()
1582 instance_satisfied(graph_vertex_t *v, boolean_t satbility) in instance_satisfied() argument
1584 assert(v->gv_type == GVT_INST); in instance_satisfied()
1585 assert(!inst_running(v)); in instance_satisfied()
1587 return (require_all_satisfied(v, satbility)); in instance_satisfied()
1595 dependency_satisfied(graph_vertex_t *v, boolean_t satbility) in dependency_satisfied() argument
1597 switch (v->gv_type) { in dependency_satisfied()
1599 if ((v->gv_flags & GV_CONFIGURED) == 0) { in dependency_satisfied()
1600 if (v->gv_flags & GV_DEATHROW) { in dependency_satisfied()
1614 if (v->gv_flags & GV_TOOFFLINE) in dependency_satisfied()
1617 switch (v->gv_state) { in dependency_satisfied()
1625 return (instance_satisfied(v, satbility) != -1 ? in dependency_satisfied()
1638 __FILE__, __LINE__, v->gv_state); in dependency_satisfied()
1645 if (uu_list_numnodes(v->gv_dependencies) == 0) in dependency_satisfied()
1647 return (require_any_satisfied(v, satbility)); in dependency_satisfied()
1651 return (file_ready(v) ? 1 : -1); in dependency_satisfied()
1659 v->gv_type); in dependency_satisfied()
1665 switch (v->gv_depgroup) { in dependency_satisfied()
1667 return (require_any_satisfied(v, satbility)); in dependency_satisfied()
1670 return (require_all_satisfied(v, satbility)); in dependency_satisfied()
1673 return (optional_all_satisfied(v, satbility)); in dependency_satisfied()
1676 return (exclude_all_satisfied(v, satbility)); in dependency_satisfied()
1681 __LINE__, v->gv_depgroup); in dependency_satisfied()
1688 graph_start_if_satisfied(graph_vertex_t *v) in graph_start_if_satisfied() argument
1690 if (v->gv_state == RESTARTER_STATE_OFFLINE && in graph_start_if_satisfied()
1691 instance_satisfied(v, B_FALSE) == 1) { in graph_start_if_satisfied()
1692 if (v->gv_start_f == NULL) in graph_start_if_satisfied()
1693 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_start_if_satisfied()
1695 v->gv_start_f(v); in graph_start_if_satisfied()
1729 satbility_cb(graph_vertex_t *v, void *arg) in satbility_cb() argument
1731 if (v->gv_type == GVT_INST) in satbility_cb()
1732 graph_start_if_satisfied(v); in satbility_cb()
1738 propagate_satbility(graph_vertex_t *v) in propagate_satbility() argument
1740 graph_walk(v, WALK_DEPENDENTS, satbility_cb, NULL, NULL); in propagate_satbility()
1747 propagate_start(graph_vertex_t *v, void *arg) in propagate_start() argument
1749 switch (v->gv_type) { in propagate_start()
1751 graph_start_if_satisfied(v); in propagate_start()
1755 if (v->gv_depgroup == DEPGRP_EXCLUDE_ALL) { in propagate_start()
1756 graph_walk_dependents(v, propagate_stop, in propagate_start()
1763 graph_walk_dependents(v, propagate_start, NULL); in propagate_start()
1777 v->gv_type); in propagate_start()
1784 propagate_stop(graph_vertex_t *v, void *arg) in propagate_stop() argument
1790 switch (v->gv_type) { in propagate_stop()
1793 if (err > RERR_NONE && inst_running(v)) { in propagate_stop()
1795 vertex_send_event(v, in propagate_stop()
1798 vertex_send_event(v, RESTARTER_EVENT_TYPE_STOP); in propagate_stop()
1804 graph_walk_dependents(v, propagate_stop, arg); in propagate_stop()
1816 if (v->gv_depgroup == DEPGRP_EXCLUDE_ALL) { in propagate_stop()
1817 graph_walk_dependents(v, propagate_start, NULL); in propagate_stop()
1821 if (err == RERR_NONE || err > v->gv_restart) in propagate_stop()
1824 assert(uu_list_numnodes(v->gv_dependents) == 1); in propagate_stop()
1825 e = uu_list_first(v->gv_dependents); in propagate_stop()
1842 v->gv_type); in propagate_stop()
1849 offline_vertex(graph_vertex_t *v) in offline_vertex() argument
1857 assert(v->gv_type == GVT_INST); in offline_vertex()
1866 if (scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, scf_inst, NULL, in offline_vertex()
1880 uu_die("Can't decode FMRI %s: %s\n", v->gv_name, in offline_vertex()
1908 v->gv_name); in offline_vertex()
1922 vertex_send_event(v, RESTARTER_EVENT_TYPE_STOP_RESET); in offline_vertex()
1934 graph_vertex_t *v; in graph_enable_by_vertex() local
2014 for (v = uu_list_first(dgraph); v != NULL; in graph_enable_by_vertex()
2015 v = uu_list_next(dgraph, v)) { in graph_enable_by_vertex()
2017 if (v == vertex) in graph_enable_by_vertex()
2020 if (v->gv_type != GVT_INST || in graph_enable_by_vertex()
2021 (v->gv_flags & GV_CONFIGURED) == 0 || in graph_enable_by_vertex()
2022 (v->gv_flags & GV_ENABLED) == 0 || in graph_enable_by_vertex()
2023 (v->gv_flags & GV_TOOFFLINE) == 0) in graph_enable_by_vertex()
2026 if ((v->gv_state != RESTARTER_STATE_ONLINE) && in graph_enable_by_vertex()
2027 (v->gv_state != RESTARTER_STATE_DEGRADED)) { in graph_enable_by_vertex()
2037 if (insubtree_dependents_down(v) == B_TRUE) { in graph_enable_by_vertex()
2040 v->gv_name, vertex->gv_name); in graph_enable_by_vertex()
2041 offline_vertex(v); in graph_enable_by_vertex()
2061 graph_change_restarter(graph_vertex_t *v, const char *fmri_arg, scf_handle_t *h, in graph_change_restarter() argument
2081 if (v->gv_flags & GV_CONFIGURED) { in graph_change_restarter()
2082 if (v->gv_restarter_id == -1) { in graph_change_restarter()
2089 graph_unset_restarter(v); in graph_change_restarter()
2093 v->gv_restarter_id = -1; in graph_change_restarter()
2094 v->gv_restarter_channel = NULL; in graph_change_restarter()
2095 vertex_send_event(v, RESTARTER_EVENT_TYPE_ADD_INSTANCE); in graph_change_restarter()
2099 if (v->gv_flags & GV_CONFIGURED) { in graph_change_restarter()
2101 if (id != -1 && v->gv_restarter_id == id) { in graph_change_restarter()
2106 graph_unset_restarter(v); in graph_change_restarter()
2120 v->gv_restarter_id = rv->gv_id; in graph_change_restarter()
2121 v->gv_restarter_channel = rv->gv_delegate_channel; in graph_change_restarter()
2123 err = graph_insert_dependency(v, rv, pathp); in graph_change_restarter()
2129 vertex_send_event(v, RESTARTER_EVENT_TYPE_ADD_INSTANCE); in graph_change_restarter()
2314 graph_vertex_t *v; /* GVT_GROUP vertex */ member
2341 graph_vertex_t *depgroup_v, *v; in process_dependency_fmri() local
2351 depgroup_v = info->v; in process_dependency_fmri()
2363 RERR_NONE, &v); in process_dependency_fmri()
2369 assert(v->gv_type == GVT_FILE); in process_dependency_fmri()
2426 RERR_NONE, &v); in process_dependency_fmri()
2435 assert(v->gv_type == GVT_INST); in process_dependency_fmri()
2437 assert(v->gv_type == GVT_SVC); in process_dependency_fmri()
2446 info->err = graph_insert_dependency(depgroup_v, v, info->pathp); in process_dependency_fmri()
2459 switch (v->gv_type) { in process_dependency_fmri()
2461 if ((v->gv_flags & GV_CONFIGURED) != 0) in process_dependency_fmri()
2469 err = libscf_lookup_instance(v->gv_name, inst); in process_dependency_fmri()
2472 err = configure_vertex(v, inst); in process_dependency_fmri()
2509 (void) add_service(v->gv_name, info->h, &rebound); in process_dependency_fmri()
2518 graph_vertex_t *v; /* GVT_INST vertex */ member
2577 pg_name, info->v->gv_name, scf_strerror(scf_error())); in process_dependency_pg()
2584 pg_name, info->v->gv_name); in process_dependency_pg()
2589 fmri_sz = strlen(info->v->gv_name) + 1 + len + 1; in process_dependency_pg()
2592 (void) snprintf(fmri, fmri_sz, "%s>%s", info->v->gv_name, in process_dependency_pg()
2600 pg_name, info->v->gv_name); in process_dependency_pg()
2610 "\n", pg_name, info->v->gv_name); in process_dependency_pg()
2633 pg_name, info->v->gv_name, SCF_PROPERTY_ENTITIES); in process_dependency_pg()
2648 err = graph_insert_dependency(info->v, depgrp, info->pathp); in process_dependency_pg()
2652 linfo.v = depgrp; in process_dependency_pg()
2654 linfo.inst_fmri = info->v->gv_name; in process_dependency_pg()
2694 set_dependencies(graph_vertex_t *v, scf_instance_t *inst, int **pathp) in set_dependencies() argument
2707 old_configured = v->gv_flags & GV_CONFIGURED; in set_dependencies()
2708 v->gv_flags |= GV_CONFIGURED; in set_dependencies()
2711 info.v = v; in set_dependencies()
2718 v->gv_flags &= ~GV_CONFIGURED; in set_dependencies()
2761 vertex_ref(graph_vertex_t *v) in vertex_ref() argument
2765 v->gv_refs++; in vertex_ref()
2776 vertex_unref(graph_vertex_t *v) in vertex_unref() argument
2779 assert(v->gv_refs > 0); in vertex_unref()
2781 v->gv_refs--; in vertex_unref()
2783 return (free_if_unrefed(v)); in vertex_unref()
2798 graph_vertex_t *v = e->ge_vertex; in append_svcs_or_insts() local
2802 switch (v->gv_type) { in append_svcs_or_insts()
2808 r = uu_list_walk(v->gv_dependencies, in append_svcs_or_insts()
2819 __LINE__, v->gv_type); in append_svcs_or_insts()
2825 new->ge_vertex = v; in append_svcs_or_insts()
2835 vertex_ref(v); in append_svcs_or_insts()
2841 should_be_in_subgraph(graph_vertex_t *v) in should_be_in_subgraph() argument
2845 if (v == milestone) in should_be_in_subgraph()
2853 for (e = uu_list_first(v->gv_dependents); in should_be_in_subgraph()
2855 e = uu_list_next(v->gv_dependents, e)) { in should_be_in_subgraph()
2864 if (v->gv_type == GVT_INST && dv->gv_type == GVT_SVC) { in should_be_in_subgraph()
2881 !(v->gv_flags & GV_ENBLD_NOOVR)) in should_be_in_subgraph()
2889 if (v->gv_type == GVT_INST && in should_be_in_subgraph()
2892 !(v->gv_flags & GV_ENBLD_NOOVR)) in should_be_in_subgraph()
2912 eval_subgraph(graph_vertex_t *v, scf_handle_t *h) in eval_subgraph() argument
2914 boolean_t old = (v->gv_flags & GV_INSUBGRAPH) != 0; in eval_subgraph()
2922 new = should_be_in_subgraph(v); in eval_subgraph()
2928 "Removing %s from the subgraph.\n", v->gv_name); in eval_subgraph()
2930 v->gv_flags = (v->gv_flags & ~GV_INSUBGRAPH) | in eval_subgraph()
2933 if (v->gv_type == GVT_INST && (v->gv_flags & GV_CONFIGURED)) { in eval_subgraph()
2937 err = libscf_fmri_get_instance(h, v->gv_name, &inst); in eval_subgraph()
2984 v->gv_name, strerror(err)); in eval_subgraph()
2993 for (e = uu_list_first(v->gv_dependencies); in eval_subgraph()
2995 e = uu_list_next(v->gv_dependencies, e)) { in eval_subgraph()
3013 refresh_vertex(graph_vertex_t *v, scf_instance_t *inst) in refresh_vertex() argument
3026 assert(v->gv_type == GVT_INST); in refresh_vertex()
3028 log_framework(LOG_DEBUG, "Graph engine: Refreshing %s.\n", v->gv_name); in refresh_vertex()
3038 err = uu_list_walk(v->gv_dependencies, in refresh_vertex()
3043 delete_instance_dependencies(v, B_FALSE); in refresh_vertex()
3045 err = set_dependencies(v, inst, &path); in refresh_vertex()
3077 vertex_send_event(v, in refresh_vertex()
3081 vertex_send_event(v, in refresh_vertex()
3105 for (e = uu_list_first(v->gv_dependencies); in refresh_vertex()
3107 e = uu_list_next(v->gv_dependencies, e)) { in refresh_vertex()
3119 graph_start_if_satisfied(v); in refresh_vertex()
3145 configure_vertex(graph_vertex_t *v, scf_instance_t *inst) in configure_vertex() argument
3160 assert(v->gv_type == GVT_INST); in configure_vertex()
3161 assert((v->gv_flags & GV_CONFIGURED) == 0); in configure_vertex()
3164 assert(should_be_in_subgraph(v) == in configure_vertex()
3165 ((v->gv_flags & GV_INSUBGRAPH) != 0)); in configure_vertex()
3173 if ((v->gv_flags & GV_DEATHROW) || in configure_vertex()
3174 (is_fmri_in_deathrow(v->gv_name) == B_TRUE)) { in configure_vertex()
3175 if ((v->gv_flags & GV_DEATHROW) == 0) { in configure_vertex()
3181 v->gv_flags |= GV_DEATHROW; in configure_vertex()
3196 v->gv_name, strerror(err)); in configure_vertex()
3207 v->gv_name); in configure_vertex()
3239 v->gv_flags |= GV_DEATHROW; in configure_vertex()
3244 log_framework(LOG_DEBUG, "Graph adding %s.\n", v->gv_name); in configure_vertex()
3347 !(v->gv_flags & GV_INSUBGRAPH)) { in configure_vertex()
3369 v->gv_name, strerror(err)); in configure_vertex()
3380 assert(v->gv_flags & GV_INSUBGRAPH); in configure_vertex()
3400 err = libscf_get_basic_instance_data(h, inst, v->gv_name, &enabled, in configure_vertex()
3414 v->gv_name); in configure_vertex()
3425 v->gv_name, scf_strerror(scf_error())); in configure_vertex()
3426 v->gv_stn_tset = 0; in configure_vertex()
3428 v->gv_stn_tset = tset; in configure_vertex()
3430 if (strcmp(v->gv_name, SCF_INSTANCE_GLOBAL) == 0) in configure_vertex()
3431 stn_global = v->gv_stn_tset; in configure_vertex()
3438 v->gv_flags = (v->gv_flags & ~GV_ENBLD_NOOVR) | in configure_vertex()
3444 v->gv_state = RESTARTER_STATE_UNINIT; in configure_vertex()
3446 snap = libscf_get_or_make_running_snapshot(inst, v->gv_name, B_TRUE); in configure_vertex()
3450 err = graph_change_restarter(v, restarter_fmri, h, &path); in configure_vertex()
3465 v->gv_name, restarter_fmri); in configure_vertex()
3468 handle_cycle(v->gv_name, path); in configure_vertex()
3527 v->gv_state = RESTARTER_STATE_MAINT; in configure_vertex()
3534 err = refresh_vertex(v, inst); in configure_vertex()
3541 v->gv_flags |= GV_CONFIGURED; in configure_vertex()
3543 graph_enable_by_vertex(v, enabled, 0); in configure_vertex()
3841 graph_vertex_t *v; in run_sulogin() local
3848 v = vertex_get_by_name(console_login_fmri); in run_sulogin()
3849 if (v != NULL && inst_running(v)) in run_sulogin()
3863 v = vertex_get_by_name(console_login_fmri); in run_sulogin()
3865 if (v != NULL && v->gv_state == RESTARTER_STATE_OFFLINE) { in run_sulogin()
3866 if (v->gv_start_f == NULL) in run_sulogin()
3867 vertex_send_event(v, in run_sulogin()
3870 v->gv_start_f(v); in run_sulogin()
4117 graph_vertex_t *v; in dgraph_add_instance() local
4130 v = vertex_get_by_name(inst_fmri); in dgraph_add_instance()
4132 if (v != NULL) { in dgraph_add_instance()
4133 assert(v->gv_type == GVT_INST); in dgraph_add_instance()
4135 if (v->gv_flags & GV_CONFIGURED) { in dgraph_add_instance()
4143 RERR_NONE, &v); in dgraph_add_instance()
4152 err = configure_vertex(v, inst); in dgraph_add_instance()
4182 graph_vertex_t *v; in dgraph_update_general() local
4231 v = vertex_get_by_name(fmri); in dgraph_update_general()
4232 if (v == NULL || !(v->gv_flags & GV_CONFIGURED)) { in dgraph_update_general()
4243 err = libscf_get_basic_instance_data(h, inst, v->gv_name, &enabled, in dgraph_update_general()
4266 oldflags = v->gv_flags; in dgraph_update_general()
4267 v->gv_flags = (v->gv_flags & ~GV_ENBLD_NOOVR) | in dgraph_update_general()
4277 if (milestone > MILESTONE_NONE && v->gv_flags != oldflags) in dgraph_update_general()
4278 (void) eval_subgraph(v, h); in dgraph_update_general()
4293 graph_enable_by_vertex(v, enabled, 1); in dgraph_update_general()
4315 dgraph_refresh_instance(graph_vertex_t *v, scf_instance_t *inst) in dgraph_refresh_instance() argument
4322 assert(v->gv_type == GVT_INST); in dgraph_refresh_instance()
4326 v->gv_name, &enabled, NULL, NULL); in dgraph_refresh_instance()
4338 v->gv_name); in dgraph_refresh_instance()
4348 v->gv_name, scf_strerror(scf_error())); in dgraph_refresh_instance()
4351 v->gv_stn_tset = tset; in dgraph_refresh_instance()
4352 if (strcmp(v->gv_name, SCF_INSTANCE_GLOBAL) == 0) in dgraph_refresh_instance()
4358 r = libscf_snapshots_refresh(inst, v->gv_name); in dgraph_refresh_instance()
4367 r = refresh_vertex(v, inst); in dgraph_refresh_instance()
4379 insubtree_dependents_down(graph_vertex_t *v) in insubtree_dependents_down() argument
4386 for (e = uu_list_first(v->gv_dependents); e != NULL; in insubtree_dependents_down()
4387 e = uu_list_next(v->gv_dependents, e)) { in insubtree_dependents_down()
4425 is_nonsubgraph_leaf(graph_vertex_t *v) in is_nonsubgraph_leaf() argument
4432 for (e = uu_list_first(v->gv_dependents); in is_nonsubgraph_leaf()
4434 e = uu_list_next(v->gv_dependents, e)) { in is_nonsubgraph_leaf()
4476 disable_service_temporarily(graph_vertex_t *v, scf_handle_t *h) in disable_service_temporarily() argument
4494 log_error(LOG_WARNING, emsg, v->gv_name, buf); in disable_service_temporarily()
4496 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4500 r = scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, inst, in disable_service_temporarily()
4505 log_error(LOG_WARNING, emsg, v->gv_name, emsg_cbroken); in disable_service_temporarily()
4506 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4533 log_error(LOG_WARNING, emsg, v->gv_name, emsg_cbroken); in disable_service_temporarily()
4534 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4538 log_error(LOG_WARNING, emsg, v->gv_name, in disable_service_temporarily()
4540 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4544 log_error(LOG_WARNING, emsg, v->gv_name, in disable_service_temporarily()
4546 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4561 offline_subtree_leaves(graph_vertex_t *v, void *arg) in offline_subtree_leaves() argument
4566 if (v->gv_type != GVT_INST) { in offline_subtree_leaves()
4567 graph_walk_dependencies(v, offline_subtree_leaves, arg); in offline_subtree_leaves()
4575 if ((v->gv_flags & GV_TOOFFLINE) == 0) in offline_subtree_leaves()
4579 if (!up_state(v->gv_state)) { in offline_subtree_leaves()
4580 graph_walk_dependencies(v, offline_subtree_leaves, arg); in offline_subtree_leaves()
4585 if (insubtree_dependents_down(v) == B_TRUE) { in offline_subtree_leaves()
4586 if (v->gv_flags & GV_TODISABLE) in offline_subtree_leaves()
4587 vertex_send_event(v, in offline_subtree_leaves()
4590 offline_vertex(v); in offline_subtree_leaves()
4595 graph_offline_subtree_leaves(graph_vertex_t *v, void *h) in graph_offline_subtree_leaves() argument
4597 graph_walk_dependencies(v, offline_subtree_leaves, (void *)h); in graph_offline_subtree_leaves()
4607 disable_nonsubgraph_leaves(graph_vertex_t *v, void *arg) in disable_nonsubgraph_leaves() argument
4618 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in disable_nonsubgraph_leaves()
4622 if (v->gv_type != GVT_INST) in disable_nonsubgraph_leaves()
4625 if ((v->gv_flags & GV_CONFIGURED) == 0) in disable_nonsubgraph_leaves()
4636 if (v->gv_flags & GV_INSUBGRAPH) in disable_nonsubgraph_leaves()
4640 if (!up_state(v->gv_state)) in disable_nonsubgraph_leaves()
4644 if ((v->gv_flags & GV_ENABLED) == 0) in disable_nonsubgraph_leaves()
4648 if (is_nonsubgraph_leaf(v)) in disable_nonsubgraph_leaves()
4649 (void) disable_service_temporarily(v, (scf_handle_t *)arg); in disable_nonsubgraph_leaves()
4654 graph_walk_dependencies(v, disable_nonsubgraph_leaves, arg); in disable_nonsubgraph_leaves()
4696 dgraph_state_transition_notify(graph_vertex_t *v, in dgraph_state_transition_notify() argument
4699 restarter_instance_state_t new_state = v->gv_state; in dgraph_state_transition_notify()
4732 } else if (stn_transition & v->gv_stn_tset) { in dgraph_state_transition_notify()
4744 (IS_ENABLED(v) == 1 || to == SCF_STATE_DISABLED)) { in dgraph_state_transition_notify()
4759 nvlist_add_string(attr, "fmri", v->gv_name) != 0 || in dgraph_state_transition_notify()
4768 "event: %s\n", v->gv_name, strerror(errno)); in dgraph_state_transition_notify()
4777 v->gv_name, fmev_strerror(fmev_errno)); in dgraph_state_transition_notify()
4798 graph_vertex_t *v; in dgraph_set_instance_state() local
4806 v = vertex_get_by_name(inst_name); in dgraph_set_instance_state()
4807 if (v == NULL) { in dgraph_set_instance_state()
4812 assert(v->gv_type == GVT_INST); in dgraph_set_instance_state()
4828 log_framework(LOG_DEBUG, "Graph noting %s %s -> %s.\n", v->gv_name, in dgraph_set_instance_state()
4829 instance_state_str[v->gv_state], instance_state_str[state]); in dgraph_set_instance_state()
4831 old_state = v->gv_state; in dgraph_set_instance_state()
4832 v->gv_state = state; in dgraph_set_instance_state()
4834 v->gv_reason = states->ps_reason; in dgraph_set_instance_state()
4835 err = gt_transition(h, v, serr, old_state); in dgraph_set_instance_state()
4836 if (err == 0 && v->gv_state != old_state) { in dgraph_set_instance_state()
4837 dgraph_state_transition_notify(v, old_state, states->ps_reason); in dgraph_set_instance_state()
4851 vertex_subgraph_dependencies_shutdown(scf_handle_t *h, graph_vertex_t *v, in vertex_subgraph_dependencies_shutdown() argument
4857 assert(v->gv_type == GVT_INST); in vertex_subgraph_dependencies_shutdown()
4868 if (v->gv_flags & GV_INSUBGRAPH) in vertex_subgraph_dependencies_shutdown()
4877 now_up = up_state(v->gv_state); in vertex_subgraph_dependencies_shutdown()
4896 if ((v->gv_flags & GV_ENABLED) && is_nonsubgraph_leaf(v)) { in vertex_subgraph_dependencies_shutdown()
4899 r = disable_service_temporarily(v, h); in vertex_subgraph_dependencies_shutdown()
4918 graph_walk_dependencies(v, disable_nonsubgraph_leaves, in vertex_subgraph_dependencies_shutdown()
4962 graph_transition_propagate(graph_vertex_t *v, propagate_event_t type, in graph_transition_propagate() argument
4966 graph_walk_dependents(v, propagate_stop, (void *)rerr); in graph_transition_propagate()
4968 graph_walk_dependents(v, propagate_start, NULL); in graph_transition_propagate()
4971 propagate_satbility(v); in graph_transition_propagate()
4992 graph_vertex_t *v; in dgraph_remove_instance() local
5001 v = vertex_get_by_name(fmri); in dgraph_remove_instance()
5002 if (v == NULL) { in dgraph_remove_instance()
5008 if (v->gv_flags & GV_CONFIGURED) in dgraph_remove_instance()
5009 graph_unset_restarter(v); in dgraph_remove_instance()
5019 err = uu_list_walk(v->gv_dependencies, in dgraph_remove_instance()
5024 delete_instance_dependencies(v, B_TRUE); in dgraph_remove_instance()
5034 graph_walk_dependents(v, propagate_stop, (void *)RERR_RESTART); in dgraph_remove_instance()
5036 v->gv_flags &= ~GV_CONFIGURED; in dgraph_remove_instance()
5037 v->gv_flags &= ~GV_DEATHROW; in dgraph_remove_instance()
5039 graph_walk_dependents(v, propagate_start, NULL); in dgraph_remove_instance()
5040 propagate_satbility(v); in dgraph_remove_instance()
5046 if (v != milestone && v->gv_refs == 0 && in dgraph_remove_instance()
5047 uu_list_numnodes(v->gv_dependents) == 1) in dgraph_remove_instance()
5048 remove_inst_vertex(v); in dgraph_remove_instance()
5054 v = e->ge_vertex; in dgraph_remove_instance()
5056 if (vertex_unref(v) == VERTEX_INUSE) in dgraph_remove_instance()
5057 while (eval_subgraph(v, h) == ECONNABORTED) in dgraph_remove_instance()
5444 graph_vertex_t *v; in mark_subtree() local
5447 v = e->ge_vertex; in mark_subtree()
5450 if (v->gv_flags & GV_TOOFFLINE) in mark_subtree()
5453 switch (v->gv_type) { in mark_subtree()
5456 if (!(v->gv_flags & GV_ENABLED)) in mark_subtree()
5459 v->gv_flags |= GV_TOOFFLINE; in mark_subtree()
5460 log_framework(LOG_DEBUG, "%s added to subtree\n", v->gv_name); in mark_subtree()
5467 if (is_depgrp_bypassed(v)) in mark_subtree()
5472 r = uu_list_walk(v->gv_dependents, (uu_walk_fn_t *)mark_subtree, arg, in mark_subtree()
5481 graph_vertex_t *v; in mark_subgraph() local
5485 v = e->ge_vertex; in mark_subgraph()
5488 if (v->gv_flags & GV_INSUBGRAPH) in mark_subgraph()
5494 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_OPTIONAL_ALL) { in mark_subgraph()
5501 if (optional && (v->gv_type == GVT_INST) && in mark_subgraph()
5502 (!(v->gv_flags & GV_ENBLD_NOOVR))) in mark_subgraph()
5505 v->gv_flags |= GV_INSUBGRAPH; in mark_subgraph()
5508 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in mark_subgraph()
5511 r = uu_list_walk(v->gv_dependencies, (uu_walk_fn_t *)mark_subgraph, in mark_subgraph()
5559 graph_vertex_t *nm, *v; in dgraph_set_milestone() local
5641 for (v = uu_list_first(dgraph); v != NULL; v = uu_list_next(dgraph, v)) in dgraph_set_milestone()
5642 v->gv_flags &= ~GV_INSUBGRAPH; in dgraph_set_milestone()
5658 for (v = uu_list_first(dgraph); in dgraph_set_milestone()
5659 v != NULL; in dgraph_set_milestone()
5660 v = uu_list_next(dgraph, v)) { in dgraph_set_milestone()
5661 if (v->gv_type != GVT_INST || in dgraph_set_milestone()
5662 (v->gv_flags & GV_CONFIGURED) == 0) in dgraph_set_milestone()
5666 r = scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, inst, in dgraph_set_milestone()
5688 if (isall || (v->gv_flags & GV_INSUBGRAPH)) { in dgraph_set_milestone()
5692 assert(isnone || (v->gv_flags & GV_INSUBGRAPH) == 0); in dgraph_set_milestone()
5700 if (up_state(v->gv_state)) in dgraph_set_milestone()
5704 if ((v->gv_flags & GV_ENABLED) == 0) in dgraph_set_milestone()
5707 if (!is_nonsubgraph_leaf(v)) in dgraph_set_milestone()
5728 v->gv_name, strerror(r)); in dgraph_set_milestone()