X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u_queue.h;h=118e59342b5da4bd814be51aa7f561d519603838;hp=4f6e8e6a703b573e8f5c0d3e24fa397e090008e2;hb=e39c0676d1af779004194ae4b3cc111db49bef7a;hpb=2ae0b204743d6b4048c6fffd46c6280a70f2ecd1 diff --git a/io_u_queue.h b/io_u_queue.h index 4f6e8e6a..118e5934 100644 --- a/io_u_queue.h +++ b/io_u_queue.h @@ -8,28 +8,39 @@ struct io_u; struct io_u_queue { struct io_u **io_us; unsigned int nr; + unsigned int max; }; static inline struct io_u *io_u_qpop(struct io_u_queue *q) { - if (q->nr) - return q->io_us[--q->nr]; + if (q->nr) { + const unsigned int next = --q->nr; + struct io_u *io_u = q->io_us[next]; + + q->io_us[next] = NULL; + return io_u; + } return NULL; } static inline void io_u_qpush(struct io_u_queue *q, struct io_u *io_u) { - q->io_us[q->nr++] = io_u; + if (q->nr < q->max) { + q->io_us[q->nr++] = io_u; + return; + } + + assert(0); } -static inline int io_u_qempty(struct io_u_queue *q) +static inline int io_u_qempty(const struct io_u_queue *q) { return !q->nr; } #define io_u_qiter(q, io_u, i) \ - for (i = 0, io_u = (q)->io_us[0]; i < (q)->nr; i++, io_u = (q)->io_us[i]) + for (i = 0; i < (q)->nr && (io_u = (q)->io_us[i]); i++) int io_u_qinit(struct io_u_queue *q, unsigned int nr); void io_u_qexit(struct io_u_queue *q);