diff options
| author | Matt Jacob <mjacob@FreeBSD.org> | 2001-06-14 17:13:24 +0000 |
|---|---|---|
| committer | Matt Jacob <mjacob@FreeBSD.org> | 2001-06-14 17:13:24 +0000 |
| commit | cb62bc53d174f72e93cc724d43c0951a35be4e20 (patch) | |
| tree | 5d6ba01421b751dd04a5d15ccd9c19e55261b97f /sys/dev/isp/isp.c | |
| parent | 36fccbcea4cb2652fc1e01e97ccb54a81e943a3a (diff) | |
Notes
Diffstat (limited to 'sys/dev/isp/isp.c')
| -rw-r--r-- | sys/dev/isp/isp.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index 6680fc457e691..5b3090bb2fd0b 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -3347,6 +3347,27 @@ isp_parse_async(struct ispsoftc *isp, int mbox) #ifdef ISP_TARGET_MODE isp_target_async(isp, bus, mbox); #endif + /* + * We've had problems with data corruption occuring on + * commands that complete (with no apparent error) after + * we receive a LIP. This has been observed mostly on + * Local Loop topologies. To be safe, let's just mark + * all active commands as dead. + */ + if (FCPARAM(isp)->isp_topo == TOPO_NL_PORT || + FCPARAM(isp)->isp_topo == TOPO_FL_PORT) { + int i, j; + for (i = j = 0; i < isp->isp_maxcmds; i++) { + XS_T *xs; + xs = isp->isp_xflist[i]; + if (xs != NULL) { + j++; + XS_SETERR(xs, HBA_BUSRESET); + } + } + isp_prt(isp, ISP_LOGERR, + "LIP destroyed %d active commands", j); + } break; case ASYNC_LOOP_UP: |
