net: tftpboot: clear timeout_count on every successful block
authorMikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Wed, 1 Jan 2025 03:20:16 +0000 (06:20 +0300)
committerTom Rini <trini@konsulko.com>
Wed, 1 Jan 2025 20:35:46 +0000 (14:35 -0600)
We have a some boards that rarely starts networking abnormally, so there are
many timeouts during file transfer. In the same time there is a normal transfer
between timeouts. In this case we can continue transfer (instead of connection
aborting) by just clearing timeout counter on every successful block.

This patch does not affect the case when several timeouts happen one after
another. The transfer will be aborted. Thus the transfer will be
continued in the case of unstable link, but will be aborted in the case
of inaccessible server.

Feature downside: it may greatly slowdown (instead of abort) file transfer
in the case of unstable link.

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
net/tftp.c

index 704b20b..8f94820 100644 (file)
@@ -498,6 +498,7 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                                                tftp_state = STATE_DATA;
                                                tftp_remote_port = src;
                                        }
+                                       timeout_count = 0;
                                        tftp_send(); /* Send next data block */
                                }
                        }
@@ -657,6 +658,7 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                        net_set_state(NETLOOP_FAIL);
                        break;
                }
+               timeout_count = 0;
 
                if (len < tftp_block_size) {
                        tftp_send();