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);
}