All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Begunkov <asml.silence@gmail.com>
To: Jens Axboe <axboe@kernel.dk>,
	io-uring@vger.kernel.org, Josh Triplett <josh@joshtriplett.org>
Cc: "David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	Stefan Metzmacher <metze@samba.org>
Subject: [PATCH v4 0/4] open/accept directly into io_uring fixed file table
Date: Wed, 25 Aug 2021 12:25:43 +0100	[thread overview]
Message-ID: <cover.1629888991.git.asml.silence@gmail.com> (raw)

Add an optional feature to open/accept directly into io_uring's fixed
file table bypassing the normal file table. Same behaviour if as the
snippet below, but in one operation:

sqe = io_uring_[open|accept]_prep();
io_uring_submit(sqe);
// ... once we get a CQE back
io_uring_register_files_update(uring_idx, (fd = cqe->res));
close((fd = cqe->res));

The idea is old, and was brough up and implemented a year ago by
Josh Triplett, though haven't sought the light.

The behaviour is controlled by setting sqe->file_index, where 0 implies
the old behaviour using normal file tables. If non-zero value is
specified, then it will behave as described and place the file into a
fixed file slot sqe->file_index - 1. A file table should be already
created, the slot should be valid and empty, otherwise the operation
will fail.

note: IOSQE_FIXED_FILE can't be used as a mode switch, because accept
takes a file, and it already uses the flag with a different meaning.

v2, since RFC:
 - added attribution
 - updated descriptions
 - rebased

v3:
 - EBADF if slot is already used (Josh Triplett)
 - alias index with splice_fd_in (Josh Triplett)
 - fix a bound check bug

v4:
 - separate u32 fields to internally store indexes (Jens, Josh)

Pavel Begunkov (4):
  net: add accept helper not installing fd
  io_uring: openat directly into fixed fd table
  io_uring: hand code io_accept() fd installing
  io_uring: accept directly into fixed file table

 fs/io_uring.c                 | 115 +++++++++++++++++++++++++++++-----
 include/linux/socket.h        |   3 +
 include/uapi/linux/io_uring.h |   5 +-
 net/socket.c                  |  71 +++++++++++----------
 4 files changed, 143 insertions(+), 51 deletions(-)

-- 
2.32.0


             reply	other threads:[~2021-08-25 11:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-25 11:25 Pavel Begunkov [this message]
2021-08-25 11:25 ` [PATCH v4 1/4] net: add accept helper not installing fd Pavel Begunkov
2021-08-25 12:32   ` David Miller
2021-08-25 11:25 ` [PATCH v4 2/4] io_uring: openat directly into fixed fd table Pavel Begunkov
2021-08-25 11:25 ` [PATCH v4 3/4] io_uring: hand code io_accept() fd installing Pavel Begunkov
2021-08-25 11:25 ` [PATCH v4 4/4] io_uring: accept directly into fixed file table Pavel Begunkov
2021-08-25 15:00 ` [PATCH v4 0/4] open/accept directly into io_uring " 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=cover.1629888991.git.asml.silence@gmail.com \
    --to=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=davem@davemloft.net \
    --cc=io-uring@vger.kernel.org \
    --cc=josh@joshtriplett.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=metze@samba.org \
    --cc=netdev@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 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.