]> git.baikalelectronics.ru Git - kernel.git/commitdiff
io_uring: add clarifying comment for io_cqring_ev_posted()
authorJens Axboe <axboe@kernel.dk>
Sat, 21 Aug 2021 13:21:19 +0000 (07:21 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 23 Aug 2021 19:10:47 +0000 (13:10 -0600)
We've previously had an issue where overflow flush unconditionally calls
io_cqring_ev_posted() even if it didn't flush any events to the ring,
causing wake and eventfd increment where no new events are available.
Some applications don't like that, see commit 8a9278b99b9a for details.

This came up in discussion for another patch recently, hence add a
comment detailing what the relationship between calling the events
posted helper and CQ ring entries is.

Link: https://lore.kernel.org/io-uring/77a44fce-c831-16a6-8e80-9aee77f496a2@kernel.dk/
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index c6f1afa5ec04afeaf73d34a70a5488d4158fd397..8d263209b5085606debdf7cca1cf6e2185b4869d 100644 (file)
@@ -1526,6 +1526,13 @@ static inline bool io_should_trigger_evfd(struct io_ring_ctx *ctx)
        return !ctx->eventfd_async || io_wq_current_is_worker();
 }
 
+/*
+ * This should only get called when at least one event has been posted.
+ * Some applications rely on the eventfd notification count only changing
+ * IFF a new CQE has been added to the CQ ring. There's no depedency on
+ * 1:1 relationship between how many times this function is called (and
+ * hence the eventfd count) and number of CQEs posted to the CQ ring.
+ */
 static void io_cqring_ev_posted(struct io_ring_ctx *ctx)
 {
        /*