ixgb: fix TX hangs under heavy load
authorAuke Kok <auke-jan.h.kok@intel.com>
Tue, 30 Oct 2007 18:21:50 +0000 (11:21 -0700)
committerJeff Garzik <jeff@garzik.org>
Tue, 30 Oct 2007 18:32:17 +0000 (14:32 -0400)
A merge error occurred where we merged the wrong block here
in version 1.0.120. The right condition for frags is slightly
different then for the skb, so account for the difference properly
and trim the TSO based size right.

Originally part of a fix reported by IBM to fix TSO hangs on
pSeries hardware.

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Cc: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/ixgb/ixgb_main.c

index e564335b4b84a4425c9e8422d81ed497e2b72aa0..3021234b1e173f5653603bcde3998db26ea3abba 100644 (file)
@@ -1321,8 +1321,8 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb,
 
                        /* Workaround for premature desc write-backs
                         * in TSO mode.  Append 4-byte sentinel desc */
-                       if (unlikely(mss && !nr_frags && size == len
-                                    && size > 8))
+                       if (unlikely(mss && (f == (nr_frags - 1))
+                                    && size == len && size > 8))
                                size -= 4;
 
                        buffer_info->length = size;