]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: remove redundant explicit memory barrier from rq_qos waiter and waker
authorMuchun Song <songmuchun@bytedance.com>
Mon, 21 Oct 2024 08:52:51 +0000 (16:52 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 22 Oct 2024 20:05:09 +0000 (14:05 -0600)
The memory barriers in list_del_init_careful() and list_empty_careful()
in pairs already handle the proper ordering between data.got_token
and data.wq.entry. So remove the redundant explicit barriers. And also
change a "break" statement to "return" to avoid redundant calling of
finish_wait().

Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Reviewed-by: Chengming Zhou <chengming.zhou@linux.dev>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Link: https://lore.kernel.org/r/20241021085251.73353-1-songmuchun@bytedance.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-rq-qos.c

index 058f92c4f9d57bb955999b667610369592c51d18..eb9618cd68adfb94fdcaf1101b865777cb196b3a 100644 (file)
@@ -218,7 +218,6 @@ static int rq_qos_wake_function(struct wait_queue_entry *curr,
                return -1;
 
        data->got_token = true;
-       smp_wmb();
        wake_up_process(data->task);
        list_del_init_careful(&curr->entry);
        return 1;
@@ -274,10 +273,9 @@ void rq_qos_wait(struct rq_wait *rqw, void *private_data,
                         * which means we now have two. Put our local token
                         * and wake anyone else potentially waiting for one.
                         */
-                       smp_rmb();
                        if (data.got_token)
                                cleanup_cb(rqw, private_data);
-                       break;
+                       return;
                }
                io_schedule();
                has_sleeper = true;