md/raid10: prevent unnecessary calls to wake_up() in fast path
authorYu Kuai <yukuai3@huawei.com>
Fri, 16 Sep 2022 11:34:26 +0000 (19:34 +0800)
committerSong Liu <song@kernel.org>
Thu, 22 Sep 2022 07:05:05 +0000 (00:05 -0700)
commit0c0be98bbe67662a7d2bf8381106bfca0e31ed72
tree3f345788a58afbb9ab684b17edddb6e47b899fbc
parent0de57e541bb4207c0602eca271c6531c305e9c5d
md/raid10: prevent unnecessary calls to wake_up() in fast path

Currently, wake_up() is called unconditionally in fast path such as
raid10_make_request(), which will cause lock contention under high
concurrency:

raid10_make_request
 wake_up
  __wake_up_common_lock
   spin_lock_irqsave

Improve performance by only call wake_up() if waitqueue is not empty
in allow_barrier() and raid10_make_request().

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev>
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/raid10.c