* [PATCH] io_uring: silence variable ‘prev’ set but not used warning
@ 2023-03-09 16:58 Jens Axboe
2023-03-09 17:06 ` Vincenzo Palazzo
0 siblings, 1 reply; 4+ messages in thread
From: Jens Axboe @ 2023-03-09 16:58 UTC (permalink / raw)
To: io-uring; +Cc: Vincenzo Palazzo
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 <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
---
Resend, not sure if the previous went through...
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
--
Jens Axboe
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] io_uring: silence variable ‘prev’ set but not used warning
2023-03-09 16:58 [PATCH] io_uring: silence variable ‘prev’ set but not used warning Jens Axboe
@ 2023-03-09 17:06 ` Vincenzo Palazzo
2023-03-09 18:34 ` Jens Axboe
0 siblings, 1 reply; 4+ messages in thread
From: Vincenzo Palazzo @ 2023-03-09 17:06 UTC (permalink / raw)
To: Jens Axboe, io-uring
> 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 <[email protected]>
> Signed-off-by: Jens Axboe <[email protected]>
>
> ---
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 <[email protected]>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] io_uring: silence variable ‘prev’ set but not used warning
2023-03-09 17:06 ` Vincenzo Palazzo
@ 2023-03-09 18:34 ` Jens Axboe
0 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2023-03-09 18:34 UTC (permalink / raw)
To: Vincenzo Palazzo, io-uring
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 <[email protected]>
>> Signed-off-by: Jens Axboe <[email protected]>
>>
>> ---
>
> 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 <[email protected]>
Thanks, added.
--
Jens Axboe
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] io_uring: silence variable ‘prev’ set but not used warning
@ 2023-03-09 16:54 Jens Axboe
0 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2023-03-09 16:54 UTC (permalink / raw)
To: io-uring; +Cc: Vincenzo Palazzo
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 <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
---
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
--
Jens Axboe
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-03-09 18:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-09 16:58 [PATCH] io_uring: silence variable ‘prev’ set but not used warning Jens Axboe
2023-03-09 17:06 ` Vincenzo Palazzo
2023-03-09 18:34 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2023-03-09 16:54 Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox