X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u_queue.c;h=41f98bc4fa1036496539b50ea84eb6fa51cda390;hp=9994c7879a066a6b277b1863bd6e7f902ba01795;hb=da92f848c5e0d29db6dda12c4c97bf1338a01128;hpb=6fb1bda0d0b61e2433f9ef34b4b979b2642d8706 diff --git a/io_u_queue.c b/io_u_queue.c index 9994c787..41f98bc4 100644 --- a/io_u_queue.c +++ b/io_u_queue.c @@ -1,23 +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(nr, sizeof(struct io_u *)); + 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; q->max = nr; - return 0; + 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)) { @@ -32,10 +41,10 @@ int io_u_rinit(struct io_u_ring *ring, unsigned int nr) 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)