From: Sayali Patil <sayalip@linux.ibm.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuah@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Ritesh Harjani <ritesh.list@gmail.com>
Cc: David Hildenbrand <david@kernel.org>, Zi Yan <ziy@nvidia.com>,
Michal Hocko <mhocko@kernel.org>,
Oscar Salvador <osalvador@suse.de>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Dev Jain <dev.jain@arm.com>,
Liam.Howlett@oracle.com, linuxppc-dev@lists.ozlabs.org,
Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Subject: Re: [PATCH v3 05/13] selftests/mm: size tmpfs according to PMD page size in split_huge_page_test
Date: Wed, 1 Apr 2026 21:50:02 +0530 [thread overview]
Message-ID: <0dab0668-3b26-4de4-9732-e175f71fab7f@linux.ibm.com> (raw)
In-Reply-To: <2fd965ce641d32a759984943a427fde47d7c3b13.1774591179.git.sayalip@linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 5796 bytes --]
On 27/03/26 12:45, Sayali Patil wrote:
> The split_file_backed_thp() test mounts a tmpfs with a fixed size of
> "4m". This works on systems with smaller PMD page sizes,
> but fails on configurations where the PMD huge page size is
> larger (e.g. 16MB).
>
> On such systems, the fixed 4MB tmpfs is insufficient to allocate even
> a single PMD-sized THP, causing the test to fail.
>
> Fix this by sizing the tmpfs dynamically based on the runtime
> pmd_pagesize, allocating space for two PMD-sized pages.
>
> Before patch:
> running ./split_huge_page_test /tmp/xfs_dir_YTrI5E
> --------------------------------------------------
> TAP version 13
> 1..55
> ok 1 Split zero filled huge pages successful
> ok 2 Split huge pages to order 0 successful
> ok 3 Split huge pages to order 2 successful
> ok 4 Split huge pages to order 3 successful
> ok 5 Split huge pages to order 4 successful
> ok 6 Split huge pages to order 5 successful
> ok 7 Split huge pages to order 6 successful
> ok 8 Split huge pages to order 7 successful
> ok 9 Split PTE-mapped huge pages successful
> Please enable pr_debug in split_huge_pages_in_file() for more info.
> Failed to write data to testing file: Success (0)
> Bail out! Error occurred
> Planned tests != run tests (55 != 9)
> Totals: pass:9 fail:0 xfail:0 xpass:0 skip:0 error:0
> [FAIL]
>
> After patch:
> --------------------------------------------------
> running ./split_huge_page_test /tmp/xfs_dir_bMvj6o
> --------------------------------------------------
> TAP version 13
> 1..55
> ok 1 Split zero filled huge pages successful
> ok 2 Split huge pages to order 0 successful
> ok 3 Split huge pages to order 2 successful
> ok 4 Split huge pages to order 3 successful
> ok 5 Split huge pages to order 4 successful
> ok 6 Split huge pages to order 5 successful
> ok 7 Split huge pages to order 6 successful
> ok 8 Split huge pages to order 7 successful
> ok 9 Split PTE-mapped huge pages successful
> Please enable pr_debug in split_huge_pages_in_file() for more info.
> Please check dmesg for more information
> ok 10 File-backed THP split to order 0 test done
> Please enable pr_debug in split_huge_pages_in_file() for more info.
> Please check dmesg for more information
> ok 11 File-backed THP split to order 1 test done
> Please enable pr_debug in split_huge_pages_in_file() for more info.
> Please check dmesg for more information
> ok 12 File-backed THP split to order 2 test done
> ...
> ok 55 Split PMD-mapped pagecache folio to order 7 at
> in-folio offset 128 passed
> Totals: pass:55 fail:0 xfail:0 xpass:0 skip:0 error:0
> [PASS]
> ok 1 split_huge_page_test /tmp/xfs_dir_bMvj6o
>
> Fixes: fbe37501b252 ("mm: huge_memory: debugfs for file-backed THP split")
> Reviewed-by: Zi Yan<ziy@nvidia.com>
> Reviewed-by: David Hildenbrand (Arm)<david@kernel.org>
> Tested-by: Venkat Rao Bagalkote<venkat88@linux.ibm.com>
> Signed-off-by: Sayali Patil<sayalip@linux.ibm.com>
> ---
> tools/testing/selftests/mm/split_huge_page_test.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/mm/split_huge_page_test.c b/tools/testing/selftests/mm/split_huge_page_test.c
> index e0167111bdd1..57e8a1c9647a 100644
> --- a/tools/testing/selftests/mm/split_huge_page_test.c
> +++ b/tools/testing/selftests/mm/split_huge_page_test.c
> @@ -484,6 +484,8 @@ static void split_file_backed_thp(int order)
> char tmpfs_template[] = "/tmp/thp_split_XXXXXX";
> const char *tmpfs_loc = mkdtemp(tmpfs_template);
> char testfile[INPUT_MAX];
> + unsigned long size = 2 * pmd_pagesize;
> + char opts[64];
> ssize_t num_written, num_read;
> char *file_buf1, *file_buf2;
> uint64_t pgoff_start = 0, pgoff_end = 1024;
> @@ -503,7 +505,8 @@ static void split_file_backed_thp(int order)
> file_buf1[i] = (char)i;
> memset(file_buf2, 0, pmd_pagesize);
>
> - status = mount("tmpfs", tmpfs_loc, "tmpfs", 0, "huge=always,size=4m");
> + snprintf(opts, sizeof(opts), "huge=always,size=%lu", size);
> + status = mount("tmpfs", tmpfs_loc, "tmpfs", 0, opts);
>
> if (status)
> ksft_exit_fail_msg("Unable to create a tmpfs for testing\n");
AI review question:
> Are file_buf1 and file_buf2 being leaked here?
> While reviewing the patch's changes to support larger PMD sizes, I noticed
> that earlier in this function file_buf1 and file_buf2 are dynamically
> allocated using pmd_pagesize:
> file_buf1 = (char *)malloc(pmd_pagesize);
> file_buf2 = (char *)malloc(pmd_pagesize);
> Looking at the end of the function, the success path returns without freeing
> either buffer:
> ksft_print_msg("Please check dmesg for more information\n");
> ksft_test_result_pass("File-backed THP split to order %d test done\n", order);
> return;
> Since this function is called in a loop for each split order, could this
> cause a significant memory leak? On architectures with large PMD sizes
> (like arm64 with 64KB base pages, where the PMD size is 512MB), leaking
> these buffers repeatedly could exhaust system memory and trigger the OOM
> killer during the test run.
>
Yes, both file_buf1 and file_buf2 are leaked on the success path and
some failure paths.
Since this function is invoked in a loop for each split order, the leak
accumulates over time.
On systems with large PMD sizes, this can potentially trigger OOM during
the test run.
This was likely not noticeable earlier with smaller PMD sizes, but
becomes significant
with larger configurations.
This appears to be a pre-existing issue and not introduced by my patch.
I will prepare a separate fix to free both buffers on all exit paths to
prevent this memory leak.
Thanks,
Sayali
[-- Attachment #2: Type: text/html, Size: 7093 bytes --]
next prev parent reply other threads:[~2026-04-01 16:20 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-27 7:15 [PATCH v3 00/13] selftests/mm: fix failures and robustness improvements Sayali Patil
2026-03-27 7:15 ` [PATCH v3 01/13] selftests/mm: restore default nr_hugepages value during cleanup in charge_reserved_hugetlb.sh Sayali Patil
2026-04-01 14:52 ` Sayali Patil
2026-04-01 16:05 ` Sayali Patil
2026-03-27 7:15 ` [PATCH v3 02/13] selftests/mm: fix hugetlb pathname construction " Sayali Patil
2026-04-01 14:06 ` David Hildenbrand (Arm)
2026-03-27 7:15 ` [PATCH v3 03/13] selftests/mm: fix hugetlb pathname construction in hugetlb_reparenting_test.sh Sayali Patil
2026-04-01 14:06 ` David Hildenbrand (Arm)
2026-03-27 7:15 ` [PATCH v3 04/13] selftest/mm: fix cgroup task placement and drop memory.current checks " Sayali Patil
2026-04-01 14:08 ` David Hildenbrand (Arm)
2026-04-03 19:59 ` Sayali Patil
2026-03-27 7:15 ` [PATCH v3 05/13] selftests/mm: size tmpfs according to PMD page size in split_huge_page_test Sayali Patil
2026-04-01 16:20 ` Sayali Patil [this message]
2026-03-27 7:16 ` [PATCH v3 06/13] selftest/mm: adjust hugepage-mremap test size for large huge pages Sayali Patil
2026-04-01 14:10 ` David Hildenbrand (Arm)
2026-04-01 20:45 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 07/13] selftest/mm: register existing mapping with userfaultfd in hugepage-mremap Sayali Patil
2026-04-01 14:18 ` David Hildenbrand (Arm)
2026-04-01 14:43 ` Sayali Patil
2026-04-02 7:31 ` David Hildenbrand (Arm)
2026-04-03 17:41 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 08/13] selftests/mm: ensure destination is hugetlb-backed " Sayali Patil
2026-04-01 14:21 ` David Hildenbrand (Arm)
2026-04-01 14:40 ` Lorenzo Stoakes (Oracle)
2026-04-01 20:39 ` Sayali Patil
2026-04-02 7:33 ` David Hildenbrand (Arm)
2026-04-02 9:05 ` Lorenzo Stoakes (Oracle)
2026-04-03 17:41 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 09/13] selftests/mm: skip uffd-wp-mremap if UFFD write-protect is unsupported Sayali Patil
2026-04-02 6:59 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 10/13] selftests/mm: skip uffd-stress test when nr_pages_per_cpu is zero Sayali Patil
2026-04-01 14:23 ` David Hildenbrand (Arm)
2026-03-27 7:16 ` [PATCH v3 11/13] selftests/mm: fix double increment in linked list cleanup in compaction_test Sayali Patil
2026-04-01 14:32 ` Sayali Patil
2026-04-01 14:39 ` David Hildenbrand (Arm)
2026-04-01 17:33 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 12/13] selftests/mm: move hwpoison setup into run_test() and silence modprobe output for memory-failure category Sayali Patil
2026-04-02 7:15 ` Sayali Patil
2026-03-27 7:16 ` [PATCH v3 13/13] selftests/cgroup: extend test_hugetlb_memcg.c to support all huge page sizes Sayali Patil
2026-04-03 17:16 ` Sayali Patil
2026-03-27 18:11 ` [PATCH v3 00/13] selftests/mm: fix failures and robustness improvements Andrew Morton
2026-03-30 5:57 ` Sayali Patil
2026-03-30 22:11 ` Andrew Morton
2026-04-01 14:05 ` David Hildenbrand (Arm)
2026-04-01 15:03 ` Sayali Patil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0dab0668-3b26-4de4-9732-e175f71fab7f@linux.ibm.com \
--to=sayalip@linux.ibm.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@kernel.org \
--cc=osalvador@suse.de \
--cc=ritesh.list@gmail.com \
--cc=shuah@kernel.org \
--cc=venkat88@linux.ibm.com \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox