All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.