Print this page
NEX-2787 Multiple comstar / fibre channel / qlt threads stuck waiting on locks with a spinning interrupt thread
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Approved by: Jean McCormack <jean.mccormack@nexenta.com>
        
*** 18,27 ****
--- 18,28 ----
   *
   * CDDL HEADER END
   */
  /*
   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+  * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
   * Use is subject to license terms.
   */
  
  #include <sys/dditypes.h>
  #include <sys/mdb_modapi.h>
*** 28,37 ****
--- 29,39 ----
  #include <sys/modctl.h>
  #include <sys/sunddi.h>
  #include <sys/lpif.h>
  #include <sys/stmf.h>
  #include <sys/portif.h>
+ #include <sys/list.h>
  #include <stmf_impl.h>
  #include <lun_map.h>
  #include <stmf_state.h>
  
  #include <sys/fct.h>
*** 1103,1114 ****
              != sizeof (struct fct_i_local_port)) {
                  mdb_warn("Unable to read in fct_i_local_port at %p\n", addr);
                  return (DCMD_ERR);
          }
  
!         icmdp = iport.iport_cached_cmdlist;
          while (icmdp) {
                  if (mdb_vread(&icmd, sizeof (struct fct_i_cmd),
                      (uintptr_t)icmdp) == -1) {
                          mdb_warn("failed to read fct_i_cmd at %p", icmdp);
                          return (DCMD_ERR);
                  }
--- 1105,1117 ----
              != sizeof (struct fct_i_local_port)) {
                  mdb_warn("Unable to read in fct_i_local_port at %p\n", addr);
                  return (DCMD_ERR);
          }
  
!         icmdp = list_head(&iport.iport_cached_cmdlist);
          while (icmdp) {
+ 
                  if (mdb_vread(&icmd, sizeof (struct fct_i_cmd),
                      (uintptr_t)icmdp) == -1) {
                          mdb_warn("failed to read fct_i_cmd at %p", icmdp);
                          return (DCMD_ERR);
                  }
*** 1116,1126 ****
                  mdb_printf("%p\n", icmdp);
                  if (verbose) {
                          mdb_printf("  fct cmd: %p\n", icmd.icmd_cmd);
                  }
  
!                 icmdp = icmd.icmd_next;
          }
  
          return (DCMD_OK);
  }
  
--- 1119,1129 ----
                  mdb_printf("%p\n", icmdp);
                  if (verbose) {
                          mdb_printf("  fct cmd: %p\n", icmd.icmd_cmd);
                  }
  
!                 icmdp = list_next(&iport.iport_cached_cmdlist, icmdp);
          }
  
          return (DCMD_OK);
  }