Print this page
NEX-13190 fmd core dump with assertion failure
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-3829 libtopo ses module unload takes too long
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Dan Fields <dan.fields@nexenta.com>
re #10360 rb4192 Unable to use /usr/lib/fm/fmd/fmtopo to discover SES / drive topology with the Dell MD1200.

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/fm/topo/modules/common/ses/ses.c
          +++ new/usr/src/lib/fm/topo/modules/common/ses/ses.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  24   24   * Copyright 2012 Milan Jurik. All rights reserved.
  25      - * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
       25 + * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
  26   26   * Copyright (c) 2017, Joyent, Inc.
  27   27   */
  28   28  
  29   29  #include <alloca.h>
  30   30  #include <dirent.h>
  31   31  #include <devid.h>
  32   32  #include <fm/libdiskstatus.h>
  33   33  #include <inttypes.h>
  34   34  #include <pthread.h>
  35   35  #include <strings.h>
↓ open down ↓ 974 lines elided ↑ open up ↑
1010 1010      nvlist_t *in, nvlist_t **out)
1011 1011  {
1012 1012          boolean_t present;
1013 1013          ses_node_t *np;
1014 1014          nvlist_t *props, *nvl;
1015 1015          uint64_t status;
1016 1016  
1017 1017          if ((np = ses_node_lock(mod, tn)) == NULL)
1018 1018                  return (-1);
1019 1019  
1020      -        verify((props = ses_node_props(np)) != NULL);
1021      -        verify(nvlist_lookup_uint64(props,
1022      -            SES_PROP_STATUS_CODE, &status) == 0);
     1020 +        /*
     1021 +         * If the SES properties are not there or
     1022 +         * status cannot be determined, continue
     1023 +         * and indicate status is unknown.
     1024 +         */
     1025 +        if (((props = ses_node_props(np)) == NULL) ||
     1026 +            (nvlist_lookup_uint64(props,
     1027 +            SES_PROP_STATUS_CODE, &status) != 0)) {
     1028 +                status = SES_ESC_UNKNOWN;
     1029 +        }
1023 1030  
1024 1031          ses_node_unlock(mod, tn);
1025 1032  
1026 1033          present = (status != SES_ESC_NOT_INSTALLED);
1027 1034  
1028 1035          if (topo_mod_nvalloc(mod, &nvl, NV_UNIQUE_NAME) != 0)
1029 1036                  return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
1030 1037  
1031 1038          if (nvlist_add_uint32(nvl, TOPO_METH_PRESENT_RET,
1032 1039              present) != 0) {
↓ open down ↓ 2658 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX