• Vasu Dev's avatar
    [SCSI] fcoe: Out of order tx frames was causing several check condition SCSI status · c826a314
    Vasu Dev authored
    frames followed by these errors in log.
    
    	[sdp] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK
    	[sdp] Sense Key : Aborted Command [current]
    	[sdp] Add. Sense: Data phase error
    
    This was causing some test apps to exit due to write failure under heavy
    load.
    
    This was due to a race around adding and removing tx frame skb in
    fcoe_pending_queue, Chris Leech helped me to find that brief unlocking
    period when pulling skb from fcoe_pending_queue in various contexts
    (fcoe_watchdog and fcoe_xmit) and then adding skb back into fcoe_pending_queue
    up on a failed fcoe_start_io could change skb/tx frame order in
    fcoe_pending_queue. Thanks Chris.
    
    This patch allows only single context to pull skb from fcoe_pending_queue
    at any time to prevent above described ordering issue/race by use of
    fcoe_pending_queue_active flag.
    
    This patch simplified fcoe_watchdog with modified fcoe_check_wait_queue by
    use of FCOE_LOW_QUEUE_DEPTH instead previously used several conditionals
    to clear and set lp->qfull.
    
    I think FCOE_MAX_QUEUE_DEPTH with FCOE_LOW_QUEUE_DEPTH  will work better
    in re/setting lp->qfull and these could be fine tuned for performance.
    Signed-off-by: default avatarVasu Dev <vasu.dev@intel.com>
    Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
    c826a314
libfcoe.h 4.66 KB