Print this page
NEX-1775 scsi_vhci should use f_sym module by default
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Dan Fields <dan.fields@nexenta.com>
        
*** 22,110 ****
  /*
   * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
   */
  
  /*
   * Implementation of "scsi_vhci_f_sym" symmetric failover_ops.
   *
!  * This file was historically meant for only symmetric implementation.  It has
!  * been extended to manage SUN "supported" symmetric controllers. The supported
!  * VID/PID shall be listed in the symmetric_dev_table.
   */
  
  #include <sys/conf.h>
  #include <sys/file.h>
  #include <sys/ddi.h>
  #include <sys/sunddi.h>
  #include <sys/scsi/scsi.h>
  #include <sys/scsi/adapters/scsi_vhci.h>
  
! /* Supported device table entries.  */
! char *symmetric_dev_table[] = {
! /*      "                  111111" */
! /*      "012345670123456789012345" */
! /*      "|-VID--||-----PID------|" */
!                                 /* disks */
!         "IBM     DDYFT",
!         "IBM     IC",
!         "SEAGATE ST",
!                                 /* enclosures */
!         "SUN     SENA",                 /* SES device */
!         "SUN     SESS01",               /* VICOM SVE box */
!         "SUNW    SUNWGS",               /* Daktari enclosure */
!                                 /* arrays */
!         "HITACHI OPEN",                 /* Hitachi storage */
!         "SUN     PSX1000",              /* Pirus Matterhorn */
!         "SUN     SE6920",               /* Pirus */
!         "SUN     SE6940",               /* DSP - Nauset */
!         "SUN     StorEdge 3510",        /* Minnow FC */
!         "SUN     StorEdge 3511",        /* Minnow SATA RAID */
!         "SUN     StorageTek 6920",      /* DSP */
!         "SUN     StorageTek 6940",      /* DSP - Nauset */
!         "SUN     StorageTek NAS",       /* StorageTek NAS */
!         "SUN     MRA300_R",             /* Shamrock - Controller */
!         "SUN     MRA300_E",             /* Shamrock - Expansion */
!         "STEC    ZeusIOPs",             /* Zeus SAS SSD */
  
-         NULL
- };
- 
  /* Failover module plumbing. */
  SCSI_FAILOVER_OP(SFO_NAME_SYM, symmetric);
  
  /* ARGSUSED */
  static int
  symmetric_device_probe(struct scsi_device *sd, struct scsi_inquiry *stdinq,
! void **ctpriv)
  {
!         char    **dt;
! 
!         VHCI_DEBUG(6, (CE_NOTE, NULL, "!inq str: %s\n", stdinq->inq_vid));
!         for (dt = symmetric_dev_table; *dt; dt++)
!                 if (strncmp(stdinq->inq_vid, *dt, strlen(*dt)) == 0)
                          return (SFO_DEVICE_PROBE_VHCI);
  
-         /*
-          * No match, check for generic Sun supported disks:
-          *
-          *      "|-VID--||-----PID------|"
-          *      "012345670123456789012345"
-          *      ".................SUN..G."
-          *      ".................SUN..T."
-          *      ".................SUN...G"
-          *      ".................SUN...T"
-          */
-         if (bcmp(&stdinq->inq_pid[9], "SUN", 3) == 0) {
-                 if ((stdinq->inq_pid[14] == 'G' || stdinq->inq_pid[15] == 'G' ||
-                     stdinq->inq_pid[14] == 'T' || stdinq->inq_pid[15] == 'T') &&
-                     (stdinq->inq_dtype == DTYPE_DIRECT)) {
-                         return (SFO_DEVICE_PROBE_VHCI);
-                 }
-         }
-         if (bcmp(&stdinq->inq_vid[0], "ATA     ", 8) == 0) {
-                 return (SFO_DEVICE_PROBE_VHCI);
-         }
          return (SFO_DEVICE_PROBE_PHCI);
  }
  
  /* ARGSUSED */
  static void
--- 22,60 ----
  /*
   * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
   */
  
  /*
+  * Copyright 2018 Nexenta Systems, Inc.
+  */
+ 
+ /*
   * Implementation of "scsi_vhci_f_sym" symmetric failover_ops.
   *
!  * Currently this module accepts all DTYPE_DIRECT devices.
   */
  
  #include <sys/conf.h>
  #include <sys/file.h>
  #include <sys/ddi.h>
  #include <sys/sunddi.h>
  #include <sys/scsi/scsi.h>
  #include <sys/scsi/adapters/scsi_vhci.h>
  
! char *symmetric_dev_table[] = { NULL };
  
  /* Failover module plumbing. */
  SCSI_FAILOVER_OP(SFO_NAME_SYM, symmetric);
  
  /* ARGSUSED */
  static int
  symmetric_device_probe(struct scsi_device *sd, struct scsi_inquiry *stdinq,
!     void **ctpriv)
  {
!         if (stdinq->inq_dtype == DTYPE_DIRECT)
                          return (SFO_DEVICE_PROBE_VHCI);
  
          return (SFO_DEVICE_PROBE_PHCI);
  }
  
  /* ARGSUSED */
  static void
*** 122,141 ****
          return (0);
  }
  
  /* ARGSUSED */
  static int
! symmetric_path_deactivate(struct scsi_device *sd, char *pathclass,
! void *ctpriv)
  {
          return (0);
  }
  
  /* ARGSUSED */
  static int
  symmetric_path_get_opinfo(struct scsi_device *sd,
! struct scsi_path_opinfo *opinfo, void *ctpriv)
  {
          opinfo->opinfo_rev = OPINFO_REV;
          (void) strcpy(opinfo->opinfo_path_attr, "primary");
          opinfo->opinfo_path_state  = SCSI_PATH_ACTIVE;
          opinfo->opinfo_pswtch_best = 0;         /* N/A */
--- 72,90 ----
          return (0);
  }
  
  /* ARGSUSED */
  static int
! symmetric_path_deactivate(struct scsi_device *sd, char *pathclass, void *ctpriv)
  {
          return (0);
  }
  
  /* ARGSUSED */
  static int
  symmetric_path_get_opinfo(struct scsi_device *sd,
!     struct scsi_path_opinfo *opinfo, void *ctpriv)
  {
          opinfo->opinfo_rev = OPINFO_REV;
          (void) strcpy(opinfo->opinfo_path_attr, "primary");
          opinfo->opinfo_path_state  = SCSI_PATH_ACTIVE;
          opinfo->opinfo_pswtch_best = 0;         /* N/A */
*** 154,165 ****
          return (1);
  }
  
  /* ARGSUSED */
  static int
! symmetric_analyze_sense(struct scsi_device *sd,
! uint8_t *sense, void *ctpriv)
  {
          return (SCSI_SENSE_NOFAILOVER);
  }
  
  /* ARGSUSED */
--- 103,113 ----
          return (1);
  }
  
  /* ARGSUSED */
  static int
! symmetric_analyze_sense(struct scsi_device *sd, uint8_t *sense, void *ctpriv)
  {
          return (SCSI_SENSE_NOFAILOVER);
  }
  
  /* ARGSUSED */