diff mbox series

[v2] syscalls/fanotify07: add stop_children() to cleanup()

Message ID 20211105090200.103485-1-zhaogongyi@huawei.com
State Changes Requested
Headers show
Series [v2] syscalls/fanotify07: add stop_children() to cleanup() | expand

Commit Message

Zhao Gongyi Nov. 5, 2021, 9:02 a.m. UTC
When we run the testcase simultaneously, and the ulimit of open
files is small, the testcase will fail and remain many while(1)
tasks in system, it makes the system very stuck.

Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
---
v1->v2: add stop_children() to cleanup(),suggested by Amir and Matthew.

 testcases/kernel/syscalls/fanotify/fanotify07.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Petr Vorel Nov. 16, 2021, 10:56 a.m. UTC | #1
Hi all,

> When we run the testcase simultaneously, and the ulimit of open
> files is small, the testcase will fail and remain many while(1)
> tasks in system, it makes the system very stuck.

> Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
> ---
> v1->v2: add stop_children() to cleanup(),suggested by Amir and Matthew.

>  testcases/kernel/syscalls/fanotify/fanotify07.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)

> diff --git a/testcases/kernel/syscalls/fanotify/fanotify07.c b/testcases/kernel/syscalls/fanotify/fanotify07.c
> index cc56d9019..40d1b96ce 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify07.c
> +++ b/testcases/kernel/syscalls/fanotify/fanotify07.c
> @@ -86,15 +86,21 @@ static int stop_children(void)
>  	int child_ret;
>  	int i, ret = 0;

> -	for (i = 0; i < MAX_CHILDREN; i++)
> +	for (i = 0; i < MAX_CHILDREN; i++) {
> +		if (!child_pid[i])
> +			continue;
>  		SAFE_KILL(child_pid[i], SIGKILL);
> +	}

>  	for (i = 0; i < MAX_CHILDREN; i++) {
> +		if (!child_pid[i])
> +			continue;
>  		SAFE_WAITPID(child_pid[i], &child_ret, 0);
>  		if (!WIFSIGNALED(child_ret))
>  			ret = 1;
I slightly prefer instead of using memset code which Amir suggested:
		child_pid[i] = 0;
>  	}

Otherwise LGTM.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

NOTE: patch was corrupted, please take care next time
(error: corrupt patch at line 131)
Also

Kind regards,
Petr

> +	memset(child_pid, 0, sizeof(pid_t) * MAX_CHILDREN);
>  	return ret;
>  }

> @@ -190,6 +196,8 @@ static void setup(void)

>  static void cleanup(void)
>  {
> +	stop_children();
> +
>  	if (fd_notify > 0)
>  		SAFE_CLOSE(fd_notify);
>  }
> @@ -201,6 +209,7 @@ static struct tst_test test = {
>  	.needs_tmpdir = 1,
>  	.forks_child = 1,
>  	.needs_root = 1,
>  };

>  #else
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/fanotify/fanotify07.c b/testcases/kernel/syscalls/fanotify/fanotify07.c
index cc56d9019..40d1b96ce 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify07.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify07.c
@@ -86,15 +86,21 @@  static int stop_children(void)
 	int child_ret;
 	int i, ret = 0;

-	for (i = 0; i < MAX_CHILDREN; i++)
+	for (i = 0; i < MAX_CHILDREN; i++) {
+		if (!child_pid[i])
+			continue;
 		SAFE_KILL(child_pid[i], SIGKILL);
+	}

 	for (i = 0; i < MAX_CHILDREN; i++) {
+		if (!child_pid[i])
+			continue;
 		SAFE_WAITPID(child_pid[i], &child_ret, 0);
 		if (!WIFSIGNALED(child_ret))
 			ret = 1;
 	}

+	memset(child_pid, 0, sizeof(pid_t) * MAX_CHILDREN);
 	return ret;
 }

@@ -190,6 +196,8 @@  static void setup(void)

 static void cleanup(void)
 {
+	stop_children();
+
 	if (fd_notify > 0)
 		SAFE_CLOSE(fd_notify);
 }
@@ -201,6 +209,7 @@  static struct tst_test test = {
 	.needs_tmpdir = 1,
 	.forks_child = 1,
 	.needs_root = 1,
 };

 #else
--
2.17.1