io_uring: add data_race annotations
authorPavel Begunkov <asml.silence@gmail.com>
Fri, 15 Apr 2022 21:08:33 +0000 (22:08 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Apr 2022 00:02:52 +0000 (18:02 -0600)
We have several racy reads, mark them with data_race() to demonstrate
this fact.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/7e56e750d294c70b2a56938bd733386f19f0eb53.1650056133.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 5bb46fe161c1e5c0e92d130484920a72163e6e50..f29ab905585257cb90986449aecfe1b519d953c8 100644 (file)
@@ -2268,7 +2268,7 @@ static __cold bool __io_alloc_req_refill(struct io_ring_ctx *ctx)
         * locked cache, grab the lock and move them over to our submission
         * side cache.
         */
-       if (READ_ONCE(ctx->locked_free_nr) > IO_COMPL_BATCH) {
+       if (data_race(ctx->locked_free_nr) > IO_COMPL_BATCH) {
                io_flush_cached_locked_reqs(ctx, &ctx->submit_state);
                if (!io_req_cache_empty(ctx))
                        return true;
@@ -2562,8 +2562,8 @@ static void tctx_task_work(struct callback_head *cb)
                        handle_tw_list(node2, &ctx, &uring_locked);
                cond_resched();
 
-               if (!tctx->task_list.first &&
-                   !tctx->prior_task_list.first && uring_locked)
+               if (data_race(!tctx->task_list.first) &&
+                   data_race(!tctx->prior_task_list.first) && uring_locked)
                        io_submit_flush_completions(ctx);
        }