.\" Copyright (C) 2021 Stefan Roesch .\" .\" SPDX-License-Identifier: LGPL-2.0-or-later .\" .TH io_uring_register_buffers 3 "November 15, 2021" "liburing-2.1" "liburing Manual" .SH NAME io_uring_register_buffers \- register buffers for fixed buffer operations .SH SYNOPSIS .nf .B #include .PP .BI "int io_uring_register_buffers(struct io_uring *" ring "," .BI " const struct iovec *" iovecs "," .BI " unsigned " nr_iovecs ");" .PP .BI "int io_uring_register_buffers_tags(struct io_uring *" ring "," .BI " const struct iovec *" iovecs "," .BI " const __u64 *" tags "," .BI " unsigned " nr ");" .PP .BI "int io_uring_register_buffers_sparse(struct io_uring *" ring "," .BI " unsigned " nr_iovecs ");" .PP .BI "int io_uring_register_buffers_update_tag(struct io_uring *" ring "," .BI " unsigned " off "," .BI " const struct iovec *" iovecs "," .BI " const __u64 *" tags "," .BI " unsigned " nr ");" .fi .SH DESCRIPTION .PP The .BR io_uring_register_buffers (3) function registers .I nr_iovecs number of buffers defined by the array .I iovecs belonging to the .IR ring . The .BR io_uring_register_buffers_tags (3) function behaves the same as .BR io_uring_register_buffers (3) function but additionally takes .I tags parameter. See .B IORING_REGISTER_BUFFERS2 for the resource tagging description. The .BR io_uring_register_buffers_sparse (3) function registers .I nr_iovecs empty buffers belonging to the .IR ring . These buffers must be updated before use, using eg .BR 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 .B 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 .BR 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 .I off is offset on which to start the update .I nr number of buffers defined by the array .I iovecs belonging to the .IR ring . The .I tags points to an array of tags. See .B IORING_REGISTER_BUFFERS2 for the resource tagging description. .SH RETURN VALUE On success .BR io_uring_register_buffers (3), .BR io_uring_register_buffers_tags (3) and .BR io_uring_register_buffers_sparse (3) return 0. .BR io_uring_register_buffers_update_tag (3) return number of buffers updated. On failure they return .BR -errno . .SH SEE ALSO .BR io_uring_register (2), .BR io_uring_get_sqe (3), .BR io_uring_unregister_buffers (3), .BR io_uring_register_buf_ring (3), .BR io_uring_prep_read_fixed (3), .BR io_uring_prep_write_fixed (3)