public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Andrea Cervesato via ltp <ltp@lists.linux.it>
To: "Ricardo B. Marliere" <ricardo@marliere.net>,
	"Ricardo B. Marliere" <rbm@suse.com>,
	Linux Test Project <ltp@lists.linux.it>
Subject: Re: [LTP] [PATCH 1/3] mmap001: Convert to new API
Date: Mon, 10 Feb 2025 10:04:56 +0100	[thread overview]
Message-ID: <affc9255-bf3b-4571-9712-2b20e5b974ee@suse.com> (raw)
In-Reply-To: <D7EQ8W8TM84D.T8OZ3RKV2RH3@marliere.net>

Hi!

A few comments below about the code.

On 1/29/25 18:19, Ricardo B. Marliere wrote:
> Hi Andrea,
>
> thanks for reviewing!
>
> On Wed Jan 15, 2025 at 10:14 AM -03, Andrea Cervesato wrote:
>> Hi!
>>
>> On 1/14/25 23:26, Ricardo B. Marliere via ltp wrote:
>>> From: Ricardo B. Marliere <rbm@suse.com>
>>>
>>> Signed-off-by: Ricardo B. Marliere <rbm@suse.com>
>>> ---
>>>    testcases/kernel/syscalls/mmap/mmap001.c | 206 ++++++++-----------------------
>>>    1 file changed, 49 insertions(+), 157 deletions(-)
>>>
>>> diff --git a/testcases/kernel/syscalls/mmap/mmap001.c b/testcases/kernel/syscalls/mmap/mmap001.c
>>> index dabb7d1e4998b1097e179abe23555926f5841117..bc9b4155e8b53f942ef694fdf3187c0e544a97cd 100644
>>> --- a/testcases/kernel/syscalls/mmap/mmap001.c
>>> +++ b/testcases/kernel/syscalls/mmap/mmap001.c
>>> @@ -1,183 +1,75 @@
>>> +// SPDX-License-Identifier: GPL-2.0-or-later
>>>    /*
>>>     * Copyright (C) 2000 Juan Quintela <quintela@fi.udc.es>
>>>     *                    Aaron Laffin <alaffin@sgi.com>
>>> + * Copyright (c) 2025 Linux Test Project
>>> + */
>>> +
>>> +/*\
>>> + * [Description]
>>>     *
>>> - * This program is free software; you can redistribute it and/or
>>> - * modify it under the terms of the GNU General Public License
>>> - * as published by the Free Software Foundation; either version 2
>>> - * of the License, or (at your option) any later version.
>>> - *
>>> - * This program is distributed in the hope that it will be useful,
>>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> - * GNU General Public License for more details.
>>> - *
>>> - * You should have received a copy of the GNU General Public License
>>> - * along with this program; if not, write to the Free Software
>>> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
>>> - *
>>> - * mmap001.c - Tests mmapping a big file and writing it once
>>> + * Tests mmapping a big file and writing it once
>> Description is a bit short and it needs a bit more information. For
>> example, what we expect to see and what could happen during test (SEGV
>> for example).
> Ack.
>
>>> -		if (TEST_RETURN == -1) {
>>> -			tst_resm(TFAIL | TTERRNO,
>>> -				 "munmapping %s failed", filename);
>>> -		} else {
>>> -			tst_resm(TPASS, "munmapping %s successful", filename);
>>> -		}
>>> +	/*
>>> +	 * Seems that if the map area was bad, we'd get SEGV,
>>> +	 * hence we can indicate a PASS.
>>> +	 */
>> If this is true, we need to find a way to test that specific scenario.
>> This can e done by forking a process where test is running and to check
>> if SIGSEGV killed it after calling SAFE_WAITPID()
> Good idea, I kept the original comment and TPASS string but it could
> surely be expanded. What do you think of the following? I'll be sending
> as v2 when the series receive some more reviewing.
>
> diff --git a/testcases/kernel/syscalls/mmap/mmap001.c b/testcases/kernel/syscalls/mmap/mmap001.c
> index bc9b4155e8b5..10ce7a48e7c2 100644
> --- a/testcases/kernel/syscalls/mmap/mmap001.c
> +++ b/testcases/kernel/syscalls/mmap/mmap001.c
> @@ -8,7 +8,8 @@
>   /*\
>    * [Description]
>    *
> - * Tests mmapping a big file and writing it once
> + * This test will map a big file to memory and write to it once,
> + * making sure nothing bad happened in between such as a SIGSEGV.
>    */
>   
>   #include "tst_test.h"
> @@ -25,6 +26,8 @@ static void setup(void)
>   
>   static void run(void)
>   {
> +	pid_t pid;
> +	int status;
>   	char *array;
>   	unsigned int i;
>   	unsigned int pages, memsize;
> @@ -40,20 +43,23 @@ static void run(void)
>   	SAFE_LSEEK(fd, memsize, SEEK_SET);
>   	SAFE_WRITE(SAFE_WRITE_ALL, fd, "\0", 1);
>   
> -	array = SAFE_MMAP(NULL, memsize, PROT_WRITE, MAP_SHARED, fd, 0);
> -
> -	tst_res(TINFO, "touching mmaped memory");
> -	for (i = 0; i < memsize; i++)
> -		array[i] = (char)i;
> -
> -	/*
> -	 * Seems that if the map area was bad, we'd get SEGV,
> -	 * hence we can indicate a PASS.
> -	 */
> -	tst_res(TPASS, "we're still here, mmaped area must be good");
> -
> -	SAFE_MSYNC(array, memsize, MS_SYNC);
> -	SAFE_MUNMAP(array, memsize);
> +	pid = SAFE_FORK();
> +	if (pid == 0) {
> +		array = SAFE_MMAP(NULL, memsize, PROT_WRITE, MAP_SHARED, fd, 0);
> +		tst_res(TINFO, "touching mmapped memory");
> +		for (i = 0; i < memsize; i++)
> +			array[i] = (char)i;
> +		SAFE_MSYNC(array, memsize, MS_SYNC);
> +		SAFE_MUNMAP(array, memsize);
> +		exit(0);
> +	} else {
No need for else here. Remember to call "make check" on the folder to 
verify code correctness. "make check-mmap001" in this case.
Also, I was thinking that we don't have a mechanism to know if file is 
updated or not, so please take a look at my patch on mmap001 (mmap21). 
I'm gonna send a v2 so you can take a look at the final idea.
> +		SAFE_WAITPID(pid, &status, 0);
> +		if (WIFSIGNALED(status) && WEXITSTATUS(status) == SIGSEGV)
> +			tst_res(TFAIL, "test was killed by SIGSEGV");
> +		else
> +			tst_res(TPASS,
> +				"memory was mapped and written to successfully");
> +	}
>   }
>   
>   static void cleanup(void)
> @@ -66,6 +72,7 @@ static struct tst_test test = {
>   	.setup = setup,
>   	.test_all = run,
>   	.cleanup = cleanup,
> +	.forks_child = 1,
>   	.options =
>   		(struct tst_option[]){
>   			{ "m:", &m_copt,
>
>
>
>> Kind regards,
>> Andrea
> Thank you,
> -	Ricardo.
>
>
Andrea

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2025-02-10  9:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-14 22:26 [LTP] [PATCH 0/3] syscalls/mmap: Refactor a few tests to the new API Ricardo B. Marliere via ltp
2025-01-14 22:26 ` [LTP] [PATCH 1/3] mmap001: Convert to " Ricardo B. Marliere via ltp
2025-01-15 13:14   ` Andrea Cervesato via ltp
2025-01-29 17:19     ` Ricardo B. Marliere via ltp
2025-02-10  9:04       ` Andrea Cervesato via ltp [this message]
2025-01-14 22:26 ` [LTP] [PATCH 2/3] mmap03: " Ricardo B. Marliere via ltp
2025-02-27 14:31   ` Petr Vorel
2025-01-14 22:26 ` [LTP] [PATCH 3/3] mmap10: " Ricardo B. Marliere via ltp

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=affc9255-bf3b-4571-9712-2b20e5b974ee@suse.com \
    --to=ltp@lists.linux.it \
    --cc=andrea.cervesato@suse.com \
    --cc=rbm@suse.com \
    --cc=ricardo@marliere.net \
    /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