[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Ytqpz03yRq+DlAdq@xz-m1.local>
Date: Fri, 22 Jul 2022 09:44:47 -0400
From: Peter Xu <peterx@...hat.com>
To: David Hildenbrand <david@...hat.com>
Cc: linux-kernel@...r.kernel.org, linux-mm@...ck.org,
Nadav Amit <nadav.amit@...il.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Andrea Arcangeli <aarcange@...hat.com>
Subject: Re: [PATCH v3 2/3] selftests: soft-dirty: Add test for mprotect
On Fri, Jul 22, 2022 at 09:17:34AM +0200, David Hildenbrand wrote:
> On 21.07.22 20:33, Peter Xu wrote:
> > Add two soft-diryt test cases for mprotect() on both anon or file.
>
> s/soft-diryt/soft-dirty/
Fixed.
>
> >
> > Signed-off-by: Peter Xu <peterx@...hat.com>
> > ---
> > tools/testing/selftests/vm/soft-dirty.c | 69 ++++++++++++++++++++++++-
> > 1 file changed, 68 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/testing/selftests/vm/soft-dirty.c b/tools/testing/selftests/vm/soft-dirty.c
> > index 08ab62a4a9d0..7d93906aa43f 100644
> > --- a/tools/testing/selftests/vm/soft-dirty.c
> > +++ b/tools/testing/selftests/vm/soft-dirty.c
> > @@ -121,13 +121,78 @@ static void test_hugepage(int pagemap_fd, int pagesize)
> > free(map);
> > }
> >
> > +static void test_mprotect(int pagemap_fd, int pagesize, bool anon)
> > +{
> > + const char *type[] = {"file", "anon"};
> > + const char *fname = "./soft-dirty-test-file";
> > + int test_fd;
> > + char *map;
>
> Instead of fname, unlink, open, close, unlink you can use a tmpfile
>
> FILE *file;
>
> file = tmpfile();
> if (!file) {
> ksft_test_result_fail("tmpfile() failed\n");
> return;
> }
> test_fd = fileno(file);
Note that tmpfile() should by default fetch from /tmp which is very
possibly a tmpfs afaict. It's tricky in this special test case since I
don't think tmpfs can trigger this bug (shmem doesn't define page_mkwrite).
I wanted to create under this dir to make the best possible bet to trigger
the bug. E.g. major fs will works like xfs, btrfs, extN. It'll stop work
if someone clones the Linux repo under tmpfs but it's rare.
>
> > +
> > + if (anon) {
> > + map = mmap(NULL, pagesize, PROT_READ|PROT_WRITE,
> > + MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
> > + if (!map)
> > + ksft_exit_fail_msg("anon mmap failed\n");
> > + } else {
> > + unlink(fname);
> > + test_fd = open(fname, O_RDWR | O_CREAT);
> > + if (test_fd < 0) {
> > + ksft_test_result_skip("Test %s huge page allocation\n", __func__);
>
> Wrong copy-paste I assume :)
Yeh :) I'll fix it.
>
> > + return;
> > + }
> > + ftruncate(test_fd, pagesize);
> > + map = mmap(NULL, pagesize, PROT_READ|PROT_WRITE,
> > + MAP_SHARED, test_fd, 0);
> > + if (!map)
> > + ksft_exit_fail_msg("file mmap failed\n");
> > + }
> > +
>
> Apart from that LGTM.
Thanks,
--
Peter Xu
Powered by blists - more mailing lists