io_uring_register_files_update(3) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | SEE ALSO | COLOPHON

io_uring_register_files(3)   liburing Manual  io_uring_register_files(3)

NAME         top

       io_uring_register_files - register file descriptors

SYNOPSIS         top

       #include <liburing.h>

       int io_uring_register_files(struct io_uring *ring,
                                   const int *files,
                                   unsigned nr_files);

       int io_uring_register_files_tags(struct io_uring *ring,
                                        const int *files,
                                        const __u64 *tags,
                                        unsigned nr);

       int io_uring_register_files_sparse(struct io_uring *ring,
                                          unsigned nr_files);

       int io_uring_register_files_update(struct io_uring *ring,
                                          unsigned off,
                                          const int *files,
                                          unsigned nr_files);

       int io_uring_register_files_update_tag(struct io_uring *ring,
                                          unsigned off,
                                          const int *files,
                                          const __u64 *tags,
                                          unsigned nr_files);

DESCRIPTION         top

       The io_uring_register_files(3) function registers nr_files number
       of file descriptors defined by the array files belonging to the
       ring for subsequent operations.

       The io_uring_register_files_tags(3) function behaves the same as
       io_uring_register_files(3) function but additionally takes tags
       parameter. See IORING_REGISTER_BUFFERS2 for the resource tagging
       description.

       The io_uring_register_files_sparse(3) function registers an empty
       file table of nr_files number of file descriptors. These files
       must be updated before use, using eg
       io_uring_register_files_update_tag(3).  Note that if the size of
       the sparse table exceeds what RLIMIT_NOFILE allows, then
       io_uring_register_files_sparse(3) will attempt to raise the limit
       using setrlimit(2) and retry the operation. If the registration
       fails after doing that, then an error will be returned.  The
       sparse variant is available in kernels 5.19 and later.

       Registering a file table is a prerequisite for using any request
       that uses direct descriptors.

       Registered files have less overhead per operation than normal
       files. This is due to the kernel grabbing a reference count on a
       file when an operation begins, and dropping it when it's done.
       When the process file table is shared, for example if the process
       has ever created any threads, then this cost goes up even more.
       Using registered files reduces the overhead of file reference
       management across requests that operate on a file.

       The io_uring_register_files_update(3) function updates existing
       registered files. The off is offset on which to start the update
       nr_files number of files defined by the array files belonging to
       the ring.

       The io_uring_register_files_update_tag(3) function behaves the
       same as io_uring_register_files_update(3) function but
       additionally takes tags parameter. See IORING_REGISTER_BUFFERS2
       for the resource tagging description.

RETURN VALUE         top

       On success io_uring_register_files(3),
       io_uring_register_files_tags(3) and
       io_uring_register_files_sparse(3) return 0.
       io_uring_register_files_update(3) and
       io_uring_register_files_update_tag(3) return number of files
       updated.  On failure they return -errno.

SEE ALSO         top

       io_uring_register(2), io_uring_get_sqe(3),
       io_uring_unregister_files(3)

COLOPHON         top

       This page is part of the liburing (A library for io_uring)
       project.  Information about the project can be found at 
       ⟨https://github.com/axboe/liburing⟩.  If you have a bug report for
       this manual page, send it to io-uring@vger.kernel.org.  This page
       was obtained from the project's upstream Git repository
       ⟨https://github.com/axboe/liburing⟩ on 2024-06-14.  (At that
       time, the date of the most recent commit that was found in the
       repository was 2024-06-03.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there
       is a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

liburing-2.1                November 15, 2021 io_uring_register_files(3)

Pages that refer to this page: io_uring_prep_accept(3)io_uring_prep_accept_direct(3)io_uring_prep_multishot_accept(3)io_uring_prep_multishot_accept_direct(3)io_uring_prep_openat2(3)io_uring_prep_openat2_direct(3)io_uring_prep_openat(3)io_uring_prep_openat_direct(3)io_uring_prep_socket(3)io_uring_prep_socket_direct(3)io_uring_prep_socket_direct_alloc(3)io_uring_register_files(3)io_uring_register_files_sparse(3)io_uring_register_files_tags(3)io_uring_register_files_update(3)io_uring_register_files_update_tag(3)