Pavel Begunkov b9445598d8 io_uring: openat directly into fixed fd table
Instead of opening a file into a process's file table as usual and then
registering the fd within io_uring, some users may want to skip the
first step and place it directly into io_uring's fixed file table.
This patch adds such a capability for IORING_OP_OPENAT and
IORING_OP_OPENAT2.

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.

Keep the error codes consistent with IORING_OP_FILES_UPDATE, ENXIO and
EINVAL on inappropriate fixed tables, and return EBADF on collision with
already registered file.

Note: IOSQE_FIXED_FILE can't be used to switch between modes, because
accept takes a file, and it already uses the flag with a different
meaning.

Suggested-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/e9b33d1163286f51ea707f87d95bd596dada1e65.1629888991.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2021-08-25 06:36:56 -06:00
..
2021-05-07 11:18:52 -07:00
2021-03-30 16:54:49 -07:00
2021-08-18 12:06:42 -07:00
2021-06-14 09:07:45 +02:00
2021-04-12 15:04:29 +02:00
2021-07-06 11:06:04 -07:00
2021-07-02 14:25:17 -07:00
2021-07-05 13:51:41 -07:00
2021-07-09 09:43:57 -07:00
2021-07-06 20:14:41 -04:00
2021-07-09 12:05:33 -07:00
2021-07-30 10:14:39 -07:00
2021-06-30 12:21:16 -07:00
2021-06-29 10:53:48 -07:00
\n
2021-07-01 12:06:39 -07:00
2021-08-01 12:07:23 -07:00
2021-01-24 14:27:20 +01:00
2021-01-24 14:27:20 +01:00
2021-07-30 11:08:12 -07:00
2021-05-18 20:15:58 -04:00
2021-01-24 14:27:19 +01:00
2021-08-23 13:07:56 -06:00
2021-04-12 15:04:23 +02:00
2021-06-29 10:53:48 -07:00
2021-08-21 10:50:22 -07:00
2021-01-24 14:27:20 +01:00
2021-01-24 14:27:19 +01:00
2021-02-21 11:02:48 -08:00
2021-02-13 17:17:53 +01:00
2021-06-01 07:44:32 -06:00
2021-01-24 14:27:18 +01:00