| #include <stdlib.h> |
| #include "io_u_queue.h" |
| |
| int io_u_qinit(struct io_u_queue *q, unsigned int nr) |
| { |
| q->io_us = calloc(nr, sizeof(struct io_u *)); |
| if (!q->io_us) |
| return 1; |
| |
| q->nr = 0; |
| return 0; |
| } |
| |
| void io_u_qexit(struct io_u_queue *q) |
| { |
| free(q->io_us); |
| } |
| |
| int io_u_rinit(struct io_u_ring *ring, unsigned int nr) |
| { |
| ring->max = nr + 1; |
| if (ring->max & (ring->max - 1)) { |
| ring->max--; |
| ring->max |= ring->max >> 1; |
| ring->max |= ring->max >> 2; |
| ring->max |= ring->max >> 4; |
| ring->max |= ring->max >> 8; |
| ring->max |= ring->max >> 16; |
| ring->max++; |
| } |
| |
| ring->ring = calloc(ring->max, sizeof(struct io_u *)); |
| if (!ring->ring) |
| return 1; |
| |
| ring->head = ring->tail = 0; |
| return 0; |
| } |
| |
| void io_u_rexit(struct io_u_ring *ring) |
| { |
| free(ring->ring); |
| } |