X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u_queue.c;h=41f98bc4fa1036496539b50ea84eb6fa51cda390;hp=5734e9c399cc9fc48238bf1c8c943f956b7dbf72;hb=da92f848c5e0d29db6dda12c4c97bf1338a01128;hpb=2ae0b204743d6b4048c6fffd46c6280a70f2ecd1 diff --git a/io_u_queue.c b/io_u_queue.c index 5734e9c3..41f98bc4 100644 --- a/io_u_queue.c +++ b/io_u_queue.c @@ -1,22 +1,32 @@ #include +#include #include "io_u_queue.h" +#include "smalloc.h" -int io_u_qinit(struct io_u_queue *q, unsigned int nr) +bool io_u_qinit(struct io_u_queue *q, unsigned int nr, bool shared) { - q->io_us = calloc(sizeof(struct io_u *), nr); + if (shared) + q->io_us = smalloc(nr * sizeof(struct io_u *)); + else + q->io_us = calloc(nr, sizeof(struct io_u *)); + if (!q->io_us) - return 1; + return false; q->nr = 0; - return 0; + q->max = nr; + return true; } -void io_u_qexit(struct io_u_queue *q) +void io_u_qexit(struct io_u_queue *q, bool shared) { - free(q->io_us); + if (shared) + sfree(q->io_us); + else + free(q->io_us); } -int io_u_rinit(struct io_u_ring *ring, unsigned int nr) +bool io_u_rinit(struct io_u_ring *ring, unsigned int nr) { ring->max = nr + 1; if (ring->max & (ring->max - 1)) { @@ -29,12 +39,12 @@ int io_u_rinit(struct io_u_ring *ring, unsigned int nr) ring->max++; } - ring->ring = calloc(sizeof(struct io_u *), ring->max); + ring->ring = calloc(ring->max, sizeof(struct io_u *)); if (!ring->ring) - return 1; + return false; ring->head = ring->tail = 0; - return 0; + return true; } void io_u_rexit(struct io_u_ring *ring)