From: Gabriel Krisman Bertazi <krisman@suse.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring <io-uring@vger.kernel.org>
Subject: Re: [PATCH] io_uring/net: punt IORING_OP_BIND async if it needs file create
Date: Fri, 15 May 2026 13:00:52 -0400 [thread overview]
Message-ID: <875x4o620r.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <37dbe977-6d1f-401e-b1dc-5d448ea27a8c@kernel.dk> (Jens Axboe's message of "Fri, 15 May 2026 10:37:44 -0600")
Jens Axboe <axboe@kernel.dk> writes:
> For two reasons:
>
> 1) An opcode cannot block inside io_uring_enter() doing submissions, as
> it'll stall the submission side pipeline.
>
> 2) Ending up in sb_start_write() -> __sb_start_write() ->
> percpu_down_read_freezable() introduces a new lockdep edge, which it
> correctly complains about.
>
> Check if the socket type is AF_UNIX and has a non-empty pathname. If it
> does, mark it REQ_F_FORCE_ASYNC to punt the submission to io-wq rather
> than attempt to do it inline.
>
> Fixes: 7481fd93fa0a ("io_uring: Introduce IORING_OP_BIND")
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>
> ---
>
> diff --git a/io_uring/net.c b/io_uring/net.c
> index 30cd22c0b934..1f5fd8c37a5a 100644
> --- a/io_uring/net.c
> +++ b/io_uring/net.c
> @@ -4,6 +4,7 @@
> #include <linux/file.h>
> #include <linux/slab.h>
> #include <linux/net.h>
> +#include <linux/un.h>
> #include <linux/compat.h>
> #include <net/compat.h>
> #include <linux/io_uring.h>
> @@ -1799,11 +1800,29 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags)
> return IOU_COMPLETE;
> }
>
> +/*
> + * Check if bind request would potentiall end up with filename_create(),
potentially
> + * which in turn end up in mnt_want_write() which will grab the fs
> + * percpu start write sem. This can trigger a lockdep warning.
> + */
> +static int io_bind_file_create(const struct io_async_msghdr *io, int addr_len)
> +{
> + const struct sockaddr_un *sun;
> +
> + if (io->addr.ss_family != AF_UNIX)
> + return 0;
> + if (addr_len <= offsetof(struct sockaddr_un, sun_path))
> + return 0;
> + sun = (const struct sockaddr_un *) &io->addr;
> + return sun->sun_path[0] != '\0';
> +}
> +
> int io_bind_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
> {
> struct io_bind *bind = io_kiocb_to_cmd(req, struct io_bind);
> struct sockaddr __user *uaddr;
> struct io_async_msghdr *io;
> + int ret;
>
> if (sqe->len || sqe->buf_index || sqe->rw_flags || sqe->splice_fd_in)
> return -EINVAL;
> @@ -1814,7 +1833,12 @@ int io_bind_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
> io = io_msg_alloc_async(req);
> if (unlikely(!io))
> return -ENOMEM;
> - return move_addr_to_kernel(uaddr, bind->addr_len, &io->addr);
> + ret = move_addr_to_kernel(uaddr, bind->addr_len, &io->addr);
> + if (unlikely(ret))
> + return ret;
> + if (io_bind_file_create(io, bind->addr_len))
> + req->flags |= REQ_F_FORCE_ASYNC;
> + return 0;
> }
Patch looks ok. I will add a TODO to myself to look into the bind call
getting a flag and returning -EWOULDBLOCK, so we can eventually drop the
workaround.
Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de>
>
> int io_bind(struct io_kiocb *req, unsigned int issue_flags)
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2026-05-15 17:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 16:37 [PATCH] io_uring/net: punt IORING_OP_BIND async if it needs file create Jens Axboe
2026-05-15 17:00 ` Gabriel Krisman Bertazi [this message]
2026-05-15 17:03 ` Jens Axboe
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=875x4o620r.fsf@mailhost.krisman.be \
--to=krisman@suse.de \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox