From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Breno Leitao <leitao@debian.org>
Cc: Jonathan Corbet <corbet@lwn.net>, Jens Axboe <axboe@kernel.dk>,
Pavel Begunkov <asml.silence@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
leit@meta.com, Arnd Bergmann <arnd@arndb.de>,
Steve French <stfrench@microsoft.com>,
Lu Baolu <baolu.lu@linux.intel.com>,
Jiri Slaby <jirislaby@kernel.org>,
Stephen Hemminger <stephen@networkplumber.org>,
Jason Gunthorpe <jgg@ziepe.ca>, Simon Ser <contact@emersion.fr>,
"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>,
"open list:IO_URING" <io-uring@vger.kernel.org>,
"open list:NETWORKING [GENERAL]" <netdev@vger.kernel.org>
Subject: Re: [PATCH] io_uring: Add io_uring command support for sockets
Date: Thu, 22 Jun 2023 07:20:48 +0200 [thread overview]
Message-ID: <2023062231-tasting-stranger-8882@gregkh> (raw)
In-Reply-To: <20230621232129.3776944-1-leitao@debian.org>
On Wed, Jun 21, 2023 at 04:21:26PM -0700, Breno Leitao wrote:
> Enable io_uring commands on network sockets. Create two new
> SOCKET_URING_OP commands that will operate on sockets. Since these
> commands are similar to ioctl, uses the _IO{R,W} helpers to embedded the
> argument size and operation direction. Also allocates a unused ioctl
> chunk for uring command usage.
>
> In order to call ioctl on sockets, use the file_operations->uring_cmd
> callbacks, and map it to a uring socket function, which handles the
> SOCKET_URING_OP accordingly, and calls socket ioctls.
>
> This patches was tested by creating a new test case in liburing.
> Link: https://github.com/leitao/liburing/commit/3340908b742c6a26f662a0679c4ddf9df84ef431
>
> Signed-off-by: Breno Leitao <leitao@debian.org>
> ---
Isn't this a new version of an older patch?
> .../userspace-api/ioctl/ioctl-number.rst | 1 +
> include/linux/io_uring.h | 6 +++++
> include/uapi/linux/io_uring.h | 6 +++++
> io_uring/uring_cmd.c | 27 +++++++++++++++++++
> net/socket.c | 2 ++
> 5 files changed, 42 insertions(+)
>
> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst
> index 4f7b23faebb9..23348636f2ef 100644
> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> @@ -361,6 +361,7 @@ Code Seq# Include File Comments
> 0xCB 00-1F CBM serial IEC bus in development:
> <mailto:michael.klein@puffin.lb.shuttle.de>
> 0xCC 00-0F drivers/misc/ibmvmc.h pseries VMC driver
> +0xCC A0-BF uapi/linux/io_uring.h io_uring cmd subsystem
This change is nice, but not totally related to this specific one,
shouldn't it be separate?
> 0xCD 01 linux/reiserfs_fs.h
> 0xCE 01-02 uapi/linux/cxl_mem.h Compute Express Link Memory Devices
> 0xCF 02 fs/smb/client/cifs_ioctl.h
> diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h
> index 7fe31b2cd02f..d1b20e2a9fb0 100644
> --- a/include/linux/io_uring.h
> +++ b/include/linux/io_uring.h
> @@ -71,6 +71,7 @@ static inline void io_uring_free(struct task_struct *tsk)
> if (tsk->io_uring)
> __io_uring_free(tsk);
> }
> +int uring_sock_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags);
> #else
> static inline int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
> struct iov_iter *iter, void *ioucmd)
> @@ -102,6 +103,11 @@ static inline const char *io_uring_get_opcode(u8 opcode)
> {
> return "";
> }
> +static inline int uring_sock_cmd(struct io_uring_cmd *cmd,
> + unsigned int issue_flags)
> +{
> + return -EOPNOTSUPP;
> +}
> #endif
>
> #endif
> diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
> index 0716cb17e436..e20ba410859d 100644
> --- a/include/uapi/linux/io_uring.h
> +++ b/include/uapi/linux/io_uring.h
> @@ -703,6 +703,12 @@ struct io_uring_recvmsg_out {
> __u32 flags;
> };
>
> +/*
> + * Argument for IORING_OP_URING_CMD when file is a socket
> + */
> +#define SOCKET_URING_OP_SIOCINQ _IOR(0xcc, 0xa0, int)
> +#define SOCKET_URING_OP_SIOCOUTQ _IOR(0xcc, 0xa1, int)
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c
> index 5e32db48696d..dcbe6493b03f 100644
> --- a/io_uring/uring_cmd.c
> +++ b/io_uring/uring_cmd.c
> @@ -7,6 +7,7 @@
> #include <linux/nospec.h>
>
> #include <uapi/linux/io_uring.h>
> +#include <uapi/asm-generic/ioctls.h>
>
> #include "io_uring.h"
> #include "rsrc.h"
> @@ -156,3 +157,29 @@ int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
> return io_import_fixed(rw, iter, req->imu, ubuf, len);
> }
> EXPORT_SYMBOL_GPL(io_uring_cmd_import_fixed);
> +
> +int uring_sock_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
> +{
> + struct socket *sock = cmd->file->private_data;
> + struct sock *sk = sock->sk;
> + int ret, arg = 0;
> +
> + if (!sk->sk_prot || !sk->sk_prot->ioctl)
> + return -EOPNOTSUPP;
> +
> + switch (cmd->sqe->cmd_op) {
> + case SOCKET_URING_OP_SIOCINQ:
> + ret = sk->sk_prot->ioctl(sk, SIOCINQ, &arg);
> + if (ret)
> + return ret;
> + return arg;
> + case SOCKET_URING_OP_SIOCOUTQ:
> + ret = sk->sk_prot->ioctl(sk, SIOCOUTQ, &arg);
> + if (ret)
> + return ret;
> + return arg;
> + default:
> + return -EOPNOTSUPP;
> + }
> +}
> +EXPORT_SYMBOL_GPL(uring_sock_cmd);
Did you forget the "io_" prefix?
thanks,
greg k-h
next prev parent reply other threads:[~2023-06-22 5:20 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-21 23:21 [PATCH] io_uring: Add io_uring command support for sockets Breno Leitao
2023-06-22 5:20 ` Greg Kroah-Hartman [this message]
2023-06-22 15:02 ` Breno Leitao
2023-06-22 16:10 ` Greg Kroah-Hartman
2023-06-22 16:38 ` Breno Leitao
2023-06-22 17:03 ` Greg Kroah-Hartman
2023-06-22 17:39 ` Jakub Kicinski
2023-06-22 19:01 ` Breno Leitao
2023-06-22 18:57 ` Breno Leitao
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=2023062231-tasting-stranger-8882@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=arnd@arndb.de \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=baolu.lu@linux.intel.com \
--cc=contact@emersion.fr \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=io-uring@vger.kernel.org \
--cc=jgg@ziepe.ca \
--cc=jirislaby@kernel.org \
--cc=kuba@kernel.org \
--cc=leit@meta.com \
--cc=leitao@debian.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stephen@networkplumber.org \
--cc=stfrench@microsoft.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.