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);