• Eddie Wai's avatar
    [SCSI] bnx2fc: Fixed a SCSI CMD cmpl race condition between ABTS and CLEANUP · 21837896
    Eddie Wai authored
    In the case when a SCSI_CMD times out, bnx2fc will initiate the sending of the
    ABTS.  However, if the SCSI layer's SCSI command timer also times out, it'll
    instantiate a task abort of the same xid.
    
    The race condition this patch tries to fix is as follows:
    
    SCSI_CMD timeout (20s)
    thread 1                   thread 2
    send ABTS
    rx ABTS cmpl
                               task abort_eh
                               explicit LOGO since ABTS was engaged
                               CLEANUP cmpl
    SCSI_CMD cmpl (ABTS cmpl)
    instantiate RRQ
    wait 10s
    attempt to send RRQ (because of LOGO, it wouldn't continue)
    
    Note that there is no call to scsi_done for this SCSI_CMD cmpletion
    in this path.
    
    The patch changes the path of execution to call scsi_done immediately
    instead of instantiating the RRQ.
    Signed-off-by: default avatarEddie Wai <eddie.wai@broadcom.com>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
    21837896
bnx2fc_io.c 54.8 KB