From: Zorro Lang <zlang@redhat.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH] ltp/fsstress: don't fail on io_uring ENOSYS
Date: Fri, 29 Jan 2021 16:10:44 +0800 [thread overview]
Message-ID: <20210129081043.GT14354@localhost.localdomain> (raw)
In-Reply-To: <7a7b7128-ba62-59e1-552b-3b1fd6b1eb50@redhat.com>
On Thu, Jan 28, 2021 at 03:31:40PM -0600, Eric Sandeen wrote:
> 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@redhat.com>
> ---
>
> 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. */
Yes, I thought about if we should do this since rhel8 kernel removed io_uring
support from kernel, but left userspace liburing. But if we do this for io_uring,
should we do the same check the others which can be disabled from kernel? Likes: AIO?
Thanks,
Zorro
> 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)
>
next prev parent reply other threads:[~2021-01-29 7:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-28 21:31 [PATCH] ltp/fsstress: don't fail on io_uring ENOSYS Eric Sandeen
2021-01-29 8:10 ` Zorro Lang [this message]
2021-01-31 14:30 ` Eryu Guan
2021-01-31 16:18 ` Zorro Lang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210129081043.GT14354@localhost.localdomain \
--to=zlang@redhat.com \
--cc=fstests@vger.kernel.org \
--cc=sandeen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.