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,10 +18,11 @@
  *
  * 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,10 +29,11 @@
 #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,12 +1105,13 @@
             != 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;
+        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,11 +1119,11 @@
                 mdb_printf("%p\n", icmdp);
                 if (verbose) {
                         mdb_printf("  fct cmd: %p\n", icmd.icmd_cmd);
                 }
 
-                icmdp = icmd.icmd_next;
+                icmdp = list_next(&iport.iport_cached_cmdlist, icmdp);
         }
 
         return (DCMD_OK);
 }