Print this page
NEX-17944 HBA drivers don't need the redundant devfs_clean step
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
NEX-7908 useless assert in pvscsi_remove_from_queue()
Reviewed by: Dan Fields <dan.fields@nexenta.com>
NEX-6869 pvscsi`pvscsi_bus_config uses wrong base while configuring targets
NEX-6870 pvscsi panics while simultaneously deleting large number of disks
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
NEX-6382 rework pvscsi
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
re #10804 rb3697 Mem-leaks in libsldap (fix lint)
re #10804 rb3697 Mem-leaks in libsldap
Modifications to clean up gcc4 warnings for both with- and without-
closed nza-kernel builds.
re #10787 rb3347 Integrate pvscsi driver to nza-kernel
        
*** 8,27 ****
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2016 Nexenta Systems, Inc.
   */
  
  #include <sys/atomic.h>
  #include <sys/cmn_err.h>
  #include <sys/conf.h>
  #include <sys/cpuvar.h>
  #include <sys/ddi.h>
  #include <sys/errno.h>
- #include <sys/fs/dv_node.h>
  #include <sys/kmem.h>
  #include <sys/kmem_impl.h>
  #include <sys/list.h>
  #include <sys/modctl.h>
  #include <sys/pci.h>
--- 8,26 ----
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2018 Nexenta Systems, Inc.
   */
  
  #include <sys/atomic.h>
  #include <sys/cmn_err.h>
  #include <sys/conf.h>
  #include <sys/cpuvar.h>
  #include <sys/ddi.h>
  #include <sys/errno.h>
  #include <sys/kmem.h>
  #include <sys/kmem_impl.h>
  #include <sys/list.h>
  #include <sys/modctl.h>
  #include <sys/pci.h>
*** 122,135 ****
  {
          pvscsi_softc_t  *pvs = cmd->cmd_pvs;
  
          ASSERT(pvs != NULL);
          ASSERT(mutex_owned(&pvs->mutex));
-         ASSERT(list_link_active(&cmd->cmd_queue_node));
-         ASSERT(pvs->cmd_queue_len > 0);
  
          if (list_link_active(&cmd->cmd_queue_node)) {
                  list_remove(&pvs->cmd_queue, cmd);
                  pvs->cmd_queue_len--;
          }
  }
  
--- 121,133 ----
  {
          pvscsi_softc_t  *pvs = cmd->cmd_pvs;
  
          ASSERT(pvs != NULL);
          ASSERT(mutex_owned(&pvs->mutex));
  
          if (list_link_active(&cmd->cmd_queue_node)) {
+                 ASSERT(pvs->cmd_queue_len > 0);
                  list_remove(&pvs->cmd_queue, cmd);
                  pvs->cmd_queue_len--;
          }
  }
  
*** 358,381 ****
                          break;
          }
  
          if (devnode != NULL) {
                  if (inqrc != 0) {
!                         /* Target disappeared, drop devnode */
!                         if (i_ddi_devi_attached(devnode->pdip)) {
!                                 char    *devname;
!                                 /* Get full devname */
!                                 devname = kmem_alloc(MAXPATHLEN, KM_SLEEP);
!                                 (void) ddi_deviname(devnode->pdip, devname);
!                                 /* Clean cache and name */
!                                 (void) devfs_clean(devnode->parent, devname + 1,
!                                     DV_CLEAN_FORCE);
!                                 kmem_free(devname, MAXPATHLEN);
!                         }
! 
!                         (void) ndi_devi_offline(devnode->pdip, NDI_DEVI_REMOVE);
! 
                          list_remove(&pvs->devnodes, devnode);
                          kmem_free(devnode, sizeof (*devnode));
                  } else if (childp != NULL) {
                          /* Target exists */
                          *childp = devnode->pdip;
--- 356,367 ----
                          break;
          }
  
          if (devnode != NULL) {
                  if (inqrc != 0) {
!                         (void) ndi_devi_offline(devnode->pdip,
!                             NDI_DEVFS_CLEAN | NDI_DEVI_REMOVE);
                          list_remove(&pvs->devnodes, devnode);
                          kmem_free(devnode, sizeof (*devnode));
                  } else if (childp != NULL) {
                          /* Target exists */
                          *childp = devnode->pdip;