On 15.10.25 10:33, Itamar Dalal wrote:
Add a new test `migrate.cow_after_fork` that verifies correct RMAP handling of Copy-On-Write (COW) pages after fork().
Before a write, the parent and child share the same PFN. After a write, the child’s PFN differs. This confirms that proper COW duplication occurred and that RMAP correctly tracks page ownership transitions during COW events.
Signed-off-by: Itamar-Dalal <dalalitamar@gmail.com
mailto:dalalitamar@gmail.com>
tools/testing/selftests/mm/rmap.c | 45 ++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/mm/rmap.c b/tools/testing/ selftests/mm/rmap.c index 13f7bccfd0a9..2ba3361fecf0 100644 --- a/tools/testing/selftests/mm/rmap.c +++ b/tools/testing/selftests/mm/rmap.c @@ -430,4 +430,47 @@ TEST_F(migrate, ksm) propagate_children(_metadata, data); }
-TEST_HARNESS_MAIN +TEST_F(migrate, cow_after_fork) +{
- struct global_data *data = &self->data;
- int status;
- pid_t pid;
- unsigned long parent_pfn, child_pfn;
- int pagemap_fd;
- char *region;
- /* Map private anonymous memory and fault it in */
- region = mmap(NULL, data->mapsize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- ASSERT_NE(region, MAP_FAILED);
- memset(region, 0xaa, data->mapsize);
- pagemap_fd = open("/proc/self/pagemap", O_RDONLY);
- ASSERT_NE(pagemap_fd, -1);
- parent_pfn = pagemap_get_pfn(pagemap_fd, region);
- close(pagemap_fd);
- pid = fork();
- ASSERT_NE(pid, -1);
- if (pid == 0) {
- /* Child: write to trigger COW */
- region[0] = 0xbb;
- pagemap_fd = open("/proc/self/pagemap", O_RDONLY);
- ASSERT_NE(pagemap_fd, -1);
- child_pfn = pagemap_get_pfn(pagemap_fd, region);
- close(pagemap_fd);
- /* Expect PFN to differ after write (COW happened) */
- if (child_pfn == parent_pfn)
- _exit(FAIL_ON_CHECK);
- _exit(0);
- }
- waitpid(pid, &status, 0);
- ASSERT_EQ(WEXITSTATUS(status), 0);
- munmap(region, data->mapsize);
+}
We have excessive cow tests in cow.c, that are independent of any PFN checks.
So I don't think we need this.
BTW, I never received a mail that shows up right-aligned in my mail client.
Seems to be because of
Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
<div dir=3D"rtl"
The whole attachment should be dropped. Did you send this with git-send-email? :)