[SCSI] - fusion - mptfc bug fix's to prevent deadlock situations
authorMoore, Eric <Eric.Moore@lsil.com>
Fri, 21 Apr 2006 22:14:35 +0000 (16:14 -0600)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Tue, 25 Apr 2006 23:07:32 +0000 (18:07 -0500)
commit65207fedcf57dcb854a3ebb9da43c745106fe8d5
treefce7ca7526448abd0be4ae59423d11fb842611e5
parentbd23e94cd70f18700fc366451a8f1427e56ed137
[SCSI] - fusion - mptfc bug fix's to prevent deadlock situations

mptbase.h

bump version number to 3.03.09

remove unneeded flags
define workq and remove old fc specific locks

mptbase.c

initialize new lock and don't initialize two removed locks

mptscsih.c

when firmware reports target is no longer there, return
        DID_REQUEUE for fc hosts so that i/o doesn't get killed until
        the transport has an opportunity to manage the loss via its
        dev loss timer

when the "eh_abort" routine is called, check to see if the
        driver has the command or not before looking to see if a reset
        is pending.  James Smart and I talked about this and believe
        that the API for this routine is: if driver doesn't have
        command, return SUCCESS.  This change helps prevent a target
        from being taken offline.  SUCCESS is returned because it's
        likely that the command completed after error recovery timed
        it out but before it could be aborted.

provide a routine to queue work to newly created workq, and
        use it.

remove "ioc" from mptscsih_abort() it was only used one time.
the other references were via hd->ioc, so I just moved it....
net change in references to ioc via hd->ioc is zero

move hd->resetPending test and hd->timeouts increment to after
the test for whether the command to be aborted remains known
to the driver

Make certain that the workq exists before queuing work to it.

mptfc.c

no longer need to lock rport data structures as I was able to
single thread the code!  I fixed up the debug code to
eliminate compilation messages due to type mismatch in the
printk.  Got rid of some no longer needed rport flags.
Initialize and destroy the workq used for the rescan work.

simplify the logic regarding the increment of
        fc_rescan_work_count.  use post increment and test for zero
        vs. pre increment and test for one; eliminate work_count
        variable: queue_work can be called with the work_lock held as
        it doesn't sleep

Signed-off-by: Michael Reed <mdr@sgi.com>
Signed-off-by: Eric Moore <Eric.Moore@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptscsih.c