Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2026-08-01 18:27:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grub2 (Old) and /work/SRC/openSUSE:Factory/.grub2.new.16738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2" Sat Aug 1 18:27:19 2026 rev:396 rq:1368336 version:2.14 Changes: -------- --- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2026-07-15 16:29:18.345323308 +0200 +++ /work/SRC/openSUSE:Factory/.grub2.new.16738/grub2.changes 2026-08-01 18:27:24.987886700 +0200 @@ -1,0 +2,17 @@ +Mon Jul 27 07:14:43 UTC 2026 - Michael Chang <[email protected]> + +- Fix KVM and Xen VM images taking too long to boot (bsc#1266384) + * 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch + * 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch + * 0003-disk-reduce-cache-slot-thrashing.patch + +------------------------------------------------------------------- +Mon Jul 27 06:50:53 UTC 2026 - Michael Chang <[email protected]> + +- Replace patch with upstreamed version + * 0001-test-Fix-f-test-on-files-over-network.patch + * 0002-http-Return-HTTP-status-code-in-http_establish.patch + * 0003-docs-Clarify-test-for-files-on-TFTP-and-HTTP.patch + * 0004-tftp-Fix-hang-when-file-is-a-directory.patch + +------------------------------------------------------------------- New: ---- 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch 0003-disk-reduce-cache-slot-thrashing.patch ----------(New B)---------- New:- Fix KVM and Xen VM images taking too long to boot (bsc#1266384) * 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch * 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch New: * 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch * 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch * 0003-disk-reduce-cache-slot-thrashing.patch New: * 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch * 0003-disk-reduce-cache-slot-thrashing.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub2.spec ++++++ --- /var/tmp/diff_new_pack.Pwg9fa/_old 2026-08-01 18:27:28.283999310 +0200 +++ /var/tmp/diff_new_pack.Pwg9fa/_new 2026-08-01 18:27:28.291999584 +0200 @@ -209,6 +209,13 @@ Patch: 0008-kern-efi-efi-Print-URI-and-DNS-device-path-info.patch Patch: 0009-kern-efi-efi-Correct-endianness-in-IPv6-device-path.patch Patch: 0010-bootp-Fix-logical-operator-in-DHCP-option-overload-c.patch +Patch: 0001-test-Fix-f-test-on-files-over-network.patch +Patch: 0002-http-Return-HTTP-status-code-in-http_establish.patch +Patch: 0003-docs-Clarify-test-for-files-on-TFTP-and-HTTP.patch +Patch: 0004-tftp-Fix-hang-when-file-is-a-directory.patch +Patch: 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch +Patch: 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch +Patch: 0003-disk-reduce-cache-slot-thrashing.patch Patch: rename-grub-info-file-to-grub2.patch Patch: grub2-linux.patch Patch: use-grub2-as-a-package-name.patch @@ -376,10 +383,6 @@ Patch: 0001-Improve-TPM-key-protection-on-boot-interruptions.patch Patch: 0004-Key-revocation-on-out-of-bound-file-access.patch Patch: 0001-mkconfig-Determine-GRUB_DISTRIBUTOR-from-etc-SUSE-br.patch -Patch: 0001-test-Fix-f-test-on-files-over-network.patch -Patch: 0002-http-Return-HTTP-status-code-in-http_establish.patch -Patch: 0003-docs-Clarify-test-for-files-on-TFTP-and-HTTP.patch -Patch: 0004-tftp-Fix-hang-when-file-is-a-directory.patch Patch: 0001-getroot-Skip-mount-points-in-grub_find_device.patch Patch: 0001-linux-fallback-to-EFI-handover-on-x86_64.patch Patch: 0002-linux-fallback-to-direct-PE-entry-boot-on-arm64.patch ++++++ 0001-cacheinfo-fix-hit-ratio-calculation-and-statistics-o.patch ++++++ >From 490e0e57f3070005ec311fab350a74c5cc9de29b Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Tue, 9 Jun 2026 12:47:43 +0800 Subject: [PATCH 1/3] cacheinfo: fix hit ratio calculation and statistics output Compute the disk cache hit ratio using 64-bit arithmetic via grub_divmod64() to avoid overflow in `hits * 10000` on 32-bit builds. Also fix the argument ordering in the statistics printf() call so that it matches the format string. Otherwise the reported statistics can appear incorrect and misleading. Signed-off-by: Michael Chang <[email protected]> Reviewed-by: Andrew Hamilton <[email protected]> Reviewed-by: Leo Sandoval <[email protected]> Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/145> --- grub-core/commands/cacheinfo.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/grub-core/commands/cacheinfo.c b/grub-core/commands/cacheinfo.c index e8ee05b85..d265800fa 100644 --- a/grub-core/commands/cacheinfo.c +++ b/grub-core/commands/cacheinfo.c @@ -35,11 +35,14 @@ grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)), grub_disk_cache_get_performance (&hits, &misses); if (hits + misses) { - unsigned long ratio = hits * 10000 / (hits + misses); - grub_printf ("(%lu.%lu%%)\n", ratio / 100, ratio % 100); + unsigned long ratio = grub_divmod64 ( + (grub_uint64_t) hits * 10000ULL, + (grub_uint64_t) hits + (grub_uint64_t) misses, + NULL); + grub_printf ("(%lu.%02lu%%)\n", ratio / 100, ratio % 100); grub_printf_ (N_("Disk cache statistics: hits = %lu (%lu.%02lu%%)," - " misses = %lu\n"), ratio / 100, ratio % 100, - hits, misses); + " misses = %lu\n"), hits, ratio / 100, ratio % 100, + misses); } else grub_printf ("%s\n", _("No disk cache statistics available\n")); -- 2.55.0 ++++++ 0001-test-Fix-f-test-on-files-over-network.patch ++++++ --- /var/tmp/diff_new_pack.Pwg9fa/_old 2026-08-01 18:27:28.552008467 +0200 +++ /var/tmp/diff_new_pack.Pwg9fa/_new 2026-08-01 18:27:28.556008604 +0200 @@ -1,4 +1,4 @@ -From 0a8f0e75151067a8b7c09a6ffdfa9558aa040d3b Mon Sep 17 00:00:00 2001 +From ffc05ec967da97447defceac21ab76feb1f50a68 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Mon, 14 Jul 2025 17:59:20 +0800 Subject: [PATCH 1/4] test: Fix -f test on files over network @@ -30,15 +30,19 @@ device. Signed-off-by: Michael Chang <[email protected]> +Reviewed-by: Andrew Hamilton <[email protected]> +Reviewed-by: Avnish Chouhan <[email protected]> +Reviewed-by: Leo Sandoval <[email protected]> +Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/167> --- - grub-core/commands/test.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) + grub-core/commands/test.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) diff --git a/grub-core/commands/test.c b/grub-core/commands/test.c -index 62d3fb398..541f36daf 100644 +index ee47ab264..55e842191 100644 --- a/grub-core/commands/test.c +++ b/grub-core/commands/test.c -@@ -91,6 +91,23 @@ get_fileinfo (char *path, struct test_parse_ctx *ctx) +@@ -94,6 +94,24 @@ get_fileinfo (char *path, struct test_parse_ctx *ctx) return; } @@ -51,6 +55,7 @@ + ctx->file_exists = file ? 1 : 0; + ctx->file_info.dir = 0; + ctx->file_info.mtimeset = 0; ++ ctx->filename = NULL; + grub_errno = GRUB_ERR_NONE; + if (file) + grub_file_close (file); @@ -63,6 +68,6 @@ if (! fs) { -- -2.50.0 +2.55.0 ++++++ 0002-disk-fix-cache-lock-and-hit-counter-for-invalidated-.patch ++++++ >From dc0b2735bfeb8f8b10c85709ea43d9e58e204863 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Tue, 9 Jun 2026 13:21:25 +0800 Subject: [PATCH 2/3] disk: fix cache lock and hit counter for invalidated cache entries In grub_disk_cache_fetch(), a cache entry may match (dev_id, disk_id, sector) while having already been invalidated (data == NULL). Such entries should be treated as cache misses rather than valid cache hits. However, the current implementation still marks the entry as locked and increments the cache hit counter before returning NULL. Avoid locking invalidated cache entries by setting cache->lock only when cache->data is present. This prevents entries without valid data from remaining permanently locked. Also update cache statistics so that only valid entries contribute to grub_disk_cache_hits, matching entries with NULL data are now counted as cache misses instead. Signed-off-by: Michael Chang <[email protected]> Reviewed-by: Andrew Hamilton <[email protected]> Reviewed-by: Leo Sandoval <[email protected]> Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/145> --- grub-core/kern/disk.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c index 82e04fd00..d81ea1bd0 100644 --- a/grub-core/kern/disk.c +++ b/grub-core/kern/disk.c @@ -89,9 +89,13 @@ grub_disk_cache_fetch (unsigned long dev_id, unsigned long disk_id, if (cache->dev_id == dev_id && cache->disk_id == disk_id && cache->sector == sector) { - cache->lock = 1; + if (cache->data) + cache->lock = 1; #if DISK_CACHE_STATS - grub_disk_cache_hits++; + if (cache->data) + grub_disk_cache_hits++; + else + grub_disk_cache_misses++; #endif return cache->data; } -- 2.55.0 ++++++ 0002-http-Return-HTTP-status-code-in-http_establish.patch ++++++ --- /var/tmp/diff_new_pack.Pwg9fa/_old 2026-08-01 18:27:28.628011064 +0200 +++ /var/tmp/diff_new_pack.Pwg9fa/_new 2026-08-01 18:27:28.632011200 +0200 @@ -1,4 +1,4 @@ -From 6704d7715b6303f4b7e2cb9da7c6dcc3bfdd5726 Mon Sep 17 00:00:00 2001 +From e2cdb5c4c7733bc45a5536b5a6c2a951c693dbc0 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Mon, 14 Jul 2025 22:10:18 +0800 Subject: [PATCH 2/4] http: Return HTTP status code in http_establish @@ -25,15 +25,19 @@ takes the HTTP status code into account. Signed-off-by: Michael Chang <[email protected]> +Reviewed-by: Andrew Hamilton <[email protected]> +Reviewed-by: Avnish Chouhan <[email protected]> +Reviewed-by: Leo Sandoval <[email protected]> +Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/167> --- - grub-core/net/http.c | 6 ++++++ - 1 file changed, 6 insertions(+) + grub-core/net/http.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) diff --git a/grub-core/net/http.c b/grub-core/net/http.c -index 686949c17..c5509dc45 100644 +index 5a19f8d95..94289259c 100644 --- a/grub-core/net/http.c +++ b/grub-core/net/http.c -@@ -125,6 +125,7 @@ parse_line (grub_file_t file, http_data_t data, char *ptr, grub_size_t len) +@@ -122,6 +122,7 @@ parse_line (grub_file_t file, http_data_t data, char *ptr, grub_size_t len) case 404: data->err = GRUB_ERR_FILE_NOT_FOUND; data->errmsg = grub_xasprintf (_("file `%s' not found"), data->filename); @@ -41,7 +45,7 @@ return GRUB_ERR_NONE; default: data->err = GRUB_ERR_NET_UNKNOWN_ERROR; -@@ -132,6 +133,7 @@ parse_line (grub_file_t file, http_data_t data, char *ptr, grub_size_t len) +@@ -129,6 +130,7 @@ parse_line (grub_file_t file, http_data_t data, char *ptr, grub_size_t len) valid answers like 403 will trigger this very generic message. */ data->errmsg = grub_xasprintf (_("unsupported HTTP error %d: %s"), code, ptr); @@ -49,18 +53,26 @@ return GRUB_ERR_NONE; } data->first_line_recv = 1; -@@ -444,6 +446,10 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) +@@ -473,6 +475,18 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) } return grub_error (GRUB_ERR_TIMEOUT, N_("time out opening `%s'"), data->filename); } + + if (data->err) -+ return grub_error (data->err, N_("%s"), data->errmsg); ++ { ++ char *str = data->errmsg; ++ if (data->sock) ++ grub_net_tcp_close (data->sock, GRUB_NET_TCP_ABORT); ++ err = grub_error (data->err, "%s", str); ++ grub_free (str); ++ data->errmsg = 0; ++ return err; ++ } + return GRUB_ERR_NONE; } -- -2.50.0 +2.55.0 ++++++ 0003-disk-reduce-cache-slot-thrashing.patch ++++++ >From 63c601d8fca5c93f48b314be3f9ca0ed7a5904c6 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Sun, 31 May 2026 19:56:32 +0800 Subject: [PATCH 3/3] disk: reduce cache slot thrashing We found that some workloads can undergo severe disk cache collision patterns. In the reported Xen HVM boot case, logs showed that GRUB repeatedly accessed a small set of hot Btrfs ranges that all mapped to the same cache entry. As a result, each new cache fill evicted a previously hot entry before it could be reused. This behavior caused a dramatic increase in cache misses during early boot. On systems with slow storage, such excessive cache misses can lead to significant boot delays. To address this issue, maintain a short eviction history for each cache slot and consult it when inserting new entries. If a sector appears in the recent eviction chain, treat it as an indication of collision thrashing and immediately reallocate and refill that entry instead of allowing it to remain cold. The history length is bounded, and older records are freed when they overflow. This approach preserves the existing low-memory replacement model while keeping recently displaced hot entries alive long enough to avoid repeated collision misses. Before this change, the problematic image underwent 9,823 cache misses. After applying the fix, the number of misses dropped to just 75, making the resulting boot delay effectively unnoticeable. Signed-off-by: Michael Chang <[email protected]> Reviewed-by: Andrew Hamilton <[email protected]> Reviewed-by: Leo Sandoval <[email protected]> Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/145> --- grub-core/kern/disk.c | 134 +++++++++++++++++++++++++++++++++++++----- grub-core/lib/disk.c | 15 +++++ include/grub/disk.h | 1 + 3 files changed, 134 insertions(+), 16 deletions(-) diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c index d81ea1bd0..32d69c4e5 100644 --- a/grub-core/kern/disk.c +++ b/grub-core/kern/disk.c @@ -32,6 +32,9 @@ #define MAX_READ_RECURSION_DEPTH 16 static unsigned int read_recursion_depth = 0; +/* Maximum number of recently evicted entries kept per cache entry. */ +#define GRUB_CACHE_EVICTED_MAX 3 + /* The last time the disk was used. */ static grub_uint64_t grub_last_time = 0; @@ -67,12 +70,26 @@ grub_disk_cache_invalidate_all (void) for (i = 0; i < GRUB_DISK_CACHE_NUM; i++) { struct grub_disk_cache *cache = grub_disk_cache_table + i; + struct grub_disk_cache *p, *prev; if (cache->data && ! cache->lock) { grub_free (cache->data); cache->data = 0; } + + prev = cache; + while ((p = prev->next) != NULL) + { + if (p->lock) + { + prev = p; + continue; + } + prev->next = p->next; + grub_free (p->data); + grub_free (p); + } } } @@ -86,19 +103,21 @@ grub_disk_cache_fetch (unsigned long dev_id, unsigned long disk_id, cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); cache = grub_disk_cache_table + cache_index; - if (cache->dev_id == dev_id && cache->disk_id == disk_id - && cache->sector == sector) - { - if (cache->data) - cache->lock = 1; + do { + if (cache->dev_id == dev_id && cache->disk_id == disk_id + && cache->sector == sector) + { + if (cache->data) + cache->lock = 1; #if DISK_CACHE_STATS - if (cache->data) - grub_disk_cache_hits++; - else - grub_disk_cache_misses++; + if (cache->data) + grub_disk_cache_hits++; + else + grub_disk_cache_misses++; #endif - return cache->data; - } + return cache->data; + } + } while ((cache = cache->next) != NULL); #if DISK_CACHE_STATS grub_disk_cache_misses++; @@ -117,9 +136,14 @@ grub_disk_cache_unlock (unsigned long dev_id, unsigned long disk_id, cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); cache = grub_disk_cache_table + cache_index; - if (cache->dev_id == dev_id && cache->disk_id == disk_id - && cache->sector == sector) - cache->lock = 0; + do { + if (cache->dev_id == dev_id && cache->disk_id == disk_id + && cache->sector == sector) + { + cache->lock = 0; + break; + } + } while ((cache = cache->next) != NULL); } static grub_err_t @@ -127,19 +151,63 @@ grub_disk_cache_store (unsigned long dev_id, unsigned long disk_id, grub_disk_addr_t sector, const char *data) { unsigned cache_index; - struct grub_disk_cache *cache; + struct grub_disk_cache *cache, *cur; + struct grub_disk_cache *old = NULL; cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); cache = grub_disk_cache_table + cache_index; + cur = cache; + while ((cur = cur->next) != NULL) + { + if (cur->dev_id == dev_id && cur->disk_id == disk_id && + cur->sector == sector) + { + /* + * Likely cache thrashing: this entry survived in the overflow chain, + * meaning it was recently displaced from the primary slot by + * conflicting accesses. Refill it in place so this still-fresh + * block is effectively re-cached and can be hit again soon. + */ + cur->lock = 1; + grub_free (cur->data); + cur->data = 0; + cur->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); + if (! cur->data) + { + cur->lock = 0; + return grub_errno; + } + grub_memcpy (cur->data, data, + GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); + cur->lock = 0; + return GRUB_ERR_NONE; + } + } + cache->lock = 1; + if (cache->data) + { + old = grub_calloc (1, sizeof (struct grub_disk_cache)); + grub_errno = GRUB_ERR_NONE; + } + if (old) + { + old->sector = cache->sector; + old->disk_id = cache->disk_id; + old->dev_id = cache->dev_id; + } + grub_free (cache->data); cache->data = 0; cache->lock = 0; cache->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); if (! cache->data) - return grub_errno; + { + grub_free (old); + return grub_errno; + } grub_memcpy (cache->data, data, GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); @@ -147,6 +215,40 @@ grub_disk_cache_store (unsigned long dev_id, unsigned long disk_id, cache->disk_id = disk_id; cache->sector = sector; + if (old) + { + int i; + cur = cache->next; + cache->next = old; + old->next = cur; + + /* + * Keep only a small "recently evicted" tail in this bucket. + * These entries are still considered hot enough to track so repeated I/O + * to nearby/conflicting sectors can be recognized and re-promoted, + * reducing hash-collision cache thrashing. Drop anything older than this + * limit. + */ + for (i = 1; i < GRUB_CACHE_EVICTED_MAX && cur; i++, cur = cur->next); + + if (i == GRUB_CACHE_EVICTED_MAX && cur) + { + struct grub_disk_cache *end = cur; + + cur = end->next; + end->next = NULL; + + if (cur) + { + do { + struct grub_disk_cache *p = cur->next; + grub_free (cur->data); + grub_free (cur); + cur = p; + } while (cur); + } + } + } return GRUB_ERR_NONE; } diff --git a/grub-core/lib/disk.c b/grub-core/lib/disk.c index 123993dd4..042252b24 100644 --- a/grub-core/lib/disk.c +++ b/grub-core/lib/disk.c @@ -36,11 +36,13 @@ grub_disk_cache_invalidate (unsigned long dev_id, unsigned long disk_id, { unsigned cache_index; struct grub_disk_cache *cache; + struct grub_disk_cache *p, *prev; sector &= ~((grub_disk_addr_t) GRUB_DISK_CACHE_SIZE - 1); cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); cache = grub_disk_cache_table + cache_index; + prev = cache; if (cache->dev_id == dev_id && cache->disk_id == disk_id && cache->sector == sector && cache->data) { @@ -49,6 +51,19 @@ grub_disk_cache_invalidate (unsigned long dev_id, unsigned long disk_id, cache->data = 0; cache->lock = 0; } + + while ((p = prev->next) != NULL) + { + if (p->dev_id == dev_id && p->disk_id == disk_id + && p->sector == sector) + { + prev->next = p->next; + grub_free (p->data); + grub_free (p); + } + else + prev = p; + } } grub_err_t diff --git a/include/grub/disk.h b/include/grub/disk.h index fbf23df7f..45c543541 100644 --- a/include/grub/disk.h +++ b/include/grub/disk.h @@ -297,6 +297,7 @@ struct grub_disk_cache grub_disk_addr_t sector; char *data; int lock; + struct grub_disk_cache *next; }; extern struct grub_disk_cache EXPORT_VAR(grub_disk_cache_table)[GRUB_DISK_CACHE_NUM]; -- 2.55.0 ++++++ 0003-docs-Clarify-test-for-files-on-TFTP-and-HTTP.patch ++++++ --- /var/tmp/diff_new_pack.Pwg9fa/_old 2026-08-01 18:27:28.696013387 +0200 +++ /var/tmp/diff_new_pack.Pwg9fa/_new 2026-08-01 18:27:28.704013660 +0200 @@ -1,17 +1,22 @@ -From a0bcce49bc285fb71c572963e662db3d88bcd563 Mon Sep 17 00:00:00 2001 +From 83cc0e322d7fe398388242e528de174041737681 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Wed, 16 Jul 2025 17:52:03 +0800 Subject: [PATCH 3/4] docs: Clarify test for files on TFTP and HTTP +Signed-off-by: Michael Chang <[email protected]> +Reviewed-by: Andrew Hamilton <[email protected]> +Reviewed-by: Avnish Chouhan <[email protected]> +Reviewed-by: Leo Sandoval <[email protected]> +Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/167> --- docs/grub.texi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi -index 9aaea7282..4b947e942 100644 +index 313aa0275..bcacd0fc5 100644 --- a/docs/grub.texi +++ b/docs/grub.texi -@@ -5887,13 +5887,13 @@ the strings are not equal +@@ -8927,13 +8927,13 @@ the strings are not equal @item @var{prefix}@var{integer1} @code{-plt} @var{prefix}@var{integer2} @var{integer1} is less than @var{integer2} after stripping off common non-numeric @var{prefix}. @item @var{file1} @code{-nt} @var{file2} @@ -30,6 +35,6 @@ @var{file} exists and is not a directory @item @code{-s} @var{file} -- -2.50.0 +2.55.0 ++++++ 0004-tftp-Fix-hang-when-file-is-a-directory.patch ++++++ --- /var/tmp/diff_new_pack.Pwg9fa/_old 2026-08-01 18:27:28.756015437 +0200 +++ /var/tmp/diff_new_pack.Pwg9fa/_new 2026-08-01 18:27:28.760015573 +0200 @@ -1,4 +1,4 @@ -From 9f8f5e0d45165b99d0f3ce9bf37382738e0bddb7 Mon Sep 17 00:00:00 2001 +From 74a33ddd49837d36b9247b93eb5e2b139cadddc2 Mon Sep 17 00:00:00 2001 From: Michael Chang <[email protected]> Date: Thu, 17 Jul 2025 13:29:48 +0800 Subject: [PATCH 4/4] tftp: Fix hang when file is a directory @@ -31,12 +31,16 @@ 192.168.100.2 192.168.100.122 Error Code, Code: Not defined, Message: Is a directory Signed-off-by: Michael Chang <[email protected]> +Reviewed-by: Andrew Hamilton <[email protected]> +Reviewed-by: Avnish Chouhan <[email protected]> +Reviewed-by: Leo Sandoval <[email protected]> +Part-of: <https://gitlab.freedesktop.org/gnu-grub/grub/-/merge_requests/167> --- grub-core/net/tftp.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c -index 409b1d09b..93452fe3b 100644 +index 63953bc19..569adbb06 100644 --- a/grub-core/net/tftp.c +++ b/grub-core/net/tftp.c @@ -250,6 +250,14 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__ ((unused)), @@ -55,6 +59,6 @@ grub_error (GRUB_ERR_IO, "%s", tftph->u.err.errmsg); grub_error_save (&data->save_err); -- -2.50.0 +2.55.0
