diff mbox series

[v1] Check for maximum available pids in dio_sparse.c

Message ID 20211216093115.23982-1-andrea.cervesato@suse.com
State Superseded
Headers show
Series [v1] Check for maximum available pids in dio_sparse.c | expand

Commit Message

Andrea Cervesato Dec. 16, 2021, 9:31 a.m. UTC
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/io/ltp-aiodio/dio_sparse.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

Comments

Cyril Hrubis Jan. 31, 2022, 4:18 p.m. UTC | #1
Hi!
>  static void setup(void)
>  {
>  	struct stat sb;
> +	int max_pids;
>  
>  	numchildren = 1000;
>  	writesize = 1024;
> @@ -69,6 +70,13 @@ static void setup(void)
>  	if (tst_parse_int(str_numchildren, &numchildren, 1, INT_MAX))
>  		tst_brk(TBROK, "Invalid number of children '%s'", str_numchildren);
>  
> +	max_pids = tst_get_free_pids();
> +	if (numchildren > max_pids) {
> +		numchildren = max_pids;
> +
> +		tst_res(TCONF, "Number of children reduced to %d due to system limitations", numchildren);
                          ^
			  If we are going to limit the number of
			  children this should be TINFO

And if we are going to skip the test it should be tst_brk(TCONF, ...)

Either way tst_res(TCONF, ...) does not make much sense in this case.

> +	}

I guess that we should do a similar check in all the io tests that fork
children, so we may as well put it into some kind of library function.

Maybe just the common.h with something as:

static inline void check_children(unsigned int numchildren)
{
	if (numchildren > tst_get_free_pids)
		tst_brk(TCONF, "....");
}

or:

static inline void check_children(unsigned int *numchilren)
{
	...
}

In case that we want to print the info message and modify the value.

>  	if (tst_parse_filesize(str_writesize, &writesize, 1, LLONG_MAX))
>  		tst_brk(TBROK, "Invalid write blocks size '%s'", str_writesize);
>  
> @@ -129,10 +137,10 @@ static struct tst_test test = {
>  	.needs_tmpdir = 1,
>  	.forks_child = 1,
>  	.options = (struct tst_option[]) {
> -		{"n:", &str_numchildren, "Number of threads (default 1000)"},
> -		{"w:", &str_writesize, "Size of writing blocks (default 1K)"},
> -		{"s:", &str_filesize, "Size of file (default 100M)"},
> -		{"o:", &str_offset, "File offset (default 0)"},
> -		{}
> +		{"n:", &str_numchildren, "-n\t Number of threads (default 1000)"},
> +		{"w:", &str_writesize, "-w\t Size of writing blocks (default 1K)"},
> +		{"s:", &str_filesize, "-s\t Size of file (default 100M)"},
> +		{"o:", &str_offset, "-o\t File offset (default 0)"},
> +		{},

This part is certainly wrong.
Andrea Cervesato Feb. 1, 2022, 9:27 a.m. UTC | #2
Hi!

On 1/31/22 17:18, Cyril Hrubis wrote:
> Hi!
>>   static void setup(void)
>>   {
>>   	struct stat sb;
>> +	int max_pids;
>>   
>>   	numchildren = 1000;
>>   	writesize = 1024;
>> @@ -69,6 +70,13 @@ static void setup(void)
>>   	if (tst_parse_int(str_numchildren, &numchildren, 1, INT_MAX))
>>   		tst_brk(TBROK, "Invalid number of children '%s'", str_numchildren);
>>   
>> +	max_pids = tst_get_free_pids();
>> +	if (numchildren > max_pids) {
>> +		numchildren = max_pids;
>> +
>> +		tst_res(TCONF, "Number of children reduced to %d due to system limitations", numchildren);
>                            ^
> 			  If we are going to limit the number of
> 			  children this should be TINFO
>
> And if we are going to skip the test it should be tst_brk(TCONF, ...)
>
> Either way tst_res(TCONF, ...) does not make much sense in this case.
>
>> +	}
> I guess that we should do a similar check in all the io tests that fork
> children, so we may as well put it into some kind of library function.
Yes, this can be done in another patch for all the tests
> Maybe just the common.h with something as:
>
> static inline void check_children(unsigned int numchildren)
> {
> 	if (numchildren > tst_get_free_pids)
> 		tst_brk(TCONF, "....");
> }
>
> or:
>
> static inline void check_children(unsigned int *numchilren)
> {
> 	...
> }
>
> In case that we want to print the info message and modify the value.
>
>>   	if (tst_parse_filesize(str_writesize, &writesize, 1, LLONG_MAX))
>>   		tst_brk(TBROK, "Invalid write blocks size '%s'", str_writesize);
>>   
>> @@ -129,10 +137,10 @@ static struct tst_test test = {
>>   	.needs_tmpdir = 1,
>>   	.forks_child = 1,
>>   	.options = (struct tst_option[]) {
>> -		{"n:", &str_numchildren, "Number of threads (default 1000)"},
>> -		{"w:", &str_writesize, "Size of writing blocks (default 1K)"},
>> -		{"s:", &str_filesize, "Size of file (default 100M)"},
>> -		{"o:", &str_offset, "File offset (default 0)"},
>> -		{}
>> +		{"n:", &str_numchildren, "-n\t Number of threads (default 1000)"},
>> +		{"w:", &str_writesize, "-w\t Size of writing blocks (default 1K)"},
>> +		{"s:", &str_filesize, "-s\t Size of file (default 100M)"},
>> +		{"o:", &str_offset, "-o\t File offset (default 0)"},
>> +		{},
> This part is certainly wrong.
>
diff mbox series

Patch

diff --git a/testcases/kernel/io/ltp-aiodio/dio_sparse.c b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
index 929adbfba..5236539ff 100644
--- a/testcases/kernel/io/ltp-aiodio/dio_sparse.c
+++ b/testcases/kernel/io/ltp-aiodio/dio_sparse.c
@@ -59,6 +59,7 @@  static void dio_sparse(int fd, int align, long long fs, int ws, long long off)
 static void setup(void)
 {
 	struct stat sb;
+	int max_pids;
 
 	numchildren = 1000;
 	writesize = 1024;
@@ -69,6 +70,13 @@  static void setup(void)
 	if (tst_parse_int(str_numchildren, &numchildren, 1, INT_MAX))
 		tst_brk(TBROK, "Invalid number of children '%s'", str_numchildren);
 
+	max_pids = tst_get_free_pids();
+	if (numchildren > max_pids) {
+		numchildren = max_pids;
+
+		tst_res(TCONF, "Number of children reduced to %d due to system limitations", numchildren);
+	}
+
 	if (tst_parse_filesize(str_writesize, &writesize, 1, LLONG_MAX))
 		tst_brk(TBROK, "Invalid write blocks size '%s'", str_writesize);
 
@@ -129,10 +137,10 @@  static struct tst_test test = {
 	.needs_tmpdir = 1,
 	.forks_child = 1,
 	.options = (struct tst_option[]) {
-		{"n:", &str_numchildren, "Number of threads (default 1000)"},
-		{"w:", &str_writesize, "Size of writing blocks (default 1K)"},
-		{"s:", &str_filesize, "Size of file (default 100M)"},
-		{"o:", &str_offset, "File offset (default 0)"},
-		{}
+		{"n:", &str_numchildren, "-n\t Number of threads (default 1000)"},
+		{"w:", &str_writesize, "-w\t Size of writing blocks (default 1K)"},
+		{"s:", &str_filesize, "-s\t Size of file (default 100M)"},
+		{"o:", &str_offset, "-o\t File offset (default 0)"},
+		{},
 	},
 };