Commit 6b06314c authored by Jens Axboe's avatar Jens Axboe

io_uring: add file set registration

We normally have to fget/fput for each IO we do on a file. Even with
the batching we do, the cost of the atomic inc/dec of the file usage
count adds up.

This adds IORING_REGISTER_FILES, and IORING_UNREGISTER_FILES opcodes
for the io_uring_register(2) system call. The arguments passed in must
be an array of __s32 holding file descriptors, and nr_args should hold
the number of file descriptors the application wishes to pin for the
duration of the io_uring instance (or until IORING_UNREGISTER_FILES is
called).

When used, the application must set IOSQE_FIXED_FILE in the sqe->flags
member. Then, instead of setting sqe->fd to the real fd, it sets sqe->fd
to the index in the array passed in to IORING_REGISTER_FILES.

Files are automatically unregistered when the io_uring instance is torn
down. An application need only unregister if it wishes to register a new
set of fds.
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f4e65870
This diff is collapsed.
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
*/ */
struct io_uring_sqe { struct io_uring_sqe {
__u8 opcode; /* type of operation for this sqe */ __u8 opcode; /* type of operation for this sqe */
__u8 flags; /* as of now unused */ __u8 flags; /* IOSQE_ flags */
__u16 ioprio; /* ioprio for the request */ __u16 ioprio; /* ioprio for the request */
__s32 fd; /* file descriptor to do IO on */ __s32 fd; /* file descriptor to do IO on */
__u64 off; /* offset into file */ __u64 off; /* offset into file */
...@@ -33,6 +33,11 @@ struct io_uring_sqe { ...@@ -33,6 +33,11 @@ struct io_uring_sqe {
}; };
}; };
/*
* sqe->flags
*/
#define IOSQE_FIXED_FILE (1U << 0) /* use fixed fileset */
/* /*
* io_uring_setup() flags * io_uring_setup() flags
*/ */
...@@ -113,5 +118,7 @@ struct io_uring_params { ...@@ -113,5 +118,7 @@ struct io_uring_params {
*/ */
#define IORING_REGISTER_BUFFERS 0 #define IORING_REGISTER_BUFFERS 0
#define IORING_UNREGISTER_BUFFERS 1 #define IORING_UNREGISTER_BUFFERS 1
#define IORING_REGISTER_FILES 2
#define IORING_UNREGISTER_FILES 3
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment