Re: [LTP] [PATCH 1/1] Skip wqueue testcases when KEY_NOTIFICATIONS not enabled.

Petr Vorel
2025-12-08T15:15:50Z

Hi Mingyu, Meng,

I sent an alternative approach for this. Could you please retest it.

https://lore.kernel.org/ltp/20251208150542.704006-1-pvorel@suse.cz/T/#t
https://patchwork.ozlabs.org/project/ltp/list/?series=484779&state=*

> From: Mingyu Li <limy83@chinatelecom.cn>

> Skip wqueue testcases when KEY_NOTIFICATIONS not enabled.

> wqueue testcases relys on both CONFIG_WATCH_QUEUE
> and CONFIG_KEY_NOTIFICATIONS. keyctl will return EOPNOTSUPP
> when CONFIG_KEY_NOTIFICATIONS is not enabled and the wqueue
> testcases will failed when timeout. So we should skip
> testcases when we got EOPNOTSUPP from keyctl.

> Reported-by: Meng Yang <yangm50@chinatelecom.cn>
> Signed-off-by: Mingyu Li <limy83@chinatelecom.cn>
> ---
> testcases/kernel/watchqueue/common.h | 22 ++++++++++++++++++++--
> 1 file changed, 20 insertions(+), 2 deletions(-)

> diff --git a/testcases/kernel/watchqueue/common.h b/testcases/kernel/watchqueue/common.h
> index 92e8f079c..e9100ab52 100644
> --- a/testcases/kernel/watchqueue/common.h
> +++ b/testcases/kernel/watchqueue/common.h
> @@ -85,8 +85,26 @@ static inline key_serial_t wqueue_add_key(int fd)
> if (key == -1)
> tst_brk(TBROK, "add_key error: %s", tst_strerrno(errno));

> - keyctl(KEYCTL_WATCH_KEY, key, fd, 0x01);
> - keyctl(KEYCTL_WATCH_KEY, KEY_SPEC_SESSION_KEYRING, fd, 0x02);
> + TEST(keyctl(KEYCTL_WATCH_KEY, key, fd, 0x01));
> + if (TST_RET) {
> + switch (TST_ERR) {
> + case EOPNOTSUPP:
> + tst_brk(TCONF | TTERRNO, "CONFIG_KEY_NOTIFICATION is not set!");
nit: "| TTERRNO" is not needed, because we know the content of errno:
EOPNOTSUPP.

> + break;
> + default:
> + tst_res(TINFO, "CONFIG_KEY_NOTIFICATION is set.");
> + }

If your approach is taken, I would simplify it (we don't need TINFO)

if (keyctl(KEYCTL_WATCH_KEY, key, fd, 0x01) && errno == EOPNOTSUPP)
tst_brk(TCONF, "CONFIG_KEY_NOTIFICATION is not set!");

if (keyctl(KEYCTL_WATCH_KEY, KEY_SPEC_SESSION_KEYRING, fd, 0x02) && errno == EOPNOTSUPP)
tst_brk(TCONF, "CONFIG_KEY_NOTIFICATION is not set!");

Kind regards,
Petr

> + }
> + TEST(keyctl(KEYCTL_WATCH_KEY, KEY_SPEC_SESSION_KEYRING, fd, 0x02));
> + if (TST_RET) {
> + switch (TST_ERR) {
> + case EOPNOTSUPP:
> + tst_brk(TCONF | TTERRNO, "CONFIG_KEY_NOTIFICATION is not set!");
> + break;
> + default:
> + tst_res(TINFO, "CONFIG_KEY_NOTIFICATION is set.");
> + }
> + }

> return key;
> }