Blame SOURCES/0181-tcp-ack-when-we-get-an-OOO-lost-packet.patch
|
|
ecb9bb |
From 66804a1e21978713902da654ec890574efe25e7d Mon Sep 17 00:00:00 2001
|
|
|
ecb9bb |
From: Josef Bacik <jbacik@fb.com>
|
|
|
ecb9bb |
Date: Wed, 12 Aug 2015 08:16:22 -0700
|
|
|
23d2ea |
Subject: [PATCH 181/198] tcp: ack when we get an OOO/lost packet
|
|
|
ecb9bb |
|
|
|
ecb9bb |
While adding tcp window scaling support I was finding that I'd get some packet
|
|
|
ecb9bb |
loss or reordering when transferring from large distances and grub would just
|
|
|
ecb9bb |
timeout. This is because we weren't ack'ing when we got our OOO packet, so the
|
|
|
ecb9bb |
sender didn't know it needed to retransmit anything, so eventually it would fill
|
|
|
ecb9bb |
the window and stop transmitting, and we'd time out. Fix this by ACK'ing when
|
|
|
ecb9bb |
we don't find our next sequence numbered packet. With this fix I no longer time
|
|
|
ecb9bb |
out. Thanks,
|
|
|
ecb9bb |
|
|
|
ecb9bb |
Signed-off-by: Josef Bacik <jbacik@fb.com>
|
|
|
ecb9bb |
---
|
|
|
ecb9bb |
grub-core/net/tcp.c | 5 ++++-
|
|
|
ecb9bb |
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
ecb9bb |
|
|
|
ecb9bb |
diff --git a/grub-core/net/tcp.c b/grub-core/net/tcp.c
|
|
|
ecb9bb |
index 2077f55..fa29a2a 100644
|
|
|
ecb9bb |
--- a/grub-core/net/tcp.c
|
|
|
ecb9bb |
+++ b/grub-core/net/tcp.c
|
|
|
ecb9bb |
@@ -882,7 +882,10 @@ grub_net_recv_tcp_packet (struct grub_net_buff *nb,
|
|
|
ecb9bb |
grub_priority_queue_pop (sock->pq);
|
|
|
ecb9bb |
}
|
|
|
ecb9bb |
if (grub_be_to_cpu32 (tcph->seqnr) != sock->their_cur_seq)
|
|
|
ecb9bb |
- return GRUB_ERR_NONE;
|
|
|
ecb9bb |
+ {
|
|
|
ecb9bb |
+ ack (sock);
|
|
|
ecb9bb |
+ return GRUB_ERR_NONE;
|
|
|
ecb9bb |
+ }
|
|
|
ecb9bb |
while (1)
|
|
|
ecb9bb |
{
|
|
|
ecb9bb |
nb_top_p = grub_priority_queue_top (sock->pq);
|
|
|
ecb9bb |
--
|
|
|
23d2ea |
2.7.4
|
|
|
ecb9bb |
|