summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjfv <jfv@FreeBSD.org>2011-04-07 21:20:26 +0000
committerjfv <jfv@FreeBSD.org>2011-04-07 21:20:26 +0000
commitc71c4180a200f2b31902876626de9f1e92cd0c3a (patch)
tree44b68fb060af8e7592616f29d637235725e9ffca
parent3d0a28924c3bb0c62feba62890983a747ea66adf (diff)
downloadFreeBSD-src-c71c4180a200f2b31902876626de9f1e92cd0c3a.zip
FreeBSD-src-c71c4180a200f2b31902876626de9f1e92cd0c3a.tar.gz
Port of the LRO fix from mxge driver to the generic
LRO code. Thanks to Andrew Gallatin for the change. MFC after: 7 days
-rw-r--r--sys/netinet/tcp_lro.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c
index 971473b..27384c5 100644
--- a/sys/netinet/tcp_lro.c
+++ b/sys/netinet/tcp_lro.c
@@ -279,8 +279,10 @@ tcp_lro_rx(struct lro_ctrl *cntl, 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(&cntl->lro_active, lro,
lro_entry, next);
tcp_lro_flush(cntl, lro);
OpenPOWER on IntegriCloud