Message ID | 20220330090817.21950-1-andrea.cervesato@suse.de |
---|---|
State | Superseded |
Headers | show |
Series | [v2] Fix wqueue09 according with 5.17 kernel updates | expand |
Hi Andrea, On 2022-03-30 11:08, Andrea Cervesato wrote: > This patch fixes also the issue of loosing events on big number of > iterations > such as -i 1000. Unfortunately when testing on machine with older kernel (older Tumbleweed with 5.9.1-1-default) it still blocks and then timeout: wqueue09.c:52: TPASS: Meta loss notification received common.h:134: TINFO: Reading watch queue events NOTE: I haven't tested it on 5.17 yet. Kind regards, Petr
Hi all, > Hi Andrea, > On 2022-03-30 11:08, Andrea Cervesato wrote: > > This patch fixes also the issue of loosing events on big number of > > iterations > > such as -i 1000. > Unfortunately when testing on machine with older kernel (older Tumbleweed > with > 5.9.1-1-default) it still blocks and then timeout: > wqueue09.c:52: TPASS: Meta loss notification received > common.h:134: TINFO: Reading watch queue events FYI on long enough -i (513 in my case) buf_len = SAFE_READ(0, fd, buffer, sizeof(buffer)); This is regardless kernel version (tested on Tumbleweed 5.17.0-3.g6cba016-default and SLES 5.14.21) => easily reproducible. NOTE: keyctl() return value is always 0. Also not sure why we are not revoking key any more (removed in this patchset). Kind regards, Petr > NOTE: I haven't tested it on 5.17 yet. > Kind regards, > Petr
Hi Petr, I guess the bug coming out from older versions of the kernel is related with kernel patch 3b4c0371928c17af03e8397ac842346624017ce6 and the way watch_queue was implemented. Probably test was finding a kernel bug which is now solved with that patch and, with a proper wqueue09 implementation, this bug is not showing anymore with high -i values. Please check the latest version of the wqueue09 patch that I've sent. Andrea On 3/31/22 08:21, Petr Vorel wrote: > Hi all, > >> Hi Andrea, >> On 2022-03-30 11:08, Andrea Cervesato wrote: >>> This patch fixes also the issue of loosing events on big number of >>> iterations >>> such as -i 1000. >> Unfortunately when testing on machine with older kernel (older Tumbleweed >> with >> 5.9.1-1-default) it still blocks and then timeout: >> wqueue09.c:52: TPASS: Meta loss notification received >> common.h:134: TINFO: Reading watch queue events > FYI on long enough -i (513 in my case) > buf_len = SAFE_READ(0, fd, buffer, sizeof(buffer)); > > This is regardless kernel version (tested on Tumbleweed 5.17.0-3.g6cba016-default > and SLES 5.14.21) => easily reproducible. > > NOTE: keyctl() return value is always 0. > > Also not sure why we are not revoking key any more (removed in this patchset). > > Kind regards, > Petr > >> NOTE: I haven't tested it on 5.17 yet. >> Kind regards, >> Petr
diff --git a/testcases/kernel/watchqueue/wqueue09.c b/testcases/kernel/watchqueue/wqueue09.c index 55d567249..e632be094 100644 --- a/testcases/kernel/watchqueue/wqueue09.c +++ b/testcases/kernel/watchqueue/wqueue09.c @@ -11,10 +11,13 @@ #define _GNU_SOURCE +#include <unistd.h> #include "tst_test.h" #include "lapi/keyctl.h" #include "common.h" +#define WATCH_QUEUE_NOTE_SIZE 128 + static int data_lost; static void saw_data_loss(struct watch_notification *n, @@ -29,14 +32,15 @@ static void saw_data_loss(struct watch_notification *n, static void run(void) { - int fd; + int fd, i, iterations; key_serial_t key; fd = wqueue_watch(1, &wqueue_filter); - key = wqueue_add_key(fd); - keyctl(KEYCTL_UPDATE, key, "b", 1); - keyctl(KEYCTL_REVOKE, key); + + iterations = (getpagesize() / WATCH_QUEUE_NOTE_SIZE) * 2; + for (i = 0; i < iterations; i++) + keyctl(KEYCTL_UPDATE, key, "b", 1); data_lost = 0; while (!data_lost)
Kernel 5.17 introduced many changes in the watch_queue support. In particular, commit 3b4c0371928c17af03e8397ac842346624017ce6 changes the behaviour of IOC_WATCH_QUEUE_SET_SIZE and ioctl control over watch_queue buffer size: now we need to generate more events than before. In particular, more than the bitmap size to the number of notes. Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de> --- This patch fixes also the issue of loosing events on big number of iterations such as -i 1000. testcases/kernel/watchqueue/wqueue09.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)