[SCSI] fcoe: fix handling of pending queue, prevent out of order frames (v3)
authorChris Leech <christopher.leech@intel.com>
Fri, 27 Feb 2009 18:56:32 +0000 (10:56 -0800)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Tue, 10 Mar 2009 14:09:40 +0000 (09:09 -0500)
commit55c8bafba549e3e82f6999db8c5a62fc3c255c14
tree3ae4d7375fc1c5faaa16cc70277ca24e33a6f9b0
parentc826a3145736e3baabebccfd0aecfbb6dae059f2
[SCSI] fcoe: fix handling of pending queue, prevent out of order frames (v3)

In fcoe_check_wait_queue() the queue length could temporarily drop to 0,
before the last frame was successfully sent.  This resulted in out of order
data frames within a single sequence, leading to IO timeout errors.

This builds on the approach from Vasu Dev to only fix the queue management in
fcoe_check_wait_queue, where my first patch added locking to the transmit
path even when the pending queue was not in use.

This patch continues to use fcoe_pending_queue.qlen instead of introducing a
new length counter, but takes precautions to ensure it never drops to 0 before
the final frame in the queue has successfully been passed to the netdev qdisc
layer.  It also includes some cleanup of fcoe_check_wait_queue and removes the
fcoe_insert_wait_queue(_head) wrapper functions.

Signed-off-by: Chris Leech <christopher.leech@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/fcoe/libfcoe.c