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