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