diff options
author | Zorro Lang <zlang@kernel.org> | 2024-03-12 00:20:29 +0800 |
---|---|---|
committer | Zorro Lang <zlang@kernel.org> | 2024-03-12 11:39:52 +0800 |
commit | 790a9e7c3c94f1a576e05478b832a423252c3edd (patch) | |
tree | 02534b929b124f7f1c2390632ed60cce8bde04f4 | |
parent | 7bad5527e2bcaf8514a54e1aaed3e90c1a065505 (diff) | |
download | xfstests-dev-790a9e7c3c94f1a576e05478b832a423252c3edd.tar.gz |
common/rc: notrun if io_uring is disabled by sysctl
If kernel supports io_uring, userspace still can/might disable that
supporting by set /proc/sys/kernel/io_uring_disabled=2. Let's notrun
if io_uring is disabled by that way.
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Zorro Lang <zlang@kernel.org>
-rw-r--r-- | README | 6 | ||||
-rw-r--r-- | common/rc | 10 | ||||
-rw-r--r-- | src/feature.c | 19 |
3 files changed, 28 insertions, 7 deletions
@@ -142,6 +142,12 @@ Setup Environment https://www.lscdweb.com/registered/udf_verifier.html, then copy the udf_test binary to xfstests/src/. +8. (optional) To do io_uring related testing, please make sure below 3 things: + 1) kernel is built with CONFIG_IO_URING=y + 2) sysctl -w kernel.io_uring_disabled=0 (or set it to 2 to disable io_uring + testing dynamically if kernel supports) + 3) install liburing development package contains liburing.h before building + fstests For example, to run the tests with loopback partitions: @@ -2334,6 +2334,8 @@ _require_aiodio() # this test requires that the kernel supports IO_URING _require_io_uring() { + local n + $here/src/feature -R case $? in 0) @@ -2341,6 +2343,14 @@ _require_io_uring() 1) _notrun "kernel does not support IO_URING" ;; + 2) + n=$(sysctl -n kernel.io_uring_disabled 2>/dev/null) + if [ "$n" != "0" ];then + _notrun "io_uring isn't enabled totally by admin" + else + _fail "unexpected EPERM error, please check selinux or something else" + fi + ;; *) _fail "unexpected error testing for IO_URING support" ;; diff --git a/src/feature.c b/src/feature.c index 941f96fb30..7e474ce558 100644 --- a/src/feature.c +++ b/src/feature.c @@ -232,15 +232,20 @@ check_uring_support(void) int err; err = io_uring_queue_init(1, &ring, 0); - if (err == 0) + switch (err) { + case 0: return 0; - - if (err == -ENOSYS) /* CONFIG_IO_URING=n */ + case -ENOSYS: + /* CONFIG_IO_URING=n */ return 1; - - fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", - strerror(-err)); - return 2; + case -EPERM: + /* Might be due to sysctl io_uring_disabled isn't 0 */ + return 2; + default: + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", + strerror(-err)); + return 100; + } #else /* liburing is unavailable, assume IO_URING is unsupported */ return 1; |