file_setup_area() currently allocates anonymous memory, fills it,
and writes it into the backing file used for collapse testing.

Instead of copying data through write(), resize the file with
ftruncate(), map it directly with MAP_SHARED, and initialize the
mapped area in place.

This simplifies the setup path and avoids the need for explicit
partial write handling.

Signed-off-by: Vineet Agarwal <[email protected]>

v3 -> v4:
  - Restore unrelated blank line removal
  - Restore original close()/munmap() ordering
---
 tools/testing/selftests/mm/khugepaged.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/mm/khugepaged.c 
b/tools/testing/selftests/mm/khugepaged.c
index 3fe7ef04ac62..6e929a484a1b 100644
--- a/tools/testing/selftests/mm/khugepaged.c
+++ b/tools/testing/selftests/mm/khugepaged.c
@@ -381,9 +381,19 @@ static void *file_setup_area(int nr_hpages)
        }
 
        size = nr_hpages * hpage_pmd_size;
-       p = alloc_mapping(nr_hpages);
+       if (ftruncate(fd, size)) {
+               perror("ftruncate()");
+               close(fd);
+               exit(EXIT_FAILURE);
+       }
+       p = mmap(BASE_ADDR, size, PROT_READ | PROT_WRITE,
+               MAP_SHARED, fd, 0);
+       if (p == MAP_FAILED || p != BASE_ADDR) {
+               perror("mmap()");
+               close(fd);
+               exit(EXIT_FAILURE);
+       }
        fill_memory(p, 0, size);
-       write(fd, p, size);
        close(fd);
        munmap(p, size);
        success("OK");
-- 
2.54.0


Reply via email to