summaryrefslogtreecommitdiff
path: root/sys/dev/mxge
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2011-04-07 13:49:44 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2011-04-07 13:49:44 +0000
commit534e6f47c1401590fde142109aa19ef574b24d18 (patch)
treee4cba06d8921115a9faa75e3d51ac73136fc2e51 /sys/dev/mxge
parent5e7d0e6482a85828b7a95e5198275128fc8f4880 (diff)
Notes
Diffstat (limited to 'sys/dev/mxge')
-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);