---
name: "io_uring_buf_ring_cq_advance"
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_buf_ring_cq_advance"
---

# io\_uring\_buf\_ring\_cq\_advance(3)

advance index of provided buffer and CQ ring

## NAME

io\_uring\_buf\_ring\_cq\_advance - advance index of provided buffer and CQ ring

## SYNOPSIS

```
#include <liburing.h>
```

**void io\_uring\_buf\_ring\_cq\_advance(struct io\_uring \****ring***,**                                   **struct io\_uring\_buf\_ring \****br***,**                                   **int** *count***);**

**void \_\_io\_uring\_buf\_ring\_cq\_advance(struct io\_uring \****ring***,**                                     **struct io\_uring\_buf\_ring \****br***,**                                     **int** *cq\_count***,**                                     **int** *buf\_count***);**

## DESCRIPTION

The [**io\_uring\_buf\_ring\_cq\_advance**(3)](/io_uring_buf_ring_cq_advance/3.md) commits *count* previously added buffers to the shared buffer ring *br*, making them visible to the kernel and hence consumable. This passes ownership of the buffer to the ring. At the same time, it advances the CQ ring of *ring* by *count* amount. This effectively bundles both a [**io\_uring\_buf\_ring\_advance**(3)](/io_uring_buf_ring_advance/3.md) call and a [**io\_uring\_cq\_advance**(3)](/io_uring_cq_advance/3.md) into one operation. Since updating either ring index entails a store memory barrier, doing both at once is more efficient.

The [**\_\_io\_uring\_buf\_ring\_cq\_advance**(3)](/__io_uring_buf_ring_cq_advance/3.md) function performs the same operation, except it splits the counts into two separate values. It advances the CQ ring by *cq\_count* entries, and the buffer ring by *buf\_count* entries rather than increment both by the same value.

## RETURN VALUE

None

## SEE ALSO

[**io\_uring\_register\_buf\_ring**(3)](/io_uring_register_buf_ring/3.md), [**io\_uring\_buf\_ring\_add**(3)](/io_uring_buf_ring_add/3.md), [**io\_uring\_buf\_ring\_advance**(3)](/io_uring_buf_ring_advance/3.md)
