We might have URING #defined at build time, but be running on a kernel which does not support it. For that reason, we should not exit with an error if io_uring_queue_init() fails with ENOSYS. We can just note the lack of support and skip all future io_uring operations. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> --- diff --git a/ltp/fsstress.c b/ltp/fsstress.c index 22df5e38..73751935 100644 --- a/ltp/fsstress.c +++ b/ltp/fsstress.c @@ -35,6 +35,7 @@ io_context_t io_ctx; #include <liburing.h> #define URING_ENTRIES 1 struct io_uring ring; +bool have_io_uring; /* to indicate runtime availability */ #endif #include <sys/syscall.h> #include <sys/xattr.h> @@ -706,9 +707,15 @@ int main(int argc, char **argv) } #endif #ifdef URING + have_io_uring = true; + /* If ENOSYS, just ignore uring, other errors are fatal. */ if (io_uring_queue_init(URING_ENTRIES, &ring, 0)) { - fprintf(stderr, "io_uring_queue_init failed\n"); - exit(1); + if (errno == ENOSYS) { + have_io_uring = false; + } else { + fprintf(stderr, "io_uring_queue_init failed\n"); + exit(1); + } } #endif for (i = 0; !loops || (i < loops); i++) @@ -720,7 +727,8 @@ int main(int argc, char **argv) } #endif #ifdef URING - io_uring_queue_exit(&ring); + if (have_io_uring) + io_uring_queue_exit(&ring); #endif cleanup_flist(); free(freq_table); @@ -2208,6 +2216,9 @@ do_uring_rw(int opno, long r, int flags) struct iovec iovec; int iswrite = (flags & (O_WRONLY | O_RDWR)) ? 1 : 0; + if (!have_io_uring) + return; + init_pathname(&f); if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { if (v)