git: dfc9c1d4937d - main - loader: tftp: Copy the first block into the cache
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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);