io_uring: replace smp_mb() with smp_mb__after_atomic() in io_sq_thread()
authorAlmog Khaikin <almogkh@gmail.com>
Tue, 26 Apr 2022 16:34:03 +0000 (19:34 +0300)
committerJens Axboe <axboe@kernel.dk>
Sat, 30 Apr 2022 14:39:54 +0000 (08:39 -0600)
The IORING_SQ_NEED_WAKEUP flag is now set using atomic_or() which
implies a full barrier on some architectures but it is not required to
do so. Use the more appropriate smp_mb__after_atomic() which avoids the
extra barrier on those architectures.

Signed-off-by: Almog Khaikin <almogkh@gmail.com>
Link: https://lore.kernel.org/r/20220426163403.112692-1-almogkh@gmail.com
Fixes: 8018823e6987 ("io_uring: serialize ctx->rings->sq_flags with atomic_or/and")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 72cb2d50125c60f2e802cba6464cbf38e558e620..1e7466079af7bc21480f9f2032dd2490d2fe47e9 100644 (file)
@@ -8229,7 +8229,7 @@ static int io_sq_thread(void *data)
                                 * Ensure the store of the wakeup flag is not
                                 * reordered with the load of the SQ tail
                                 */
-                               smp_mb();
+                               smp_mb__after_atomic();
 
                                if (io_sqring_entries(ctx)) {
                                        needs_sched = false;