• Moore, Eric's avatar
    [SCSI] - fusion - mptfc bug fix's to prevent deadlock situations · 65207fed
    Moore, Eric authored
    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: default avatarMichael Reed <mdr@sgi.com>
    Signed-off-by: default avatarEric Moore <Eric.Moore@lsil.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
    65207fed
mptbase.h 32.6 KB