---
name: "io_uring_register_buffers_tags"
section: "3"
platform: "linux"
package: "liburing"
version: "2.15-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/io_uring_register_buffers_tags"
---

# io\_uring\_register\_buffers\_tags(3)

register buffers for fixed buffer operations

## NAME

io\_uring\_register\_buffers - register buffers for fixed buffer operations

## SYNOPSIS

```
#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***);**

## DESCRIPTION

The [**io\_uring\_register\_buffers**(3)](/io_uring_register_buffers/3.md) function registers *nr\_iovecs* number of buffers defined by the array *iovecs* belonging to the *ring*.

The [**io\_uring\_register\_buffers\_tags**(3)](/io_uring_register_buffers_tags/3.md) function behaves the same as [**io\_uring\_register\_buffers**(3)](/io_uring_register_buffers/3.md) function but additionally takes *tags* parameter. See **IORING\_REGISTER\_BUFFERS2** for the resource tagging description.

The [**io\_uring\_register\_buffers\_sparse**(3)](/io_uring_register_buffers_sparse/3.md) 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)](/io_uring_register_buffers_update_tag/3.md).

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)](/io_uring_register_buffers_update_tag/3.md) 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/3.md), [**io\_uring\_register\_buffers\_tags**(3)](/io_uring_register_buffers_tags/3.md) and [**io\_uring\_register\_buffers\_sparse**(3)](/io_uring_register_buffers_sparse/3.md) return 0. [**io\_uring\_register\_buffers\_update\_tag**(3)](/io_uring_register_buffers_update_tag/3.md) return number of buffers updated. On failure they return **-errno**.

## SEE ALSO

[**io\_uring\_register**(2)](/io_uring_register/2.md), [**io\_uring\_get\_sqe**(3)](/io_uring_get_sqe/3.md), [**io\_uring\_unregister\_buffers**(3)](/io_uring_unregister_buffers/3.md), [**io\_uring\_clone\_buffers**(3)](/io_uring_clone_buffers/3.md), [**io\_uring\_register\_buf\_ring**(3)](/io_uring_register_buf_ring/3.md), [**io\_uring\_prep\_read\_fixed**(3)](/io_uring_prep_read_fixed/3.md), [**io\_uring\_prep\_write\_fixed**(3)](/io_uring_prep_write_fixed/3.md)
