diff options
author | ken <ken@FreeBSD.org> | 2011-02-18 17:01:57 +0000 |
---|---|---|
committer | ken <ken@FreeBSD.org> | 2011-02-18 17:01:57 +0000 |
commit | dca393346004d061528b3c8320049e102463de0e (patch) | |
tree | bd799fca94d3cd43af78a2fad57d713c42c796ff /sys/dev/mps/mps.c | |
parent | 2e06507130e4bf73b875ec54347ba4e3cde77adc (diff) | |
download | FreeBSD-src-dca393346004d061528b3c8320049e102463de0e.zip FreeBSD-src-dca393346004d061528b3c8320049e102463de0e.tar.gz |
In the MPS driver, during device removal processing, don't assume that
the controller firmware will return all of our commands. Instead, keep
track of outstanding I/Os and return them to CAM once device removal
processing completes.
mpsvar.h: Declare the new "io_list" in the mps_softc.
mps.c: Initialize the new "io_list" in the mps softc.
mps_sas.c: o Track SCSI I/O requests on the io_list from the
time of mpssas_action() through mpssas_scsiio_complete().
o Zero out the request structures used for device
removal commands prior to filling them out.
o Once the target reset task management function completes
during device removal processing, assume any SCSI I/O
commands that are still oustanding will never return
from the controller, and process them manually.
Submitted by: gibbs
MFC after: 3 days
Diffstat (limited to 'sys/dev/mps/mps.c')
-rw-r--r-- | sys/dev/mps/mps.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/dev/mps/mps.c b/sys/dev/mps/mps.c index 3780fc9..34bafa4 100644 --- a/sys/dev/mps/mps.c +++ b/sys/dev/mps/mps.c @@ -898,6 +898,7 @@ mps_attach(struct mps_softc *sc) TAILQ_INIT(&sc->req_list); TAILQ_INIT(&sc->chain_list); TAILQ_INIT(&sc->tm_list); + TAILQ_INIT(&sc->io_list); if (((error = mps_alloc_queues(sc)) != 0) || ((error = mps_alloc_replies(sc)) != 0) || |