aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2011-04-28 14:55:34 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2011-04-28 14:55:34 +0000
commit41318a8295070c43735f1e99676323f7972088a9 (patch)
tree5d273ab61ca5915e2e5d5a591c64f706bae39858
parent674b09dbbf416cc34a3fed5c1bb980195dca515c (diff)
Notes
-rw-r--r--sys/dev/mxge/mxge_lro.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/mxge/mxge_lro.c b/sys/dev/mxge/mxge_lro.c
index 228e22bb721b..b3130592f7a2 100644
--- a/sys/dev/mxge/mxge_lro.c
+++ b/sys/dev/mxge/mxge_lro.c
@@ -237,8 +237,10 @@ mxge_lro_rx(struct mxge_slice_state *ss, struct mbuf *m_head, uint32_t csum)
lro->dest_ip == ip->ip_dst.s_addr) {
/* Try to append it */
- if (__predict_false(seq != lro->next_seq)) {
- /* out of order packet */
+ if (__predict_false(seq != lro->next_seq ||
+ (tcp_data_len == 0 &&
+ lro->ack_seq == tcp->th_ack))) {
+ /* out of order packet or dup ack */
SLIST_REMOVE(&ss->lro_active, lro,
lro_entry, next);
mxge_lro_flush(ss, lro);