aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/os/linux')
-rw-r--r--lib/std/os/linux/IoUring.zig22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/std/os/linux/IoUring.zig b/lib/std/os/linux/IoUring.zig
index 2e43709075..f26b2ce8bf 100644
--- a/lib/std/os/linux/IoUring.zig
+++ b/lib/std/os/linux/IoUring.zig
@@ -1186,6 +1186,28 @@ pub fn register_files_update(self: *IoUring, offset: u32, fds: []const posix.fd_
try handle_registration_result(res);
}
+/// Registers an empty (-1) file table of `nr_files` number of file descriptors.
+pub fn register_files_sparse(self: *IoUring, nr_files: u32) !void {
+ assert(self.fd >= 0);
+
+ const reg = &linux.io_uring_rsrc_register{
+ .nr = nr_files,
+ .flags = linux.IORING_RSRC_REGISTER_SPARSE,
+ .resv2 = 0,
+ .data = 0,
+ .tags = 0,
+ };
+
+ const res = linux.io_uring_register(
+ self.fd,
+ .REGISTER_FILES2,
+ @ptrCast(reg),
+ @as(u32, @sizeOf(linux.io_uring_rsrc_register)),
+ );
+
+ return handle_registration_result(res);
+}
+
/// Registers the file descriptor for an eventfd that will be notified of completion events on
/// an io_uring instance.
/// Only a single a eventfd can be registered at any given point in time.