Message ID | f2499a3c-5e15-eecd-2ee8-4a4e3ea4f9ad@kernel.dk (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | io_uring: silence variable ‘prev’ set but not used warning | expand |
> If io_uring.o is built with W=1, it triggers a warning: > > io_uring/io_uring.c: In function ?__io_submit_flush_completions?: > io_uring/io_uring.c:1502:40: warning: variable ?prev? set but not used [-Wunused-but-set-variable] > 1502 | struct io_wq_work_node *node, *prev; > | ^~~~ > > which is due to the wq_list_for_each() iterator always keeping a 'prev' > variable. Most users need this to remove an entry from a list, for > example, but __io_submit_flush_completions() never does that. > > Add a basic helper that doesn't track prev instead, and use that in > that function. > > Reported-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com> > Signed-off-by: Jens Axboe <axboe@kernel.dk> > > --- Nice, I should pay more attention to the implementation and maybe propose the equal patch before. But anyway thanks to rework it. Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
On 3/9/23 10:06 AM, Vincenzo Palazzo wrote: >> If io_uring.o is built with W=1, it triggers a warning: >> >> io_uring/io_uring.c: In function ?__io_submit_flush_completions?: >> io_uring/io_uring.c:1502:40: warning: variable ?prev? set but not used [-Wunused-but-set-variable] >> 1502 | struct io_wq_work_node *node, *prev; >> | ^~~~ >> >> which is due to the wq_list_for_each() iterator always keeping a 'prev' >> variable. Most users need this to remove an entry from a list, for >> example, but __io_submit_flush_completions() never does that. >> >> Add a basic helper that doesn't track prev instead, and use that in >> that function. >> >> Reported-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com> >> Signed-off-by: Jens Axboe <axboe@kernel.dk> >> >> --- > > Nice, I should pay more attention to the implementation > and maybe propose the equal patch before. That's just how it goes sometimes! > But anyway thanks to rework it. > > Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com> Thanks, added.
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index fd1cc35a1c00..722624b6d0dc 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1499,14 +1499,14 @@ void io_free_batch_list(struct io_ring_ctx *ctx, struct io_wq_work_node *node) static void __io_submit_flush_completions(struct io_ring_ctx *ctx) __must_hold(&ctx->uring_lock) { - struct io_wq_work_node *node, *prev; struct io_submit_state *state = &ctx->submit_state; + struct io_wq_work_node *node; __io_cq_lock(ctx); /* must come first to preserve CQE ordering in failure cases */ if (state->cqes_count) __io_flush_post_cqes(ctx); - wq_list_for_each(node, prev, &state->compl_reqs) { + __wq_list_for_each(node, &state->compl_reqs) { struct io_kiocb *req = container_of(node, struct io_kiocb, comp_list); diff --git a/io_uring/slist.h b/io_uring/slist.h index 7c198a40d5f1..0eb194817242 100644 --- a/io_uring/slist.h +++ b/io_uring/slist.h @@ -3,6 +3,9 @@ #include <linux/io_uring_types.h> +#define __wq_list_for_each(pos, head) \ + for (pos = (head)->first; pos; pos = (pos)->next) + #define wq_list_for_each(pos, prv, head) \ for (pos = (head)->first, prv = NULL; pos; prv = pos, pos = (pos)->next) @@ -113,4 +116,4 @@ static inline struct io_wq_work *wq_next_work(struct io_wq_work *work) return container_of(work->list.next, struct io_wq_work, list); } -#endif // INTERNAL_IO_SLIST_H \ No newline at end of file +#endif // INTERNAL_IO_SLIST_H
If io_uring.o is built with W=1, it triggers a warning: io_uring/io_uring.c: In function ?__io_submit_flush_completions?: io_uring/io_uring.c:1502:40: warning: variable ?prev? set but not used [-Wunused-but-set-variable] 1502 | struct io_wq_work_node *node, *prev; | ^~~~ which is due to the wq_list_for_each() iterator always keeping a 'prev' variable. Most users need this to remove an entry from a list, for example, but __io_submit_flush_completions() never does that. Add a basic helper that doesn't track prev instead, and use that in that function. Reported-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk> --- Resend, not sure if the previous went through...