Print this page
NEX-9338 improve the layout of the crash directory (use sys/uuid.h)
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-9338 improve the layout of the crash directory (follow-up)
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-9338 improve the layout of the crash directory
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. All rights reserved. */ /* * Panic software-diagnosis subsidiary *
*** 82,93 **** * we are prepared to wait. */ #include <strings.h> #include <sys/panic.h> - #include <alloca.h> #include <zone.h> #include "../../common/sw.h" #include "panic.h" #define MAX_STRING_LEN 160 --- 83,94 ---- * we are prepared to wait. */ #include <strings.h> #include <sys/panic.h> #include <zone.h> + #include <uuid/uuid.h> #include "../../common/sw.h" #include "panic.h" #define MAX_STRING_LEN 160
*** 194,204 **** static void swde_panic_solve(fmd_hdl_t *hdl, fmd_case_t *cp, nvlist_t *attr, fmd_event_t *ep, boolean_t savecore_success) { ! char *dumpdir, *path, *uuid; nvlist_t *defect, *rsrc; nvpair_t *nvp; int i; /* --- 195,206 ---- static void swde_panic_solve(fmd_hdl_t *hdl, fmd_case_t *cp, nvlist_t *attr, fmd_event_t *ep, boolean_t savecore_success) { ! char path[MAXPATHLEN]; ! char *dumpdir, *uuid; nvlist_t *defect, *rsrc; nvpair_t *nvp; int i; /*
*** 227,252 **** * as duplicates and discard later cases. We can't actually diagnose * the panic to anything specific (e.g., a path to a module and * function/line etc therein). We could pick on a generic * representative such as /kernel/genunix but that could lead * to misunderstanding. So we choose a path based on <dumpdir> ! * and the OS instance UUID - "<dumpdir>/.<os-instance-uuid>". ! * There's no file at that path (*) but no matter. We can't use ! * <dumpdir>/vmdump.N or similar because if savecore is disabled ! * or failed we don't have any file or instance number. ! * ! * (*) Some day it would seem tidier to keep all files to do ! * with a single crash (unix/vmcore/vmdump, analysis output etc) ! * in a distinct directory, and <dumpdir>/.<uuid> seems like a good ! * choice. For compatability we'd symlink into it. So that is ! * another reason for this choice - some day it may exist! */ (void) nvlist_lookup_string(attr, "dumpdir", &dumpdir); (void) nvlist_lookup_string(attr, "os-instance-uuid", &uuid); ! path = alloca(strlen(dumpdir) + 1 + 1 + 36 + 1); ! /* LINTED: E_SEC_SPRINTF_UNBOUNDED_COPY */ ! (void) sprintf(path, "%s/.%s", dumpdir, uuid); rsrc = panic_sw_fmri(hdl, path); defect = fmd_nvl_create_defect(hdl, SW_SUNOS_PANIC_DEFECT, 100, rsrc, NULL, rsrc); nvlist_free(rsrc); --- 229,243 ---- * as duplicates and discard later cases. We can't actually diagnose * the panic to anything specific (e.g., a path to a module and * function/line etc therein). We could pick on a generic * representative such as /kernel/genunix but that could lead * to misunderstanding. So we choose a path based on <dumpdir> ! * and the OS instance UUID - "<dumpdir>/data/<uuid>". */ (void) nvlist_lookup_string(attr, "dumpdir", &dumpdir); (void) nvlist_lookup_string(attr, "os-instance-uuid", &uuid); ! (void) snprintf(path, sizeof (path), "%s/data/%s", dumpdir, uuid); rsrc = panic_sw_fmri(hdl, path); defect = fmd_nvl_create_defect(hdl, SW_SUNOS_PANIC_DEFECT, 100, rsrc, NULL, rsrc); nvlist_free(rsrc);