git: dfc9c1d4937d - main - loader: tftp: Copy the first block into the cache

From: Emmanuel Vadot <manu_at_FreeBSD.org>
Date: Thu, 30 Dec 2021 15:31:01 UTC
The branch main has been updated by manu:

URL: https://cgit.FreeBSD.org/src/commit/?id=dfc9c1d4937d0e2eab2910665069faba814bca1e

commit dfc9c1d4937d0e2eab2910665069faba814bca1e
Author:     Emmanuel Vadot <manu@FreeBSD.org>
AuthorDate: 2021-12-30 08:47:06 +0000
Commit:     Emmanuel Vadot <manu@FreeBSD.org>
CommitDate: 2021-12-30 15:30:13 +0000

    loader: tftp: Copy the first block into the cache
    
    tftp_open reads the first block so copy it in the cached data.
    If we have more than one block (i.e. we called tftp_read before
    tftp_preload) simply just reset the transfer.
    
    Reported by:    mmel
    Reviewed by:    mmel, tsoome
    MFC after:      2 weeks
    Sponsored by:   Beckhoff Automation GmbH & Co. KG
    Differential Revision:  https://reviews.freebsd.org/D33697
---
 stand/libsa/tftp.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/stand/libsa/tftp.c b/stand/libsa/tftp.c
index 9d1c70236925..c520a9e3b3b1 100644
--- a/stand/libsa/tftp.c
+++ b/stand/libsa/tftp.c
@@ -680,6 +680,13 @@ tftp_preload(struct open_file *f)
 	start = getsecs();
 	printf("Preloading %s ", tftpfile->path);
 #endif
+	if (tftpfile->currblock == 1)
+		bcopy(tftpfile->tftp_hdr->th_data,
+		    cache,
+		    tftpfile->validsize);
+	else
+		tftpfile->currblock = 0;
+
 	while (tftpfile->islastblock == 0) {
 		twiddle(32);
 		rc = tftp_getnextblock(tftpfile);