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