# HG changeset patch # User Stephen Hanson # Date 1257181895 28800 # Node ID eb060666c73fe69cb4aa31b642a3c5c2bd61c5f1 # Parent ac35db8a74122cf9fab8fce663e87c0dbed14eae 6885689 syseventd: [daemon.error] Fatal:attempting to dump core on snv_124 6874078 fminject should always add __injected payload 6874080 fmd_case_add_ereport() should add any __injected payload from ereports into the suspect list 6796601 fmadm faulty doesn't show the year when events happen 6820523 fmdump -V should display the complete time for all files, not just errlog files 6881060 Subdirectories in /var/fm/fmd/ have overly restrictive permissions 6890955 oodles of FMA messages upon fmd start-up diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmadm/common/faulty.c --- a/usr/src/cmd/fm/fmadm/common/faulty.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmadm/common/faulty.c Mon Nov 02 09:11:35 2009 -0800 @@ -215,6 +215,7 @@ name_list_t *fru; name_list_t *serial; uint8_t not_suppressed; + uint8_t injected; } status_record_t; typedef struct sr_list { @@ -229,6 +230,7 @@ sr_list_t *status_rec_list; char *resource; uint8_t not_suppressed; + uint8_t injected; uint8_t max_pct; } resource_list_t; @@ -259,7 +261,14 @@ (void) snprintf(buf, len, "0x%llx", sec); } else { time_t tod = (time_t)sec; - (void) strftime(buf, len, "%b %d %T", localtime(&tod)); + time_t now = time(NULL); + if (tod > now+60 || + tod < now - 6L*30L*24L*60L*60L) { /* 6 months ago */ + (void) strftime(buf, len, "%b %d %Y ", + localtime(&tod)); + } else { + (void) strftime(buf, len, "%b %d %T", localtime(&tod)); + } } return (buf); @@ -612,7 +621,7 @@ new_record_init(uurec_t *uurec_p, char *msgid, name_list_t *class, name_list_t *fru, name_list_t *asru, name_list_t *resource, name_list_t *serial, boolean_t not_suppressed, - hostid_t *hostid) + hostid_t *hostid, boolean_t injected) { status_record_t *status_rec_p; @@ -633,6 +642,7 @@ status_rec_p->serial = serial; status_rec_p->msgid = strdup(msgid); status_rec_p->not_suppressed = not_suppressed; + status_rec_p->injected = injected; return (status_rec_p); } @@ -732,6 +742,7 @@ while (np) { if (strcmp(fp->name, np->resource) == 0) { np->not_suppressed |= status_rec_p->not_suppressed; + np->injected |= status_rec_p->injected; srp = np->status_rec_list->status_record; order = cmp_priority(status_rec_p->severity, srp->severity, status_rec_p->uurec->sec, @@ -761,6 +772,7 @@ np = malloc(sizeof (resource_list_t)); np->resource = fp->name; np->not_suppressed = status_rec_p->not_suppressed; + np->injected = status_rec_p->injected; np->status_rec_list = NULL; np->max_pct = fp->max_pct; add_resource(status_rec_p, rpp, np); @@ -790,12 +802,12 @@ catalog_new_record(uurec_t *uurec_p, char *msgid, name_list_t *class, name_list_t *fru, name_list_t *asru, name_list_t *resource, name_list_t *serial, boolean_t not_suppressed, - hostid_t *hostid) + hostid_t *hostid, boolean_t injected) { status_record_t *status_rec_p; status_rec_p = new_record_init(uurec_p, msgid, class, fru, asru, - resource, serial, not_suppressed, hostid); + resource, serial, not_suppressed, hostid, injected); add_rec_list(status_rec_p, &status_rec_list); if (status_rec_p->fru) add_list(status_rec_p, status_rec_p->fru, &status_fru_list); @@ -924,11 +936,13 @@ hostid_t *host; boolean_t not_suppressed = 1; boolean_t any_present = 0; + boolean_t injected = 0; (void) nvlist_lookup_string(nvl, FM_SUSPECT_DIAG_CODE, &msgid); (void) nvlist_lookup_uint32(nvl, FM_SUSPECT_FAULT_SZ, &size); (void) nvlist_lookup_boolean_value(nvl, FM_SUSPECT_MESSAGE, ¬_suppressed); + (void) nvlist_lookup_boolean_value(nvl, FM_SUSPECT_INJECTED, &injected); if (size != 0) { (void) nvlist_lookup_nvlist_array(nvl, FM_SUSPECT_FAULT_LIST, @@ -957,7 +971,7 @@ (void) nvlist_dup(nvl, &uurec_p->event, 0); host = find_hostid(nvl); catalog_new_record(uurec_p, msgid, class, fru, asru, - resource, serial, not_suppressed, host); + resource, serial, not_suppressed, host, injected); } static void @@ -1423,15 +1437,17 @@ if (opt_i) { ari_list = uurp->ari_uuid_list; while (ari_list) { - (void) printf("%-15s %-37s %-14s %-9s\n", + (void) printf("%-15s %-37s %-14s %-9s %s\n", format_date(buf, sizeof (buf), uurp->sec), - ari_list->ari_uuid, srp->msgid, srp->severity); + ari_list->ari_uuid, srp->msgid, srp->severity, + srp->injected ? dgettext("FMD", "injected") : ""); ari_list = ari_list->next; } } else { - (void) printf("%-15s %-37s %-14s %-9s\n", + (void) printf("%-15s %-37s %-14s %-9s %s\n", format_date(buf, sizeof (buf), uurp->sec), - uurp->uuid, srp->msgid, srp->severity); + uurp->uuid, srp->msgid, srp->severity, + srp->injected ? dgettext("FMD", "injected") : ""); } if (!summary) @@ -1551,18 +1567,23 @@ slp = slp->next; } while (slp != end); if (status & FM_SUSPECT_NOT_PRESENT) - (void) printf(dgettext("FMD", "not present\n")); + (void) printf(dgettext("FMD", "not present")); else if (status & FM_SUSPECT_FAULTY) - (void) printf(dgettext("FMD", "faulty\n")); + (void) printf(dgettext("FMD", "faulty")); else if (status & FM_SUSPECT_REPLACED) - (void) printf(dgettext("FMD", "replaced\n")); + (void) printf(dgettext("FMD", "replaced")); else if (status & FM_SUSPECT_REPAIRED) (void) printf(dgettext("FMD", - "repair attempted\n")); + "repair attempted")); else if (status & FM_SUSPECT_ACQUITTED) - (void) printf(dgettext("FMD", "acquitted\n")); + (void) printf(dgettext("FMD", "acquitted")); else - (void) printf(dgettext("FMD", "removed\n")); + (void) printf(dgettext("FMD", "removed")); + + if (tp->injected) + (void) printf(dgettext("FMD", " injected\n")); + else + (void) printf(dgettext("FMD", "\n")); slp = tp->status_rec_list; end = slp; @@ -1663,7 +1684,11 @@ msg = ""; break; } - (void) printf("%-69s %s\n", tp->resource, msg); + (void) printf("%-69s %s", tp->resource, msg); + if (tp->injected) + (void) printf(dgettext("FMD", " injected\n")); + else + (void) printf(dgettext("FMD", "\n")); } tp = tp->next; if (tp == status_asru_list) diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/Makefile.fmd --- a/usr/src/cmd/fm/fmd/Makefile.fmd Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/Makefile.fmd Mon Nov 02 09:11:35 2009 -0800 @@ -104,7 +104,7 @@ ROOTHDRS = $(HDRS:%=$(ROOTHDIR)/%) $(ROOTHDRS) := FILEMODE = 0644 -$(ROOTVSUB) := DIRMODE = 0700 +$(ROOTVSUB) := DIRMODE = 0755 $(ROOTMANIFEST) := FILEMODE = 0444 $(NOT_RELEASE_BUILD)CPPFLAGS += -DDEBUG diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd.c --- a/usr/src/cmd/fm/fmd/common/fmd.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd.c Mon Nov 02 09:11:35 2009 -0800 @@ -231,8 +231,8 @@ { "product_sn", &fmd_conf_string, _fmd_psn }, /* product serial number */ { "chassis", &fmd_conf_string, _fmd_csn }, /* chassis serial number */ { "ckpt.dir", &fmd_conf_string, "var/fm/fmd/ckpt" }, /* ckpt directory path */ -{ "ckpt.dirmode", &fmd_conf_int32, "0700" }, /* ckpt directory perm mode */ -{ "ckpt.mode", &fmd_conf_int32, "0400" }, /* ckpt file perm mode */ +{ "ckpt.dirmode", &fmd_conf_int32, "0755" }, /* ckpt directory perm mode */ +{ "ckpt.mode", &fmd_conf_int32, "0644" }, /* ckpt file perm mode */ { "ckpt.restore", &fmd_conf_bool, "true" }, /* restore checkpoints? */ { "ckpt.save", &fmd_conf_bool, "true" }, /* save checkpoints? */ { "ckpt.zero", &fmd_conf_bool, "false" }, /* zero checkpoints on start? */ diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_asru.c --- a/usr/src/cmd/fm/fmd/common/fmd_asru.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_asru.c Mon Nov 02 09:11:35 2009 -0800 @@ -454,6 +454,7 @@ char *class; nvlist_t *rsrc; int err; + boolean_t injected; /* * Extract the most recent values of 'faulty' from the event log. @@ -497,6 +498,9 @@ case_code); fmd_case_hold(cp); fmd_module_unlock(fmd.d_rmod); + if (nvlist_lookup_boolean_value(nvl, FM_SUSPECT_INJECTED, + &injected) == 0 && injected) + fmd_case_set_injected(cp); if (nvlist_lookup_int64_array(nvl, FM_SUSPECT_DIAG_TIME, &diag_time, &nelem) == 0 && nelem >= 2) fmd_case_settime(cp, diag_time[0], diag_time[1]); @@ -1529,7 +1533,7 @@ alp->al_asru_fmri, cip->ci_uuid, cip->ci_code, faulty, unusable, message, alp->al_event, &cip->ci_tv, repaired, replaced, acquitted, cip->ci_state == FMD_CASE_RESOLVED, cip->ci_diag_de == NULL ? - cip->ci_mod->mod_fmri : cip->ci_diag_de); + cip->ci_mod->mod_fmri : cip->ci_diag_de, cip->ci_injected == 1); (void) nvlist_lookup_string(nvl, FM_CLASS, &class); e = fmd_event_create(FMD_EVT_PROTOCOL, FMD_HRT_NOW, nvl, class); diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_case.c --- a/usr/src/cmd/fm/fmd/common/fmd_case.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_case.c Mon Nov 02 09:11:35 2009 -0800 @@ -480,7 +480,7 @@ */ nvl = fmd_protocol_list(class, cip->ci_diag_de == NULL ? cip->ci_mod->mod_fmri : cip->ci_diag_de, cip->ci_uuid, code, count, - nva, ba, msg, &cip->ci_tv); + nva, ba, msg, &cip->ci_tv, cip->ci_injected); (void) pthread_mutex_unlock(&cip->ci_lock); return (nvl); @@ -1607,6 +1607,7 @@ fmd_case_item_t *cit; uint_t state; int new; + boolean_t injected; (void) pthread_mutex_lock(&cip->ci_lock); @@ -1635,6 +1636,10 @@ cit = fmd_alloc(sizeof (fmd_case_item_t), FMD_SLEEP); fmd_event_hold(ep); + if (nvlist_lookup_boolean_value(((fmd_event_impl_t *)ep)->ev_nvl, + "__injected", &injected) == 0 && injected) + fmd_case_set_injected(cp); + cit->cit_next = cip->ci_items; cit->cit_event = ep; @@ -2389,6 +2394,12 @@ } void +fmd_case_set_injected(fmd_case_t *cp) +{ + ((fmd_case_impl_t *)cp)->ci_injected = 1; +} + +void fmd_case_set_de_fmri(fmd_case_t *cp, nvlist_t *nvl) { fmd_case_impl_t *cip = (fmd_case_impl_t *)cp; @@ -2453,6 +2464,8 @@ TRACE((FMD_DBG_CASE, "replay sending list.resolved %s", cip->ci_uuid)); fmd_case_publish(cp, FMD_CASE_RESOLVED); + fmd_asru_hash_apply_by_case(fmd.d_asrus, cp, + fmd_asru_log_resolved, NULL); cip->ci_flags |= FMD_CF_RES_CMPL; } else { TRACE((FMD_DBG_CASE, "replay sending list.repaired %s", diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_case.h --- a/usr/src/cmd/fm/fmd/common/fmd_case.h Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_case.h Mon Nov 02 09:11:35 2009 -0800 @@ -78,6 +78,7 @@ fmd_buf_hash_t ci_bufs; /* hash of bufs associated with case */ struct timeval ci_tv; /* time of original diagnosis */ int ci_tv_valid; /* time of original diagnosis valid */ + int ci_injected; /* was the fault injected */ } fmd_case_impl_t; #define FMD_CASE_CURRENT -1u /* flag for current state */ @@ -150,6 +151,7 @@ extern void fmd_case_settime(fmd_case_t *, time_t, suseconds_t); extern void fmd_case_setcode(fmd_case_t *, char *); extern void fmd_case_set_de_fmri(fmd_case_t *, nvlist_t *); +extern void fmd_case_set_injected(fmd_case_t *); extern void fmd_case_update_status(fmd_case_t *, uint8_t *, uint8_t *, uint8_t *); extern void fmd_case_update_containees(fmd_case_t *); diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_protocol.c --- a/usr/src/cmd/fm/fmd/common/fmd_protocol.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_protocol.c Mon Nov 02 09:11:35 2009 -0800 @@ -142,7 +142,7 @@ nvlist_t * fmd_protocol_list(const char *class, nvlist_t *de_fmri, const char *uuid, const char *code, uint_t argc, nvlist_t **argv, uint8_t *flagv, int domsg, - struct timeval *tvp) + struct timeval *tvp, int injected) { int64_t tod[2]; nvlist_t *nvl; @@ -164,6 +164,10 @@ err |= nvlist_add_nvlist(nvl, FM_SUSPECT_DE, de_fmri); err |= nvlist_add_uint32(nvl, FM_SUSPECT_FAULT_SZ, argc); + if (injected) + err |= nvlist_add_boolean_value(nvl, FM_SUSPECT_INJECTED, + B_TRUE); + if (!domsg) { err |= nvlist_add_boolean_value(nvl, FM_SUSPECT_MESSAGE, B_FALSE); @@ -206,7 +210,8 @@ nvlist_t *fmri, const char *uuid, const char *code, boolean_t faulty, boolean_t unusable, boolean_t message, nvlist_t *event, struct timeval *tvp, boolean_t repaired, boolean_t replaced, - boolean_t acquitted, boolean_t resolved, nvlist_t *diag_de) + boolean_t acquitted, boolean_t resolved, nvlist_t *diag_de, + boolean_t injected) { nvlist_t *nvl; int64_t tod[2]; @@ -240,6 +245,9 @@ if (diag_de != NULL) err |= nvlist_add_nvlist(nvl, FM_SUSPECT_DE, diag_de); + if (injected) + err |= nvlist_add_boolean_value(nvl, FM_SUSPECT_INJECTED, + B_TRUE); if (event != NULL) err |= nvlist_add_nvlist(nvl, FM_RSRC_ASRU_EVENT, event); diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_protocol.h --- a/usr/src/cmd/fm/fmd/common/fmd_protocol.h Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_protocol.h Mon Nov 02 09:11:35 2009 -0800 @@ -71,10 +71,11 @@ uint8_t, nvlist_t *, nvlist_t *, nvlist_t *, const char *); extern nvlist_t *fmd_protocol_list(const char *, nvlist_t *, const char *, const char *, uint_t, nvlist_t **, uint8_t *, int, - struct timeval *); + struct timeval *, int); extern nvlist_t *fmd_protocol_rsrc_asru(const char *, nvlist_t *, const char *, const char *, boolean_t, boolean_t, boolean_t, nvlist_t *, - struct timeval *m, boolean_t, boolean_t, boolean_t, boolean_t, nvlist_t *); + struct timeval *m, boolean_t, boolean_t, boolean_t, boolean_t, nvlist_t *, + boolean_t); extern nvlist_t *fmd_protocol_fmderror(int, const char *, va_list); extern nvlist_t *fmd_protocol_moderror(struct fmd_module *, int, const char *); extern nvlist_t *fmd_protocol_xprt_ctl(struct fmd_module *, diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmd/common/fmd_xprt.c --- a/usr/src/cmd/fm/fmd/common/fmd_xprt.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmd/common/fmd_xprt.c Mon Nov 02 09:11:35 2009 -0800 @@ -1063,6 +1063,7 @@ fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp; fmd_case_t *cp; uint_t nelem = 0, nelem2 = 0, i; + boolean_t injected; fmd_module_lock(xip->xi_queue->eq_mod); cp = fmd_case_create(xip->xi_queue->eq_mod, NULL); @@ -1149,6 +1150,13 @@ fmd_case_set_de_fmri(cp, de_fmri_dup); } + /* + * copy injected if present + */ + if (nvlist_lookup_boolean_value(nvl, FM_SUSPECT_INJECTED, + &injected) == 0 && injected) + fmd_case_set_injected(cp); + fmd_case_transition(cp, FMD_CASE_SOLVED, FMD_CF_SOLVED); fmd_module_unlock(xip->xi_queue->eq_mod); } @@ -1182,6 +1190,7 @@ fmd_case_t *cp; fmd_case_impl_t *cip; int need_update = 0; + boolean_t injected; if (nvlist_lookup_string(nvl, FM_SUSPECT_UUID, &uuid) != 0) return; @@ -1363,6 +1372,13 @@ } /* + * copy injected if present + */ + if (nvlist_lookup_boolean_value(nvl, FM_SUSPECT_INJECTED, + &injected) == 0 && injected) + fmd_case_set_injected(cp); + + /* * Transition to solved. This will log the suspect list and create * the resource cache entries. */ diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmdump/common/asru.c --- a/usr/src/cmd/fm/fmdump/common/asru.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmdump/common/asru.c Mon Nov 02 09:11:35 2009 -0800 @@ -69,10 +69,31 @@ return (0); } +/*ARGSUSED*/ static int asru_verb2(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) { - (void) asru_verb1(lp, rp, fp); + char *uuid = "-"; + boolean_t f = 0, u = 0; + char buf[32], state[32]; + + (void) nvlist_lookup_string(rp->rec_nvl, FM_RSRC_ASRU_UUID, &uuid); + (void) nvlist_lookup_boolean_value(rp->rec_nvl, + FM_RSRC_ASRU_FAULTY, &f); + (void) nvlist_lookup_boolean_value(rp->rec_nvl, + FM_RSRC_ASRU_UNUSABLE, &u); + + state[0] = '\0'; + + if (f) + (void) strcat(state, ",faulty"); + if (u) + (void) strcat(state, ",unusable"); + if (!f && !u) + (void) strcat(state, ",ok"); + + fmdump_printf(fp, "%-20s.%9.9llu %-36s %s\n", + fmdump_year(buf, sizeof (buf), rp), rp->rec_nsec, uuid, state + 1); nvlist_print(fp, rp->rec_nvl); fmdump_printf(fp, "\n"); @@ -89,7 +110,7 @@ "TIME UUID STATE", (fmd_log_rec_f *)asru_verb1 }, { -"TIME UUID STATE", +"TIME UUID STATE", (fmd_log_rec_f *)asru_verb2 }, { NULL, NULL diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmdump/common/fault.c --- a/usr/src/cmd/fm/fmdump/common/fault.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmdump/common/fault.c Mon Nov 02 09:11:35 2009 -0800 @@ -141,11 +141,31 @@ flt_verb2(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) { const struct fmdump_fmt *efp = &fmdump_err_ops.do_formats[FMDUMP_VERB1]; - const struct fmdump_fmt *ffp = &fmdump_flt_ops.do_formats[FMDUMP_VERB1]; + const struct fmdump_fmt *ffp = &fmdump_flt_ops.do_formats[FMDUMP_VERB2]; uint_t i; + char buf[32], str[32]; + char *class = NULL, *uuid = "-", *code = "-"; + + (void) nvlist_lookup_string(rp->rec_nvl, FM_SUSPECT_UUID, &uuid); + (void) nvlist_lookup_string(rp->rec_nvl, FM_SUSPECT_DIAG_CODE, &code); + + (void) nvlist_lookup_string(rp->rec_nvl, FM_CLASS, &class); + if (class != NULL && strcmp(class, FM_LIST_REPAIRED_CLASS) == 0) { + (void) snprintf(str, sizeof (str), "%s %s", code, "Repaired"); + code = str; + } + if (class != NULL && strcmp(class, FM_LIST_RESOLVED_CLASS) == 0) { + (void) snprintf(str, sizeof (str), "%s %s", code, "Resolved"); + code = str; + } + if (class != NULL && strcmp(class, FM_LIST_UPDATED_CLASS) == 0) { + (void) snprintf(str, sizeof (str), "%s %s", code, "Updated"); + code = str; + } fmdump_printf(fp, "%s\n", ffp->do_hdr); - (void) flt_short(lp, rp, fp); + fmdump_printf(fp, "%-20s.%9.9llu %-32s %s\n", + fmdump_year(buf, sizeof (buf), rp), rp->rec_nsec, uuid, code); if (rp->rec_nrefs != 0) fmdump_printf(fp, "\n %s\n", efp->do_hdr); @@ -216,7 +236,8 @@ "TIME UUID SUNW-MSG-ID", (fmd_log_rec_f *)flt_verb1 }, { -NULL, +"TIME UUID" +" SUNW-MSG-ID", (fmd_log_rec_f *)flt_verb2 }, { NULL, diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fmdump/common/fmdump.c --- a/usr/src/cmd/fm/fmdump/common/fmdump.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fmdump/common/fmdump.c Mon Nov 02 09:11:35 2009 -0800 @@ -730,7 +730,7 @@ if (iflags & FMD_LOG_XITER_OFFS) fmdump_printf(arg.da_fp, "%16s ", "OFFSET"); - if (arg.da_fmt->do_hdr) + if (arg.da_fmt->do_hdr && !(opt_V && ops == &fmdump_flt_ops)) fmdump_printf(arg.da_fp, "%s\n", arg.da_fmt->do_hdr); if (opt_e && opt_u) { diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/fm/fminject/common/inj_cmds.c --- a/usr/src/cmd/fm/fminject/common/inj_cmds.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/fm/fminject/common/inj_cmds.c Mon Nov 02 09:11:35 2009 -0800 @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -21,12 +20,10 @@ */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* * The "program" executed by the injector consists of a tree of commands. * Routines in this file build and execute said command tree. @@ -191,6 +188,10 @@ (void) fflush(stdout); } + if ((errno = nvlist_add_boolean_value(ev->defn_nvl, "__injected", + 1)) != 0) + warn("failed to add __injected to %s", ev->defn_name); + if (ev->defn_decl && (ev->defn_decl->decl_flags & DECL_F_AUTOENA) && (errno = nvlist_add_uint64(ev->defn_nvl, "ena", inj_ena())) != 0) warn("failed to add ena to %s", ev->defn_name); diff -r ac35db8a7412 -r eb060666c73f usr/src/cmd/syseventd/daemons/syseventd/syseventd.c --- a/usr/src/cmd/syseventd/daemons/syseventd/syseventd.c Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/cmd/syseventd/daemons/syseventd/syseventd.c Mon Nov 02 09:11:35 2009 -0800 @@ -696,7 +696,6 @@ d_pkg->completion_state = SE_OUTSTANDING; scp->eventq = eventq->next; free(eventq); - eventq = scp->eventq; (void) mutex_unlock(&scp->client_lock); @@ -775,6 +774,7 @@ (void) sema_post(d_pkg->completion_sema); syseventd_print(3, "Completed delivery with " "error %d\n", error); + eventq = scp->eventq; } syseventd_print(3, "No more events to process for client %d\n", diff -r ac35db8a7412 -r eb060666c73f usr/src/pkgdefs/SUNWfmdr/prototype_com --- a/usr/src/pkgdefs/SUNWfmdr/prototype_com Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/pkgdefs/SUNWfmdr/prototype_com Mon Nov 02 09:11:35 2009 -0800 @@ -43,6 +43,6 @@ f none kernel/drv/fm.conf 644 root sys d none var/fm 755 root sys d none var/fm/fmd 755 root sys -d none var/fm/fmd/ckpt 700 root sys -d none var/fm/fmd/rsrc 700 root sys -d none var/fm/fmd/xprt 700 root sys +d none var/fm/fmd/ckpt 755 root sys +d none var/fm/fmd/rsrc 755 root sys +d none var/fm/fmd/xprt 755 root sys diff -r ac35db8a7412 -r eb060666c73f usr/src/uts/common/sys/fm/protocol.h --- a/usr/src/uts/common/sys/fm/protocol.h Mon Nov 02 06:49:25 2009 -0800 +++ b/usr/src/uts/common/sys/fm/protocol.h Mon Nov 02 09:11:35 2009 -0800 @@ -83,6 +83,7 @@ #define FM_SUSPECT_FAULT_LIST "fault-list" #define FM_SUSPECT_FAULT_SZ "fault-list-sz" #define FM_SUSPECT_FAULT_STATUS "fault-status" +#define FM_SUSPECT_INJECTED "__injected" #define FM_SUSPECT_MESSAGE "message" #define FM_SUSPECT_RETIRE "retire" #define FM_SUSPECT_RESPONSE "response"