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