From: Zi Yan <ziy@nvidia.com>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
Song Liu <songliubraving@fb.com>
Cc: Chris Mason <clm@fb.com>, David Sterba <dsterba@suse.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>, Zi Yan <ziy@nvidia.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Nico Pache <npache@redhat.com>,
Ryan Roberts <ryan.roberts@arm.com>, Dev Jain <dev.jain@arm.com>,
Barry Song <baohua@kernel.org>, Lance Yang <lance.yang@linux.dev>,
Vlastimil Babka <vbabka@kernel.org>,
Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Shuah Khan <shuah@kernel.org>,
linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-kselftest@vger.kernel.org
Subject: [RFC PATCH 11/11] selftests/mm: remove READ_ONLY_THP_FOR_FS test in guard-regions
Date: Mon, 23 Mar 2026 15:06:44 -0400 [thread overview]
Message-ID: <20260323190644.1714379-12-ziy@nvidia.com> (raw)
In-Reply-To: <20260323190644.1714379-1-ziy@nvidia.com>
READ_ONLY_THP_FOR_FS is no longer present, remove related test.
Signed-off-by: Zi Yan <ziy@nvidia.com>
---
tools/testing/selftests/mm/guard-regions.c | 148 +--------------------
1 file changed, 1 insertion(+), 147 deletions(-)
diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/selftests/mm/guard-regions.c
index 48e8b1539be3..fc8b2a4e7ba2 100644
--- a/tools/testing/selftests/mm/guard-regions.c
+++ b/tools/testing/selftests/mm/guard-regions.c
@@ -42,7 +42,6 @@ static sigjmp_buf signal_jmp_buf;
enum backing_type {
ANON_BACKED,
SHMEM_BACKED,
- LOCAL_FILE_BACKED,
};
FIXTURE(guard_regions)
@@ -67,11 +66,6 @@ FIXTURE_VARIANT_ADD(guard_regions, shmem)
.backing = SHMEM_BACKED,
};
-FIXTURE_VARIANT_ADD(guard_regions, file)
-{
- .backing = LOCAL_FILE_BACKED,
-};
-
static bool is_anon_backed(const FIXTURE_VARIANT(guard_regions) * variant)
{
switch (variant->backing) {
@@ -98,7 +92,6 @@ static void *mmap_(FIXTURE_DATA(guard_regions) * self,
offset = 0;
break;
case SHMEM_BACKED:
- case LOCAL_FILE_BACKED:
flags |= MAP_SHARED;
fd = self->fd;
break;
@@ -198,18 +191,6 @@ static void teardown_sighandler(void)
sigaction(SIGSEGV, &act, NULL);
}
-static int open_file(const char *prefix, char *path)
-{
- int fd;
-
- snprintf(path, PATH_MAX, "%sguard_regions_test_file_XXXXXX", prefix);
- fd = mkstemp(path);
- if (fd < 0)
- ksft_exit_fail_perror("mkstemp");
-
- return fd;
-}
-
/* Establish a varying pattern in a buffer. */
static void set_pattern(char *ptr, size_t num_pages, size_t page_size)
{
@@ -262,54 +243,6 @@ static bool is_buf_eq(char *buf, size_t size, char chr)
return true;
}
-/*
- * Some file systems have issues with merging due to changing merge-sensitive
- * parameters in the .mmap callback, and prior to .mmap_prepare being
- * implemented everywhere this will now result in an unexpected failure to
- * merge (e.g. - overlayfs).
- *
- * Perform a simple test to see if the local file system suffers from this, if
- * it does then we can skip test logic that assumes local file system merging is
- * sane.
- */
-static bool local_fs_has_sane_mmap(FIXTURE_DATA(guard_regions) * self,
- const FIXTURE_VARIANT(guard_regions) * variant)
-{
- const unsigned long page_size = self->page_size;
- char *ptr, *ptr2;
- struct procmap_fd procmap;
-
- if (variant->backing != LOCAL_FILE_BACKED)
- return true;
-
- /* Map 10 pages. */
- ptr = mmap_(self, variant, NULL, 10 * page_size, PROT_READ | PROT_WRITE, 0, 0);
- if (ptr == MAP_FAILED)
- return false;
- /* Unmap the middle. */
- munmap(&ptr[5 * page_size], page_size);
-
- /* Map again. */
- ptr2 = mmap_(self, variant, &ptr[5 * page_size], page_size, PROT_READ | PROT_WRITE,
- MAP_FIXED, 5 * page_size);
-
- if (ptr2 == MAP_FAILED)
- return false;
-
- /* Now make sure they all merged. */
- if (open_self_procmap(&procmap) != 0)
- return false;
- if (!find_vma_procmap(&procmap, ptr))
- return false;
- if (procmap.query.vma_start != (unsigned long)ptr)
- return false;
- if (procmap.query.vma_end != (unsigned long)ptr + 10 * page_size)
- return false;
- close_procmap(&procmap);
-
- return true;
-}
-
FIXTURE_SETUP(guard_regions)
{
self->page_size = (unsigned long)sysconf(_SC_PAGESIZE);
@@ -318,9 +251,6 @@ FIXTURE_SETUP(guard_regions)
switch (variant->backing) {
case ANON_BACKED:
return;
- case LOCAL_FILE_BACKED:
- self->fd = open_file("", self->path);
- break;
case SHMEM_BACKED:
self->fd = memfd_create(self->path, 0);
break;
@@ -1750,55 +1680,6 @@ TEST_F(guard_regions, map_private)
ASSERT_EQ(munmap(ptr_private, 10 * page_size), 0);
}
-/* Test that guard regions established over a read-only mapping function correctly. */
-TEST_F(guard_regions, readonly_file)
-{
- const unsigned long page_size = self->page_size;
- char *ptr;
- int i;
-
- if (variant->backing != LOCAL_FILE_BACKED)
- SKIP(return, "Read-only test specific to file-backed");
-
- /* Map shared so we can populate with pattern, populate it, unmap. */
- ptr = mmap_(self, variant, NULL, 10 * page_size,
- PROT_READ | PROT_WRITE, 0, 0);
- ASSERT_NE(ptr, MAP_FAILED);
- set_pattern(ptr, 10, page_size);
- ASSERT_EQ(munmap(ptr, 10 * page_size), 0);
- /* Close the fd so we can re-open read-only. */
- ASSERT_EQ(close(self->fd), 0);
-
- /* Re-open read-only. */
- self->fd = open(self->path, O_RDONLY);
- ASSERT_NE(self->fd, -1);
- /* Re-map read-only. */
- ptr = mmap_(self, variant, NULL, 10 * page_size, PROT_READ, 0, 0);
- ASSERT_NE(ptr, MAP_FAILED);
-
- /* Mark every other page guarded. */
- for (i = 0; i < 10; i += 2) {
- char *ptr_pg = &ptr[i * page_size];
-
- ASSERT_EQ(madvise(ptr_pg, page_size, MADV_GUARD_INSTALL), 0);
- }
-
- /* Assert that the guard regions are in place.*/
- for (i = 0; i < 10; i++) {
- char *ptr_pg = &ptr[i * page_size];
-
- ASSERT_EQ(try_read_buf(ptr_pg), i % 2 != 0);
- }
-
- /* Remove guard regions. */
- ASSERT_EQ(madvise(ptr, 10 * page_size, MADV_GUARD_REMOVE), 0);
-
- /* Ensure the data is as expected. */
- ASSERT_TRUE(check_pattern(ptr, 10, page_size));
-
- ASSERT_EQ(munmap(ptr, 10 * page_size), 0);
-}
-
TEST_F(guard_regions, fault_around)
{
const unsigned long page_size = self->page_size;
@@ -2203,17 +2084,6 @@ TEST_F(guard_regions, collapse)
if (variant->backing != ANON_BACKED)
ASSERT_EQ(ftruncate(self->fd, size), 0);
- /*
- * We must close and re-open local-file backed as read-only for
- * CONFIG_READ_ONLY_THP_FOR_FS to work.
- */
- if (variant->backing == LOCAL_FILE_BACKED) {
- ASSERT_EQ(close(self->fd), 0);
-
- self->fd = open(self->path, O_RDONLY);
- ASSERT_GE(self->fd, 0);
- }
-
ptr = mmap_(self, variant, NULL, size, PROT_READ, 0, 0);
ASSERT_NE(ptr, MAP_FAILED);
@@ -2234,13 +2104,7 @@ TEST_F(guard_regions, collapse)
/* Allow huge page throughout region. */
ASSERT_EQ(madvise(ptr, size, MADV_HUGEPAGE), 0);
- /*
- * Now collapse the entire region. This should fail in all cases.
- *
- * The madvise() call will also fail if CONFIG_READ_ONLY_THP_FOR_FS is
- * not set for the local file case, but we can't differentiate whether
- * this occurred or if the collapse was rightly rejected.
- */
+ /* Now collapse the entire region. This should fail in all cases. */
EXPECT_NE(madvise(ptr, size, MADV_COLLAPSE), 0);
/*
@@ -2298,16 +2162,6 @@ TEST_F(guard_regions, smaps)
ASSERT_TRUE(check_vmflag_guard(ptr));
ASSERT_TRUE(check_vmflag_guard(&ptr[5 * page_size]));
- /*
- * If the local file system is unable to merge VMAs due to having
- * unusual characteristics, there is no point in asserting merge
- * behaviour.
- */
- if (!local_fs_has_sane_mmap(self, variant)) {
- TH_LOG("local filesystem does not support sane merging skipping merge test");
- return;
- }
-
/* Map a fresh VMA between the two split VMAs. */
ptr2 = mmap_(self, variant, &ptr[4 * page_size], page_size,
PROT_READ | PROT_WRITE, MAP_FIXED, 4 * page_size);
--
2.43.0
prev parent reply other threads:[~2026-03-23 19:08 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-23 19:06 [RFC PATCH 00/11] Remove READ_ONLY_THP_FOR_FS Zi Yan
2026-03-23 19:06 ` [RFC PATCH 01/11] mm: remove READ_ONLY_THP_FOR_FS Kconfig option Zi Yan
2026-03-23 19:06 ` [RFC PATCH 02/11] mm/khugepaged: remove READ_ONLY_THP_FOR_FS code in collapse_file() Zi Yan
2026-03-23 19:41 ` David Hildenbrand (Arm)
2026-03-23 19:47 ` Zi Yan
2026-03-23 19:53 ` David Hildenbrand (Arm)
2026-03-23 19:59 ` Zi Yan
2026-03-23 20:13 ` David Hildenbrand (Arm)
2026-03-23 20:24 ` Zi Yan
2026-03-23 21:02 ` Matthew Wilcox
2026-03-23 21:05 ` David Hildenbrand (Arm)
2026-03-23 21:11 ` Zi Yan
2026-03-23 21:21 ` David Hildenbrand (Arm)
2026-03-24 0:12 ` Zi Yan
2026-03-24 13:15 ` Baolin Wang
2026-03-23 19:06 ` [RFC PATCH 03/11] mm: remove filemap_nr_thps*() functions Zi Yan
2026-03-23 19:06 ` [RFC PATCH 04/11] mm/huge_memory: remove file_thp_enabled() and its caller Zi Yan
2026-03-23 19:06 ` [RFC PATCH 05/11] mm/huge_memory: remove folio split check for READ_ONLY_THP_FOR_FS Zi Yan
2026-03-23 19:06 ` [RFC PATCH 06/11] mm/truncate: use folio_split() in truncate_inode_partial_folio() Zi Yan
2026-03-23 19:06 ` [RFC PATCH 07/11] fs: remove nr_thp from struct address_space Zi Yan
2026-03-23 19:06 ` [RFC PATCH 08/11] fs: remove READ_ONLY_THP_FOR_FS code Zi Yan
2026-03-23 19:06 ` [RFC PATCH 09/11] fs/btrfs: remove a comment referring to READ_ONLY_THP_FOR_FS Zi Yan
2026-03-23 19:47 ` David Sterba
2026-03-23 19:06 ` [RFC PATCH 10/11] selftests/mm: remove READ_ONLY_THP_FOR_FS test in khugepaged Zi Yan
2026-03-23 21:07 ` Matthew Wilcox
2026-03-24 9:04 ` David Hildenbrand (Arm)
2026-03-24 11:14 ` Zi Yan
2026-03-23 19:06 ` Zi Yan [this message]
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=20260323190644.1714379-12-ziy@nvidia.com \
--to=ziy@nvidia.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=brauner@kernel.org \
--cc=clm@fb.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=dsterba@suse.com \
--cc=jack@suse.cz \
--cc=lance.yang@linux.dev \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=npache@redhat.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shuah@kernel.org \
--cc=songliubraving@fb.com \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
/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