Lines Matching refs:v
181 #define IS_ENABLED(v) ((v)->gv_flags & (GV_ENABLED | GV_ENBLD_NOOVR)) argument
211 #define is_depgrp_bypassed(v) ((v->gv_type == GVT_GROUP) && \ argument
212 ((v->gv_depgroup == DEPGRP_EXCLUDE_ALL) || \
213 (v->gv_restart < RERR_RESTART)))
215 #define is_inst_bypassed(v) ((v->gv_type == GVT_INST) && \ argument
216 ((v->gv_flags & GV_TODISABLE) || \
217 (v->gv_flags & GV_TOOFFLINE)))
312 static boolean_t should_be_in_subgraph(graph_vertex_t *v);
393 graph_vertex_t *v; in graph_add_vertex() local
401 v = startd_zalloc(sizeof (*v)); in graph_add_vertex()
403 v->gv_id = id; in graph_add_vertex()
405 v->gv_name = startd_alloc(strlen(name) + 1); in graph_add_vertex()
406 (void) strcpy(v->gv_name, name); in graph_add_vertex()
408 v->gv_dependencies = startd_list_create(graph_edge_pool, v, 0); in graph_add_vertex()
409 v->gv_dependents = startd_list_create(graph_edge_pool, v, 0); in graph_add_vertex()
414 uu_list_node_init(v, &v->gv_link, graph_vertex_pool); in graph_add_vertex()
415 uu_list_insert(dgraph, v, idx); in graph_add_vertex()
417 return (v); in graph_add_vertex()
425 graph_remove_vertex(graph_vertex_t *v) in graph_remove_vertex() argument
429 assert(uu_list_numnodes(v->gv_dependencies) == 0); in graph_remove_vertex()
430 assert(uu_list_numnodes(v->gv_dependents) == 0); in graph_remove_vertex()
431 assert(v->gv_refs == 0); in graph_remove_vertex()
433 startd_free(v->gv_name, strlen(v->gv_name) + 1); in graph_remove_vertex()
434 uu_list_destroy(v->gv_dependencies); in graph_remove_vertex()
435 uu_list_destroy(v->gv_dependents); in graph_remove_vertex()
436 uu_list_remove(dgraph, v); in graph_remove_vertex()
438 startd_free(v, sizeof (graph_vertex_t)); in graph_remove_vertex()
468 graph_remove_edge(graph_vertex_t *v, graph_vertex_t *dv) in graph_remove_edge() argument
472 for (e = uu_list_first(v->gv_dependencies); in graph_remove_edge()
474 e = uu_list_next(v->gv_dependencies, e)) { in graph_remove_edge()
476 uu_list_remove(v->gv_dependencies, e); in graph_remove_edge()
485 if (e->ge_vertex == v) { in graph_remove_edge()
494 remove_inst_vertex(graph_vertex_t *v) in remove_inst_vertex() argument
501 assert(uu_list_numnodes(v->gv_dependents) == 1); in remove_inst_vertex()
502 assert(uu_list_numnodes(v->gv_dependencies) == 0); in remove_inst_vertex()
503 assert(v->gv_refs == 0); in remove_inst_vertex()
504 assert((v->gv_flags & GV_CONFIGURED) == 0); in remove_inst_vertex()
506 e = uu_list_first(v->gv_dependents); in remove_inst_vertex()
508 graph_remove_edge(sv, v); in remove_inst_vertex()
511 if (up_svcs_p[i] == v) in remove_inst_vertex()
515 if (manifest_import_p == v) in remove_inst_vertex()
518 graph_remove_vertex(v); in remove_inst_vertex()
527 graph_walk_dependents(graph_vertex_t *v, void (*func)(graph_vertex_t *, void *), in graph_walk_dependents() argument
532 for (e = uu_list_first(v->gv_dependents); in graph_walk_dependents()
534 e = uu_list_next(v->gv_dependents, e)) in graph_walk_dependents()
539 graph_walk_dependencies(graph_vertex_t *v, in graph_walk_dependencies() argument
546 for (e = uu_list_first(v->gv_dependencies); in graph_walk_dependencies()
548 e = uu_list_next(v->gv_dependencies, e)) { in graph_walk_dependencies()
593 graph_vertex_t *v = e->ge_vertex; in graph_walk_recurse() local
597 i = v->gv_id / 8; in graph_walk_recurse()
598 b = 1 << (v->gv_id % 8); in graph_walk_recurse()
611 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in graph_walk_recurse()
618 if ((gip->gi_ret = gip->gi_pre(v, gip->gi_arg)) == UU_WALK_NEXT) { in graph_walk_recurse()
623 list = v->gv_dependents; in graph_walk_recurse()
625 list = v->gv_dependencies; in graph_walk_recurse()
641 (void) gip->gi_post(v, gip->gi_arg); in graph_walk_recurse()
652 graph_walk(graph_vertex_t *v, graph_walk_dir_t dir, in graph_walk() argument
670 fake.ge_vertex = v; in graph_walk()
688 child_pre(graph_vertex_t *v, void *arg) in child_pre() argument
694 if (v->gv_id == cs->id) { in child_pre()
704 child_post(graph_vertex_t *v, void *arg) in child_post() argument
711 cs->path[cs->depth] = v->gv_id; in child_post()
742 graph_vertex_t *v; in path_to_str() local
756 v = vertex_get_by_id(path[i]); in path_to_str()
758 if (v == NULL) in path_to_str()
760 else if (v->gv_type == GVT_INST || v->gv_type == GVT_SVC) in path_to_str()
761 name = v->gv_name; in path_to_str()
791 graph_clogin_start(graph_vertex_t *v) in graph_clogin_start() argument
798 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_clogin_start()
802 graph_su_start(graph_vertex_t *v) in graph_su_start() argument
811 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_su_start()
868 vertex_send_event(graph_vertex_t *v, restarter_event_type_t e) in vertex_send_event() argument
872 assert(v->gv_state == RESTARTER_STATE_UNINIT); in vertex_send_event()
880 log_framework(LOG_DEBUG, "Enabling %s.\n", v->gv_name); in vertex_send_event()
881 assert(v->gv_state == RESTARTER_STATE_UNINIT || in vertex_send_event()
882 v->gv_state == RESTARTER_STATE_DISABLED || in vertex_send_event()
883 v->gv_state == RESTARTER_STATE_MAINT); in vertex_send_event()
888 log_framework(LOG_DEBUG, "Disabling %s.\n", v->gv_name); in vertex_send_event()
889 assert(v->gv_state != RESTARTER_STATE_DISABLED); in vertex_send_event()
894 log_framework(LOG_DEBUG, "Stopping %s.\n", v->gv_name); in vertex_send_event()
895 assert(v->gv_state == RESTARTER_STATE_DEGRADED || in vertex_send_event()
896 v->gv_state == RESTARTER_STATE_ONLINE); in vertex_send_event()
900 log_framework(LOG_DEBUG, "Starting %s.\n", v->gv_name); in vertex_send_event()
901 assert(v->gv_state == RESTARTER_STATE_OFFLINE); in vertex_send_event()
924 restarter_protocol_send_event(v->gv_name, v->gv_restarter_channel, e, in vertex_send_event()
925 v->gv_reason); in vertex_send_event()
929 graph_unset_restarter(graph_vertex_t *v) in graph_unset_restarter() argument
932 assert(v->gv_flags & GV_CONFIGURED); in graph_unset_restarter()
934 vertex_send_event(v, RESTARTER_EVENT_TYPE_REMOVE_INSTANCE); in graph_unset_restarter()
936 if (v->gv_restarter_id != -1) { in graph_unset_restarter()
939 rv = vertex_get_by_id(v->gv_restarter_id); in graph_unset_restarter()
940 graph_remove_edge(v, rv); in graph_unset_restarter()
943 v->gv_restarter_id = -1; in graph_unset_restarter()
944 v->gv_restarter_channel = NULL; in graph_unset_restarter()
952 free_if_unrefed(graph_vertex_t *v) in free_if_unrefed() argument
956 if (v->gv_refs > 0) in free_if_unrefed()
959 if (v->gv_type == GVT_SVC && in free_if_unrefed()
960 uu_list_numnodes(v->gv_dependents) == 0 && in free_if_unrefed()
961 uu_list_numnodes(v->gv_dependencies) == 0) { in free_if_unrefed()
962 graph_remove_vertex(v); in free_if_unrefed()
964 } else if (v->gv_type == GVT_INST && in free_if_unrefed()
965 (v->gv_flags & GV_CONFIGURED) == 0 && in free_if_unrefed()
966 uu_list_numnodes(v->gv_dependents) == 1 && in free_if_unrefed()
967 uu_list_numnodes(v->gv_dependencies) == 0) { in free_if_unrefed()
968 remove_inst_vertex(v); in free_if_unrefed()
976 delete_depgroup(graph_vertex_t *v) in delete_depgroup() argument
982 assert(v->gv_type == GVT_GROUP); in delete_depgroup()
983 assert(uu_list_numnodes(v->gv_dependents) == 0); in delete_depgroup()
985 while ((e = uu_list_first(v->gv_dependencies)) != NULL) { in delete_depgroup()
988 graph_remove_edge(v, dv); in delete_depgroup()
1011 graph_remove_vertex(v); in delete_depgroup()
1017 graph_vertex_t *v = ptrs[0]; in delete_instance_deps_cb() local
1032 assert(dv->gv_id == v->gv_restarter_id); in delete_instance_deps_cb()
1034 graph_remove_edge(v, dv); in delete_instance_deps_cb()
1038 graph_remove_edge(v, dv); in delete_instance_deps_cb()
1057 delete_instance_dependencies(graph_vertex_t *v, boolean_t delete_restarter_dep) in delete_instance_dependencies() argument
1063 assert(v->gv_type == GVT_INST); in delete_instance_dependencies()
1065 ptrs[0] = v; in delete_instance_dependencies()
1068 r = uu_list_walk(v->gv_dependencies, in delete_instance_dependencies()
1213 inst_running(graph_vertex_t *v) in inst_running() argument
1215 assert(v->gv_type == GVT_INST); in inst_running()
1217 if (v->gv_state == RESTARTER_STATE_ONLINE || in inst_running()
1218 v->gv_state == RESTARTER_STATE_DEGRADED) in inst_running()
1324 graph_vertex_t *v; in optional_all_satisfied() local
1335 v = edge->ge_vertex; in optional_all_satisfied()
1337 switch (v->gv_type) { in optional_all_satisfied()
1340 if ((v->gv_flags & GV_CONFIGURED) == 0) in optional_all_satisfied()
1343 if (v->gv_state == RESTARTER_STATE_MAINT) in optional_all_satisfied()
1347 if (v->gv_state == RESTARTER_STATE_OFFLINE || in optional_all_satisfied()
1348 v->gv_state == RESTARTER_STATE_DISABLED) { in optional_all_satisfied()
1353 i = dependency_satisfied(v, B_TRUE); in optional_all_satisfied()
1357 i = dependency_satisfied(v, satbility); in optional_all_satisfied()
1363 i = dependency_satisfied(v, satbility); in optional_all_satisfied()
1369 i = optional_all_satisfied(v, satbility); in optional_all_satisfied()
1378 __LINE__, v->gv_type); in optional_all_satisfied()
1388 v->gv_name, i == 0 ? "ed" : "able"); in optional_all_satisfied()
1409 #define LOG_EXCLUDE(u, v) \ argument
1412 (u)->gv_name, (v)->gv_name)
1419 graph_vertex_t *v, *v2; in exclude_all_satisfied() local
1424 v = edge->ge_vertex; in exclude_all_satisfied()
1426 switch (v->gv_type) { in exclude_all_satisfied()
1428 if ((v->gv_flags & GV_CONFIGURED) == 0) in exclude_all_satisfied()
1431 switch (v->gv_state) { in exclude_all_satisfied()
1434 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1435 return (v->gv_flags & GV_ENABLED ? -1 : 0); in exclude_all_satisfied()
1439 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1449 __FILE__, __LINE__, v->gv_state); in exclude_all_satisfied()
1459 if (!file_ready(v)) in exclude_all_satisfied()
1461 LOG_EXCLUDE(groupv, v); in exclude_all_satisfied()
1468 __LINE__, v->gv_type); in exclude_all_satisfied()
1474 if (uu_list_numnodes(v->gv_dependencies) == 0) in exclude_all_satisfied()
1477 for (e2 = uu_list_first(v->gv_dependencies); in exclude_all_satisfied()
1479 e2 = uu_list_next(v->gv_dependencies, e2)) { in exclude_all_satisfied()
1521 instance_satisfied(graph_vertex_t *v, boolean_t satbility) in instance_satisfied() argument
1523 assert(v->gv_type == GVT_INST); in instance_satisfied()
1524 assert(!inst_running(v)); in instance_satisfied()
1526 return (require_all_satisfied(v, satbility)); in instance_satisfied()
1534 dependency_satisfied(graph_vertex_t *v, boolean_t satbility) in dependency_satisfied() argument
1536 switch (v->gv_type) { in dependency_satisfied()
1538 if ((v->gv_flags & GV_CONFIGURED) == 0) { in dependency_satisfied()
1539 if (v->gv_flags & GV_DEATHROW) { in dependency_satisfied()
1558 switch (v->gv_state) { in dependency_satisfied()
1561 if (v->gv_flags & GV_TODISABLE) in dependency_satisfied()
1563 if (v->gv_flags & GV_TOOFFLINE) in dependency_satisfied()
1568 if (!satbility || v->gv_flags & GV_TODISABLE) in dependency_satisfied()
1570 return (instance_satisfied(v, satbility) != -1 ? in dependency_satisfied()
1574 if (!satbility || !(v->gv_flags & GV_ENABLED)) in dependency_satisfied()
1576 return (instance_satisfied(v, satbility) != -1 ? in dependency_satisfied()
1588 __FILE__, __LINE__, v->gv_state); in dependency_satisfied()
1595 if (uu_list_numnodes(v->gv_dependencies) == 0) in dependency_satisfied()
1597 return (require_any_satisfied(v, satbility)); in dependency_satisfied()
1601 return (file_ready(v) ? 1 : -1); in dependency_satisfied()
1609 v->gv_type); in dependency_satisfied()
1615 switch (v->gv_depgroup) { in dependency_satisfied()
1617 return (require_any_satisfied(v, satbility)); in dependency_satisfied()
1620 return (require_all_satisfied(v, satbility)); in dependency_satisfied()
1623 return (optional_all_satisfied(v, satbility)); in dependency_satisfied()
1626 return (exclude_all_satisfied(v, satbility)); in dependency_satisfied()
1631 __LINE__, v->gv_depgroup); in dependency_satisfied()
1638 graph_start_if_satisfied(graph_vertex_t *v) in graph_start_if_satisfied() argument
1640 if (v->gv_state == RESTARTER_STATE_OFFLINE && in graph_start_if_satisfied()
1641 instance_satisfied(v, B_FALSE) == 1) { in graph_start_if_satisfied()
1642 if (v->gv_start_f == NULL) in graph_start_if_satisfied()
1643 vertex_send_event(v, RESTARTER_EVENT_TYPE_START); in graph_start_if_satisfied()
1645 v->gv_start_f(v); in graph_start_if_satisfied()
1679 satbility_cb(graph_vertex_t *v, void *arg) in satbility_cb() argument
1681 if (is_inst_bypassed(v)) in satbility_cb()
1684 if (v->gv_type == GVT_INST) in satbility_cb()
1685 graph_start_if_satisfied(v); in satbility_cb()
1691 propagate_satbility(graph_vertex_t *v) in propagate_satbility() argument
1693 graph_walk(v, WALK_DEPENDENTS, satbility_cb, NULL, NULL); in propagate_satbility()
1708 propagate_start(graph_vertex_t *v, void *arg) in propagate_start() argument
1712 if (is_inst_bypassed(v)) in propagate_start()
1715 switch (v->gv_type) { in propagate_start()
1718 if (inst_running(v)) { in propagate_start()
1720 vertex_send_event(v, in propagate_start()
1724 graph_start_if_satisfied(v); in propagate_start()
1729 if (v->gv_depgroup == DEPGRP_EXCLUDE_ALL) { in propagate_start()
1730 graph_walk_dependents(v, propagate_stop, in propagate_start()
1734 err = v->gv_restart; in propagate_start()
1738 graph_walk_dependents(v, propagate_start, (void *)err); in propagate_start()
1752 v->gv_type); in propagate_start()
1768 propagate_stop(graph_vertex_t *v, void *arg) in propagate_stop() argument
1772 if (is_inst_bypassed(v)) in propagate_stop()
1775 switch (v->gv_type) { in propagate_stop()
1778 if (err > RERR_NONE && inst_running(v)) { in propagate_stop()
1780 vertex_send_event(v, in propagate_stop()
1783 vertex_send_event(v, RESTARTER_EVENT_TYPE_STOP); in propagate_stop()
1789 graph_walk_dependents(v, propagate_stop, arg); in propagate_stop()
1801 if (v->gv_depgroup == DEPGRP_EXCLUDE_ALL) { in propagate_stop()
1802 graph_walk_dependents(v, propagate_start, in propagate_stop()
1807 if (err == RERR_NONE || err > v->gv_restart) in propagate_stop()
1810 graph_walk_dependents(v, propagate_stop, arg); in propagate_stop()
1816 v->gv_type); in propagate_stop()
1823 offline_vertex(graph_vertex_t *v) in offline_vertex() argument
1831 assert(v->gv_type == GVT_INST); in offline_vertex()
1840 if (scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, scf_inst, NULL, in offline_vertex()
1854 uu_die("Can't decode FMRI %s: %s\n", v->gv_name, in offline_vertex()
1882 v->gv_name); in offline_vertex()
1896 vertex_send_event(v, RESTARTER_EVENT_TYPE_STOP_RESET); in offline_vertex()
1908 graph_vertex_t *v; in graph_enable_by_vertex() local
1988 for (v = uu_list_first(dgraph); v != NULL; in graph_enable_by_vertex()
1989 v = uu_list_next(dgraph, v)) { in graph_enable_by_vertex()
1991 if (v == vertex) in graph_enable_by_vertex()
1994 if (v->gv_type != GVT_INST || in graph_enable_by_vertex()
1995 (v->gv_flags & GV_CONFIGURED) == 0 || in graph_enable_by_vertex()
1996 (v->gv_flags & GV_ENABLED) == 0 || in graph_enable_by_vertex()
1997 (v->gv_flags & GV_TOOFFLINE) == 0) in graph_enable_by_vertex()
2000 if ((v->gv_state != RESTARTER_STATE_ONLINE) && in graph_enable_by_vertex()
2001 (v->gv_state != RESTARTER_STATE_DEGRADED)) { in graph_enable_by_vertex()
2011 if (insubtree_dependents_down(v) == B_TRUE) { in graph_enable_by_vertex()
2014 v->gv_name, vertex->gv_name); in graph_enable_by_vertex()
2015 offline_vertex(v); in graph_enable_by_vertex()
2035 graph_change_restarter(graph_vertex_t *v, const char *fmri_arg, scf_handle_t *h, in graph_change_restarter() argument
2055 if (v->gv_flags & GV_CONFIGURED) { in graph_change_restarter()
2056 if (v->gv_restarter_id == -1) { in graph_change_restarter()
2063 graph_unset_restarter(v); in graph_change_restarter()
2067 v->gv_restarter_id = -1; in graph_change_restarter()
2068 v->gv_restarter_channel = NULL; in graph_change_restarter()
2069 vertex_send_event(v, RESTARTER_EVENT_TYPE_ADD_INSTANCE); in graph_change_restarter()
2073 if (v->gv_flags & GV_CONFIGURED) { in graph_change_restarter()
2075 if (id != -1 && v->gv_restarter_id == id) { in graph_change_restarter()
2080 graph_unset_restarter(v); in graph_change_restarter()
2094 v->gv_restarter_id = rv->gv_id; in graph_change_restarter()
2095 v->gv_restarter_channel = rv->gv_delegate_channel; in graph_change_restarter()
2097 err = graph_insert_dependency(v, rv, pathp); in graph_change_restarter()
2103 vertex_send_event(v, RESTARTER_EVENT_TYPE_ADD_INSTANCE); in graph_change_restarter()
2288 graph_vertex_t *v; /* GVT_GROUP vertex */ member
2315 graph_vertex_t *depgroup_v, *v; in process_dependency_fmri() local
2325 depgroup_v = info->v; in process_dependency_fmri()
2337 RERR_NONE, &v); in process_dependency_fmri()
2343 assert(v->gv_type == GVT_FILE); in process_dependency_fmri()
2400 RERR_NONE, &v); in process_dependency_fmri()
2409 assert(v->gv_type == GVT_INST); in process_dependency_fmri()
2411 assert(v->gv_type == GVT_SVC); in process_dependency_fmri()
2420 info->err = graph_insert_dependency(depgroup_v, v, info->pathp); in process_dependency_fmri()
2433 switch (v->gv_type) { in process_dependency_fmri()
2435 if ((v->gv_flags & GV_CONFIGURED) != 0) in process_dependency_fmri()
2443 err = libscf_lookup_instance(v->gv_name, inst); in process_dependency_fmri()
2446 err = configure_vertex(v, inst); in process_dependency_fmri()
2483 (void) add_service(v->gv_name, info->h, &rebound); in process_dependency_fmri()
2492 graph_vertex_t *v; /* GVT_INST vertex */ member
2551 pg_name, info->v->gv_name, scf_strerror(scf_error())); in process_dependency_pg()
2558 pg_name, info->v->gv_name); in process_dependency_pg()
2563 fmri_sz = strlen(info->v->gv_name) + 1 + len + 1; in process_dependency_pg()
2566 (void) snprintf(fmri, fmri_sz, "%s>%s", info->v->gv_name, in process_dependency_pg()
2574 pg_name, info->v->gv_name); in process_dependency_pg()
2584 "\n", pg_name, info->v->gv_name); in process_dependency_pg()
2607 pg_name, info->v->gv_name, SCF_PROPERTY_ENTITIES); in process_dependency_pg()
2622 err = graph_insert_dependency(info->v, depgrp, info->pathp); in process_dependency_pg()
2626 linfo.v = depgrp; in process_dependency_pg()
2628 linfo.inst_fmri = info->v->gv_name; in process_dependency_pg()
2668 set_dependencies(graph_vertex_t *v, scf_instance_t *inst, int **pathp) in set_dependencies() argument
2681 old_configured = v->gv_flags & GV_CONFIGURED; in set_dependencies()
2682 v->gv_flags |= GV_CONFIGURED; in set_dependencies()
2685 info.v = v; in set_dependencies()
2692 v->gv_flags &= ~GV_CONFIGURED; in set_dependencies()
2735 vertex_ref(graph_vertex_t *v) in vertex_ref() argument
2739 v->gv_refs++; in vertex_ref()
2750 vertex_unref(graph_vertex_t *v) in vertex_unref() argument
2753 assert(v->gv_refs > 0); in vertex_unref()
2755 v->gv_refs--; in vertex_unref()
2757 return (free_if_unrefed(v)); in vertex_unref()
2772 graph_vertex_t *v = e->ge_vertex; in append_svcs_or_insts() local
2776 switch (v->gv_type) { in append_svcs_or_insts()
2782 r = uu_list_walk(v->gv_dependencies, in append_svcs_or_insts()
2793 __LINE__, v->gv_type); in append_svcs_or_insts()
2799 new->ge_vertex = v; in append_svcs_or_insts()
2809 vertex_ref(v); in append_svcs_or_insts()
2815 should_be_in_subgraph(graph_vertex_t *v) in should_be_in_subgraph() argument
2819 if (v == milestone) in should_be_in_subgraph()
2827 for (e = uu_list_first(v->gv_dependents); in should_be_in_subgraph()
2829 e = uu_list_next(v->gv_dependents, e)) { in should_be_in_subgraph()
2838 if (v->gv_type == GVT_INST && dv->gv_type == GVT_SVC) { in should_be_in_subgraph()
2855 !(v->gv_flags & GV_ENBLD_NOOVR)) in should_be_in_subgraph()
2863 if (v->gv_type == GVT_INST && in should_be_in_subgraph()
2866 !(v->gv_flags & GV_ENBLD_NOOVR)) in should_be_in_subgraph()
2886 eval_subgraph(graph_vertex_t *v, scf_handle_t *h) in eval_subgraph() argument
2888 boolean_t old = (v->gv_flags & GV_INSUBGRAPH) != 0; in eval_subgraph()
2896 new = should_be_in_subgraph(v); in eval_subgraph()
2902 "Removing %s from the subgraph.\n", v->gv_name); in eval_subgraph()
2904 v->gv_flags = (v->gv_flags & ~GV_INSUBGRAPH) | in eval_subgraph()
2907 if (v->gv_type == GVT_INST && (v->gv_flags & GV_CONFIGURED)) { in eval_subgraph()
2911 err = libscf_fmri_get_instance(h, v->gv_name, &inst); in eval_subgraph()
2958 v->gv_name, strerror(err)); in eval_subgraph()
2967 for (e = uu_list_first(v->gv_dependencies); in eval_subgraph()
2969 e = uu_list_next(v->gv_dependencies, e)) { in eval_subgraph()
2987 refresh_vertex(graph_vertex_t *v, scf_instance_t *inst) in refresh_vertex() argument
3000 assert(v->gv_type == GVT_INST); in refresh_vertex()
3002 log_framework(LOG_DEBUG, "Graph engine: Refreshing %s.\n", v->gv_name); in refresh_vertex()
3012 err = uu_list_walk(v->gv_dependencies, in refresh_vertex()
3017 delete_instance_dependencies(v, B_FALSE); in refresh_vertex()
3019 err = set_dependencies(v, inst, &path); in refresh_vertex()
3051 vertex_send_event(v, in refresh_vertex()
3055 vertex_send_event(v, in refresh_vertex()
3079 for (e = uu_list_first(v->gv_dependencies); in refresh_vertex()
3081 e = uu_list_next(v->gv_dependencies, e)) { in refresh_vertex()
3093 graph_start_if_satisfied(v); in refresh_vertex()
3119 configure_vertex(graph_vertex_t *v, scf_instance_t *inst) in configure_vertex() argument
3134 assert(v->gv_type == GVT_INST); in configure_vertex()
3135 assert((v->gv_flags & GV_CONFIGURED) == 0); in configure_vertex()
3138 assert(should_be_in_subgraph(v) == in configure_vertex()
3139 ((v->gv_flags & GV_INSUBGRAPH) != 0)); in configure_vertex()
3147 if ((v->gv_flags & GV_DEATHROW) || in configure_vertex()
3148 (is_fmri_in_deathrow(v->gv_name) == B_TRUE)) { in configure_vertex()
3149 if ((v->gv_flags & GV_DEATHROW) == 0) { in configure_vertex()
3155 v->gv_flags |= GV_DEATHROW; in configure_vertex()
3170 v->gv_name, strerror(err)); in configure_vertex()
3181 v->gv_name); in configure_vertex()
3213 v->gv_flags |= GV_DEATHROW; in configure_vertex()
3218 log_framework(LOG_DEBUG, "Graph adding %s.\n", v->gv_name); in configure_vertex()
3321 !(v->gv_flags & GV_INSUBGRAPH)) { in configure_vertex()
3343 v->gv_name, strerror(err)); in configure_vertex()
3354 assert(v->gv_flags & GV_INSUBGRAPH); in configure_vertex()
3374 err = libscf_get_basic_instance_data(h, inst, v->gv_name, &enabled, in configure_vertex()
3388 v->gv_name); in configure_vertex()
3399 v->gv_name, scf_strerror(scf_error())); in configure_vertex()
3400 v->gv_stn_tset = 0; in configure_vertex()
3402 v->gv_stn_tset = tset; in configure_vertex()
3404 if (strcmp(v->gv_name, SCF_INSTANCE_GLOBAL) == 0) in configure_vertex()
3405 stn_global = v->gv_stn_tset; in configure_vertex()
3412 v->gv_flags = (v->gv_flags & ~GV_ENBLD_NOOVR) | in configure_vertex()
3418 v->gv_state = RESTARTER_STATE_UNINIT; in configure_vertex()
3420 snap = libscf_get_or_make_running_snapshot(inst, v->gv_name, B_TRUE); in configure_vertex()
3424 err = graph_change_restarter(v, restarter_fmri, h, &path); in configure_vertex()
3439 v->gv_name, restarter_fmri); in configure_vertex()
3442 handle_cycle(v->gv_name, path); in configure_vertex()
3501 v->gv_state = RESTARTER_STATE_MAINT; in configure_vertex()
3508 err = refresh_vertex(v, inst); in configure_vertex()
3515 v->gv_flags |= GV_CONFIGURED; in configure_vertex()
3517 graph_enable_by_vertex(v, enabled, 0); in configure_vertex()
3809 graph_vertex_t *v; in run_sulogin() local
3816 v = vertex_get_by_name(console_login_fmri); in run_sulogin()
3817 if (v != NULL && inst_running(v)) in run_sulogin()
3831 v = vertex_get_by_name(console_login_fmri); in run_sulogin()
3833 if (v != NULL && v->gv_state == RESTARTER_STATE_OFFLINE) { in run_sulogin()
3834 if (v->gv_start_f == NULL) in run_sulogin()
3835 vertex_send_event(v, in run_sulogin()
3838 v->gv_start_f(v); in run_sulogin()
4089 graph_vertex_t *v; in dgraph_add_instance() local
4102 v = vertex_get_by_name(inst_fmri); in dgraph_add_instance()
4104 if (v != NULL) { in dgraph_add_instance()
4105 assert(v->gv_type == GVT_INST); in dgraph_add_instance()
4107 if (v->gv_flags & GV_CONFIGURED) { in dgraph_add_instance()
4115 RERR_NONE, &v); in dgraph_add_instance()
4124 err = configure_vertex(v, inst); in dgraph_add_instance()
4154 graph_vertex_t *v; in dgraph_update_general() local
4203 v = vertex_get_by_name(fmri); in dgraph_update_general()
4204 if (v == NULL || !(v->gv_flags & GV_CONFIGURED)) { in dgraph_update_general()
4215 err = libscf_get_basic_instance_data(h, inst, v->gv_name, &enabled, in dgraph_update_general()
4238 oldflags = v->gv_flags; in dgraph_update_general()
4239 v->gv_flags = (v->gv_flags & ~GV_ENBLD_NOOVR) | in dgraph_update_general()
4249 if (milestone > MILESTONE_NONE && v->gv_flags != oldflags) in dgraph_update_general()
4250 (void) eval_subgraph(v, h); in dgraph_update_general()
4265 graph_enable_by_vertex(v, enabled, 1); in dgraph_update_general()
4287 dgraph_refresh_instance(graph_vertex_t *v, scf_instance_t *inst) in dgraph_refresh_instance() argument
4294 assert(v->gv_type == GVT_INST); in dgraph_refresh_instance()
4298 v->gv_name, &enabled, NULL, NULL); in dgraph_refresh_instance()
4310 v->gv_name); in dgraph_refresh_instance()
4320 v->gv_name, scf_strerror(scf_error())); in dgraph_refresh_instance()
4323 v->gv_stn_tset = tset; in dgraph_refresh_instance()
4324 if (strcmp(v->gv_name, SCF_INSTANCE_GLOBAL) == 0) in dgraph_refresh_instance()
4330 r = libscf_snapshots_refresh(inst, v->gv_name); in dgraph_refresh_instance()
4339 r = refresh_vertex(v, inst); in dgraph_refresh_instance()
4351 insubtree_dependents_down(graph_vertex_t *v) in insubtree_dependents_down() argument
4358 for (e = uu_list_first(v->gv_dependents); e != NULL; in insubtree_dependents_down()
4359 e = uu_list_next(v->gv_dependents, e)) { in insubtree_dependents_down()
4397 is_nonsubgraph_leaf(graph_vertex_t *v) in is_nonsubgraph_leaf() argument
4404 for (e = uu_list_first(v->gv_dependents); in is_nonsubgraph_leaf()
4406 e = uu_list_next(v->gv_dependents, e)) { in is_nonsubgraph_leaf()
4448 disable_service_temporarily(graph_vertex_t *v, scf_handle_t *h) in disable_service_temporarily() argument
4466 log_error(LOG_WARNING, emsg, v->gv_name, buf); in disable_service_temporarily()
4468 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4472 r = scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, inst, in disable_service_temporarily()
4477 log_error(LOG_WARNING, emsg, v->gv_name, emsg_cbroken); in disable_service_temporarily()
4478 graph_enable_by_vertex(v, 0, 0); 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()
4510 log_error(LOG_WARNING, emsg, v->gv_name, in disable_service_temporarily()
4512 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4516 log_error(LOG_WARNING, emsg, v->gv_name, in disable_service_temporarily()
4518 graph_enable_by_vertex(v, 0, 0); in disable_service_temporarily()
4533 offline_subtree_leaves(graph_vertex_t *v, void *arg) in offline_subtree_leaves() argument
4538 if (v->gv_type != GVT_INST) { in offline_subtree_leaves()
4539 graph_walk_dependencies(v, offline_subtree_leaves, arg); in offline_subtree_leaves()
4547 if ((v->gv_flags & GV_TOOFFLINE) == 0) in offline_subtree_leaves()
4551 if (!up_state(v->gv_state)) { in offline_subtree_leaves()
4552 graph_walk_dependencies(v, offline_subtree_leaves, arg); in offline_subtree_leaves()
4557 if (insubtree_dependents_down(v) == B_TRUE) { in offline_subtree_leaves()
4558 if (v->gv_flags & GV_TODISABLE) in offline_subtree_leaves()
4559 vertex_send_event(v, in offline_subtree_leaves()
4562 offline_vertex(v); in offline_subtree_leaves()
4567 graph_offline_subtree_leaves(graph_vertex_t *v, void *h) in graph_offline_subtree_leaves() argument
4569 graph_walk_dependencies(v, offline_subtree_leaves, (void *)h); in graph_offline_subtree_leaves()
4579 disable_nonsubgraph_leaves(graph_vertex_t *v, void *arg) in disable_nonsubgraph_leaves() argument
4590 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in disable_nonsubgraph_leaves()
4594 if (v->gv_type != GVT_INST) in disable_nonsubgraph_leaves()
4597 if ((v->gv_flags & GV_CONFIGURED) == 0) in disable_nonsubgraph_leaves()
4608 if (v->gv_flags & GV_INSUBGRAPH) in disable_nonsubgraph_leaves()
4612 if (!up_state(v->gv_state)) in disable_nonsubgraph_leaves()
4616 if ((v->gv_flags & GV_ENABLED) == 0) in disable_nonsubgraph_leaves()
4620 if (is_nonsubgraph_leaf(v)) in disable_nonsubgraph_leaves()
4621 (void) disable_service_temporarily(v, (scf_handle_t *)arg); in disable_nonsubgraph_leaves()
4626 graph_walk_dependencies(v, disable_nonsubgraph_leaves, arg); in disable_nonsubgraph_leaves()
4668 dgraph_state_transition_notify(graph_vertex_t *v, in dgraph_state_transition_notify() argument
4671 restarter_instance_state_t new_state = v->gv_state; in dgraph_state_transition_notify()
4704 } else if (stn_transition & v->gv_stn_tset) { in dgraph_state_transition_notify()
4716 (IS_ENABLED(v) == 1 || to == SCF_STATE_DISABLED)) { in dgraph_state_transition_notify()
4731 nvlist_add_string(attr, "fmri", v->gv_name) != 0 || in dgraph_state_transition_notify()
4740 "event: %s\n", v->gv_name, strerror(errno)); in dgraph_state_transition_notify()
4749 v->gv_name, fmev_strerror(fmev_errno)); in dgraph_state_transition_notify()
4770 graph_vertex_t *v; in dgraph_set_instance_state() local
4778 v = vertex_get_by_name(inst_name); in dgraph_set_instance_state()
4779 if (v == NULL) { in dgraph_set_instance_state()
4784 assert(v->gv_type == GVT_INST); in dgraph_set_instance_state()
4800 log_framework(LOG_DEBUG, "Graph noting %s %s -> %s.\n", v->gv_name, in dgraph_set_instance_state()
4801 instance_state_str[v->gv_state], instance_state_str[state]); in dgraph_set_instance_state()
4803 old_state = v->gv_state; in dgraph_set_instance_state()
4804 v->gv_state = state; in dgraph_set_instance_state()
4806 v->gv_reason = states->ps_reason; in dgraph_set_instance_state()
4807 err = gt_transition(h, v, serr, old_state); in dgraph_set_instance_state()
4808 if (err == 0 && v->gv_state != old_state) { in dgraph_set_instance_state()
4809 dgraph_state_transition_notify(v, old_state, states->ps_reason); in dgraph_set_instance_state()
4823 vertex_subgraph_dependencies_shutdown(scf_handle_t *h, graph_vertex_t *v, in vertex_subgraph_dependencies_shutdown() argument
4829 assert(v->gv_type == GVT_INST); in vertex_subgraph_dependencies_shutdown()
4840 if (v->gv_flags & GV_INSUBGRAPH) in vertex_subgraph_dependencies_shutdown()
4849 now_up = up_state(v->gv_state); in vertex_subgraph_dependencies_shutdown()
4868 if ((v->gv_flags & GV_ENABLED) && is_nonsubgraph_leaf(v)) { in vertex_subgraph_dependencies_shutdown()
4871 r = disable_service_temporarily(v, h); in vertex_subgraph_dependencies_shutdown()
4890 graph_walk_dependencies(v, disable_nonsubgraph_leaves, in vertex_subgraph_dependencies_shutdown()
4934 graph_transition_propagate(graph_vertex_t *v, propagate_event_t type, in graph_transition_propagate() argument
4938 graph_walk_dependents(v, propagate_stop, (void *)rerr); in graph_transition_propagate()
4940 graph_walk_dependents(v, propagate_start, (void *)RERR_NONE); in graph_transition_propagate()
4943 propagate_satbility(v); in graph_transition_propagate()
4964 graph_vertex_t *v; in dgraph_remove_instance() local
4973 v = vertex_get_by_name(fmri); in dgraph_remove_instance()
4974 if (v == NULL) { in dgraph_remove_instance()
4980 if (v->gv_flags & GV_CONFIGURED) in dgraph_remove_instance()
4981 graph_unset_restarter(v); in dgraph_remove_instance()
4991 err = uu_list_walk(v->gv_dependencies, in dgraph_remove_instance()
4996 delete_instance_dependencies(v, B_TRUE); in dgraph_remove_instance()
5006 graph_walk_dependents(v, propagate_stop, (void *)RERR_RESTART); in dgraph_remove_instance()
5008 v->gv_flags &= ~GV_CONFIGURED; in dgraph_remove_instance()
5009 v->gv_flags &= ~GV_DEATHROW; in dgraph_remove_instance()
5011 graph_walk_dependents(v, propagate_start, (void *)RERR_NONE); in dgraph_remove_instance()
5012 propagate_satbility(v); in dgraph_remove_instance()
5018 if (v != milestone && v->gv_refs == 0 && in dgraph_remove_instance()
5019 uu_list_numnodes(v->gv_dependents) == 1) in dgraph_remove_instance()
5020 remove_inst_vertex(v); in dgraph_remove_instance()
5026 v = e->ge_vertex; in dgraph_remove_instance()
5028 if (vertex_unref(v) == VERTEX_INUSE) in dgraph_remove_instance()
5029 while (eval_subgraph(v, h) == ECONNABORTED) in dgraph_remove_instance()
5416 graph_vertex_t *v; in mark_subtree() local
5419 v = e->ge_vertex; in mark_subtree()
5422 if (v->gv_flags & GV_TOOFFLINE) in mark_subtree()
5425 switch (v->gv_type) { in mark_subtree()
5428 if (!inst_running(v)) in mark_subtree()
5431 v->gv_flags |= GV_TOOFFLINE; in mark_subtree()
5432 log_framework(LOG_DEBUG, "%s added to subtree\n", v->gv_name); in mark_subtree()
5439 if (is_depgrp_bypassed(v)) in mark_subtree()
5444 r = uu_list_walk(v->gv_dependents, (uu_walk_fn_t *)mark_subtree, arg, in mark_subtree()
5453 graph_vertex_t *v; in mark_subgraph() local
5457 v = e->ge_vertex; in mark_subgraph()
5460 if (v->gv_flags & GV_INSUBGRAPH) in mark_subgraph()
5466 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_OPTIONAL_ALL) { in mark_subgraph()
5473 if (optional && (v->gv_type == GVT_INST) && in mark_subgraph()
5474 (!(v->gv_flags & GV_ENBLD_NOOVR))) in mark_subgraph()
5477 v->gv_flags |= GV_INSUBGRAPH; in mark_subgraph()
5480 if (v->gv_type == GVT_GROUP && v->gv_depgroup == DEPGRP_EXCLUDE_ALL) in mark_subgraph()
5483 r = uu_list_walk(v->gv_dependencies, (uu_walk_fn_t *)mark_subgraph, in mark_subgraph()
5531 graph_vertex_t *nm, *v; in dgraph_set_milestone() local
5613 for (v = uu_list_first(dgraph); v != NULL; v = uu_list_next(dgraph, v)) in dgraph_set_milestone()
5614 v->gv_flags &= ~GV_INSUBGRAPH; in dgraph_set_milestone()
5630 for (v = uu_list_first(dgraph); in dgraph_set_milestone()
5631 v != NULL; in dgraph_set_milestone()
5632 v = uu_list_next(dgraph, v)) { in dgraph_set_milestone()
5633 if (v->gv_type != GVT_INST || in dgraph_set_milestone()
5634 (v->gv_flags & GV_CONFIGURED) == 0) in dgraph_set_milestone()
5638 r = scf_handle_decode_fmri(h, v->gv_name, NULL, NULL, inst, in dgraph_set_milestone()
5660 if (isall || (v->gv_flags & GV_INSUBGRAPH)) { in dgraph_set_milestone()
5664 assert(isnone || (v->gv_flags & GV_INSUBGRAPH) == 0); in dgraph_set_milestone()
5672 if (up_state(v->gv_state)) in dgraph_set_milestone()
5676 if ((v->gv_flags & GV_ENABLED) == 0) in dgraph_set_milestone()
5679 if (!is_nonsubgraph_leaf(v)) in dgraph_set_milestone()
5700 v->gv_name, strerror(r)); in dgraph_set_milestone()