io_uring_register_buffers - Man Page

register buffers for fixed buffer operations


#include <liburing.h>

int io_uring_register_buffers(struct io_uring *ring,
                              const struct iovec *iovecs,
                              unsigned nr_iovecs);

int io_uring_register_buffers_tags(struct io_uring *ring,
                                   const struct iovec *iovecs,
                                   const __u64 *tags,
                                   unsigned nr);

int io_uring_register_buffers_sparse(struct io_uring *ring,
                                     unsigned nr_iovecs);

int io_uring_register_buffers_update_tag(struct io_uring *ring,
                                         unsigned off,
                                         const struct iovec *iovecs,
                                         const __u64 *tags,
                                         unsigned nr);


The io_uring_register_buffers(3) function registers nr_iovecs number of buffers defined by the array iovecs belonging to the ring.

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

The io_uring_register_buffers_sparse(3) function registers nr_iovecs empty buffers belonging to the ring. These buffers must be updated before use, using eg io_uring_register_buffers_update_tag(3).

After the caller has registered the buffers, they can be used with one of the fixed buffers functions.

Registered buffers is an optimization that is useful in conjunction with O_DIRECT reads and writes, where it maps the specified range into the kernel once when the buffer is registered rather than doing a map and unmap for each IO every time IO is performed to that region. Additionally, it also avoids manipulating the page reference counts for each IO.

The io_uring_register_buffers_update_tag(3) function updates registered buffers with new ones, either turning a sparse entry into a real one, or replacing an existing entry. The off is offset on which to start the update nr number of buffers defined by the array iovecs belonging to the ring. The tags points to an array of tags. See IORING_REGISTER_BUFFERS2 for the resource tagging description.

Return Value

On success io_uring_register_buffers(3), io_uring_register_buffers_tags(3) and io_uring_register_buffers_sparse(3) return 0. io_uring_register_buffers_update_tag(3) return number of buffers updated. On failure they return -errno.

See Also

io_uring_register(2), io_uring_get_sqe(3), io_uring_unregister_buffers(3), io_uring_register_buf_ring(3), io_uring_prep_read_fixed(3), io_uring_prep_write_fixed(3)

Referenced By

io_uring_prep_read_fixed(3), io_uring_prep_send_zc(3), io_uring_prep_write_fixed(3), io_uring_sqe_set_flags(3), io_uring_unregister_buffers(3).

The man pages io_uring_register_buffers_sparse(3), io_uring_register_buffers_tags(3) and io_uring_register_buffers_update_tag(3) are aliases of io_uring_register_buffers(3).

November 15, 2021 liburing-2.1 liburing Manual