* [LTP] [PATCH] hugemmap35: Migrating libhugetlbfs test v6 truncate_reserve_wraparound.c
@ 2026-04-04 17:16 Pavithra
2026-07-02 12:42 ` [LTP] " linuxtestproject.agent
0 siblings, 1 reply; 2+ messages in thread
From: Pavithra @ 2026-04-04 17:16 UTC (permalink / raw)
To: ltp; +Cc: pavrampu
This test verifies that the kernel correctly maintains hugepage reservation
accounting when truncating a hugetlbfs file. It ensures that reserved
hugepages are properly tracked through the complete lifecycle
Signed-off-by: Pavithra <pavrampu@linux.ibm.com>
---
runtest/hugetlb | 1 +
testcases/kernel/mem/.gitignore | 1 +
.../kernel/mem/hugetlb/hugemmap/hugemmap35.c | 124 ++++++++++++++++++
3 files changed, 126 insertions(+)
create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/hugemmap35.c
diff --git a/runtest/hugetlb b/runtest/hugetlb
index 0896d3c94..8ee0e6f82 100644
--- a/runtest/hugetlb
+++ b/runtest/hugetlb
@@ -36,6 +36,7 @@ hugemmap30 hugemmap30
hugemmap31 hugemmap31
hugemmap32 hugemmap32
hugemmap34 hugemmap34
+hugemmap35 hugemmap35
hugemmap05_1 hugemmap05 -m
hugemmap05_2 hugemmap05 -s
hugemmap05_3 hugemmap05 -s -m
diff --git a/testcases/kernel/mem/.gitignore b/testcases/kernel/mem/.gitignore
index b4455de51..0e59035df 100644
--- a/testcases/kernel/mem/.gitignore
+++ b/testcases/kernel/mem/.gitignore
@@ -36,6 +36,7 @@
/hugetlb/hugemmap/hugemmap31
/hugetlb/hugemmap/hugemmap32
/hugetlb/hugemmap/hugemmap34
+/hugetlb/hugemmap/hugemmap35
/hugetlb/hugeshmat/hugeshmat01
/hugetlb/hugeshmat/hugeshmat02
/hugetlb/hugeshmat/hugeshmat03
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap35.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap35.c
new file mode 100644
index 000000000..4b46bdbaa
--- /dev/null
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap35.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/*
+ * Copyright (C) 2005-2006 David Gibson & Adam Litke, IBM Corporation.
+ * Copyright (c) 2026 Pavithra <pavrampu@linux.ibm.com>
+ */
+
+/*
+ * Origin: https://github.com/libhugetlbfs/libhugetlbfs/blob/master/tests/truncate_reserve_wraparound.c
+ *
+ * Test that hugepage reservation accounting is correctly maintained when
+ * truncating a hugetlbfs file. This verifies that reserved hugepages are
+ * properly tracked through the sequence of: mmap (reserves page), touch
+ * (instantiates page), truncate (releases page), and attempted access
+ * (triggers SIGBUS). A bug in i_size handling could cause the reservation
+ * count to become incorrect, leading to resource leaks or allocation failures.
+ */
+
+#include <signal.h>
+#include <setjmp.h>
+#include "hugetlb.h"
+
+#define MNTPOINT "hugetlbfs/"
+
+static long hpage_size;
+static int fd = -1;
+
+static sigjmp_buf sig_escape;
+
+static void sigbus_handler(int signum LTP_ATTRIBUTE_UNUSED)
+{
+ siglongjmp(sig_escape, 17);
+}
+
+static void run_test(void)
+{
+ volatile int sigbus_count = 0;
+ unsigned long initial_rsvd, after_map_rsvd, after_touch_rsvd;
+ unsigned long after_trunc_rsvd, after_unmap_rsvd, after_sigbus_rsvd;
+ volatile unsigned int *q;
+ void *p;
+
+ initial_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+ tst_res(TINFO, "Reserve count before map: %lu", initial_rsvd);
+
+ p = SAFE_MMAP(NULL, hpage_size, PROT_READ|PROT_WRITE, MAP_SHARED,
+ fd, 0);
+ q = p;
+
+ after_map_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+
+ TST_EXP_EQ_LU(initial_rsvd + 1, after_map_rsvd);
+ if (!TST_PASS)
+ goto windup;
+
+ *q = 0;
+ after_touch_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+
+ TST_EXP_EQ_LU(initial_rsvd, after_touch_rsvd);
+ if (!TST_PASS)
+ goto windup;
+
+ SAFE_FTRUNCATE(fd, 0);
+ after_trunc_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+
+ TST_EXP_EQ_LU(initial_rsvd, after_trunc_rsvd);
+ if (!TST_PASS)
+ goto windup;
+
+ if (sigsetjmp(sig_escape, 1) == 0)
+ *q; /* Fault, triggering a SIGBUS */
+ else
+ sigbus_count++;
+
+ if (sigbus_count != 1) {
+ tst_res(TFAIL, "Didn't SIGBUS after truncate");
+ goto windup;
+ }
+
+ after_sigbus_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+
+ TST_EXP_EQ_LU(initial_rsvd, after_sigbus_rsvd);
+ if (!TST_PASS)
+ goto windup;
+
+windup:
+ SAFE_MUNMAP(p, hpage_size);
+ after_unmap_rsvd = SAFE_READ_MEMINFO(MEMINFO_HPAGE_RSVD);
+
+ TST_EXP_EQ_LU(initial_rsvd, after_unmap_rsvd);
+}
+
+static void setup(void)
+{
+
+ hpage_size = tst_get_hugepage_size();
+ fd = tst_creat_unlinked(MNTPOINT, 0, 0600);
+
+ struct sigaction sa = {
+ .sa_handler = sigbus_handler,
+ .sa_flags = 0,
+ };
+
+ SAFE_SIGACTION(SIGBUS, &sa, NULL);
+}
+
+static void cleanup(void)
+{
+ if (fd != -1)
+ SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+ .tags = (struct tst_tag[]) {
+ {"linux-git", "ebed4bfc8da8"},
+ {}
+ },
+ .needs_root = 1,
+ .mntpoint = MNTPOINT,
+ .needs_hugetlbfs = 1,
+ .hugepages = {4, TST_NEEDS},
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = run_test,
+};
--
2.53.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [LTP] hugemmap35: Migrating libhugetlbfs test v6 truncate_reserve_wraparound.c
2026-04-04 17:16 [LTP] [PATCH] hugemmap35: Migrating libhugetlbfs test v6 truncate_reserve_wraparound.c Pavithra
@ 2026-07-02 12:42 ` linuxtestproject.agent
0 siblings, 0 replies; 2+ messages in thread
From: linuxtestproject.agent @ 2026-07-02 12:42 UTC (permalink / raw)
To: Pavithra; +Cc: ltp
Hi Pavithra,
On Sat Apr 4 22:46:14 2026 +0530, Pavithra wrote:
> hugemmap35: Migrating libhugetlbfs test v6 truncate_reserve_wraparound.c
The "v6" in the subject looks like a series revision tag left over from
git-send-email. The libhugetlbfs source file has no "v6" in its name
(the Origin URL confirms this). Please strip it before resubmitting.
Suggested subject:
"hugemmap35: migrate libhugetlbfs test truncate_reserve_wraparound.c"
> +/*
> + * Origin: https://github.com/libhugetlbfs/libhugetlbfs/blob/master/tests/truncate_reserve_wraparound.c
> + *
> + * Test that hugepage reservation accounting is correctly maintained when
> + * truncating a hugetlbfs file. This verifies that reserved hugepages are
> + * properly tracked through the complete lifecycle
> + */
The description block must open with `/*\` (backslash after the opening
`/*`) to be recognised as RST content and exported to the test catalog.
A plain `/* */` comment is not rendered there.
The `Origin:` URL is also inside what should be the RST doc block. It
belongs in a separate plain `/* */` comment before the `/*\ ... */`
block, or can simply be omitted (the commit message and .tags already
record the provenance).
Rule 4 also requires documenting why root is needed. Hugetlbfs has to
be mounted by root, so a sentence to that effect belongs in the block.
Suggested restructure:
/*
* Origin: https://github.com/libhugetlbfs/libhugetlbfs/blob/...
*/
/*\
* Test that hugepage reservation accounting is correctly maintained
* when truncating a hugetlbfs file. This verifies that reserved
* hugepages are properly tracked through the sequence of: mmap
* (reserves page), touch (instantiates page), truncate (releases
* page), and attempted access (triggers SIGBUS). A bug in i_size
* handling could cause the reservation count to become incorrect,
* leading to resource leaks or allocation failures.
*
* Requires root to mount hugetlbfs.
*/
Verdict - Needs revision
---
Note:
The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.
Regards,
LTP AI Reviewer
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-02 12:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-04 17:16 [LTP] [PATCH] hugemmap35: Migrating libhugetlbfs test v6 truncate_reserve_wraparound.c Pavithra
2026-07-02 12:42 ` [LTP] " linuxtestproject.agent
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.