diff mbox series

[v1] Fix synchronization problem with dio tests

Message ID 20240129101448.14463-1-andrea.cervesato@suse.de
State Superseded
Headers show
Series [v1] Fix synchronization problem with dio tests | expand

Commit Message

Andrea Cervesato Jan. 29, 2024, 10:14 a.m. UTC
From: Andrea Cervesato <andrea.cervesato@suse.com>

When system is really fast processing I/O syscalls, multiple childrean
running I/O operations might lock the parent, causing
tst_reap_childrean() to stuck. By adding a small usleep at the
end of the reading I/O operations, which are used by dio_append and
dio_read tests, we ensure that system has enough breath to end tests
correctly and to process children exit.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/io/ltp-aiodio/common.h | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Petr Vorel Jan. 29, 2024, 10:32 a.m. UTC | #1
Hi Andrea,

> When system is really fast processing I/O syscalls, multiple childrean
> running I/O operations might lock the parent, causing
> tst_reap_childrean() to stuck. By adding a small usleep at the
> end of the reading I/O operations, which are used by dio_append and
> dio_read tests, we ensure that system has enough breath to end tests
> correctly and to process children exit.

Thanks for fixing this! Test already does some usleep(100).

For a record, this triggered a failure on s39Ox on SLE 15-SP6.

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

Kind regards,
Petr
Cyril Hrubis Jan. 29, 2024, 3:01 p.m. UTC | #2
Hi!
> When system is really fast processing I/O syscalls, multiple childrean
> running I/O operations might lock the parent, causing
> tst_reap_childrean() to stuck. By adding a small usleep at the
> end of the reading I/O operations, which are used by dio_append and
> dio_read tests, we ensure that system has enough breath to end tests
> correctly and to process children exit.

This does smell like a kernel bug to be honest.

Which test is this? How to reproduce?

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
>  testcases/kernel/io/ltp-aiodio/common.h | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/testcases/kernel/io/ltp-aiodio/common.h b/testcases/kernel/io/ltp-aiodio/common.h
> index 200bbe18e..281072c3b 100644
> --- a/testcases/kernel/io/ltp-aiodio/common.h
> +++ b/testcases/kernel/io/ltp-aiodio/common.h
> @@ -90,6 +90,8 @@ static inline void io_read(const char *filename, int filesize, volatile int *run
>  			if (!*run_child || !tst_remaining_runtime())
>  				goto exit;
>  		}
> +
> +		usleep(100);
>  	}
>  
>  exit:
> @@ -121,6 +123,8 @@ static inline void io_read_eof(const char *filename, volatile int *run_child)
>  				break;
>  			}
>  		}
> +
> +		usleep(100);
>  	}
>  
>  	SAFE_CLOSE(fd);
> -- 
> 2.35.3
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp
Andrea Cervesato Jan. 29, 2024, 3:41 p.m. UTC | #3
Hi!

On 1/29/24 16:01, Cyril Hrubis wrote:
> Hi!
>> When system is really fast processing I/O syscalls, multiple childrean
>> running I/O operations might lock the parent, causing
>> tst_reap_childrean() to stuck. By adding a small usleep at the
>> end of the reading I/O operations, which are used by dio_append and
>> dio_read tests, we ensure that system has enough breath to end tests
>> correctly and to process children exit.
> This does smell like a kernel bug to be honest.
I thought the same at first, but I didn't find issues in the kernel. We 
can take a look deeper for sure.
> Which test is this? How to reproduce?
>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>>   testcases/kernel/io/ltp-aiodio/common.h | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/testcases/kernel/io/ltp-aiodio/common.h b/testcases/kernel/io/ltp-aiodio/common.h
>> index 200bbe18e..281072c3b 100644
>> --- a/testcases/kernel/io/ltp-aiodio/common.h
>> +++ b/testcases/kernel/io/ltp-aiodio/common.h
>> @@ -90,6 +90,8 @@ static inline void io_read(const char *filename, int filesize, volatile int *run
>>   			if (!*run_child || !tst_remaining_runtime())
>>   				goto exit;
>>   		}
>> +
>> +		usleep(100);
>>   	}
>>   
>>   exit:
>> @@ -121,6 +123,8 @@ static inline void io_read_eof(const char *filename, volatile int *run_child)
>>   				break;
>>   			}
>>   		}
>> +
>> +		usleep(100);
>>   	}
>>   
>>   	SAFE_CLOSE(fd);
>> -- 
>> 2.35.3
>>
>>
>> -- 
>> Mailing list info: https://lists.linux.it/listinfo/ltp

Andrea
Petr Vorel Jan. 29, 2024, 5:36 p.m. UTC | #4
> Hi!

> On 1/29/24 16:01, Cyril Hrubis wrote:
> > Hi!
> > > When system is really fast processing I/O syscalls, multiple childrean
> > > running I/O operations might lock the parent, causing
> > > tst_reap_childrean() to stuck. By adding a small usleep at the
> > > end of the reading I/O operations, which are used by dio_append and
> > > dio_read tests, we ensure that system has enough breath to end tests
> > > correctly and to process children exit.
> > This does smell like a kernel bug to be honest.
> I thought the same at first, but I didn't find issues in the kernel. We can
> take a look deeper for sure.
> > Which test is this? How to reproduce?

FYI It's ADI000 => dio_append (without params), which is failing on s39Ox on SLE
15-SP6. It runs pretty quickly on other common archs.

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/kernel/io/ltp-aiodio/common.h b/testcases/kernel/io/ltp-aiodio/common.h
index 200bbe18e..281072c3b 100644
--- a/testcases/kernel/io/ltp-aiodio/common.h
+++ b/testcases/kernel/io/ltp-aiodio/common.h
@@ -90,6 +90,8 @@  static inline void io_read(const char *filename, int filesize, volatile int *run
 			if (!*run_child || !tst_remaining_runtime())
 				goto exit;
 		}
+
+		usleep(100);
 	}
 
 exit:
@@ -121,6 +123,8 @@  static inline void io_read_eof(const char *filename, volatile int *run_child)
 				break;
 			}
 		}
+
+		usleep(100);
 	}
 
 	SAFE_CLOSE(fd);