md/raid5: Convert prepare_to_wait() to wait_woken() api
authorLogan Gunthorpe <logang@deltatee.com>
Thu, 7 Jul 2022 19:15:33 +0000 (13:15 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 2 Aug 2022 23:22:43 +0000 (17:22 -0600)
commitee1aa06ba3258686452dab2db2a458310a83d07a
treef3f3721c85a27a2423ba84948dd5c29a12faf469
parentb9f91d80dec9369294a8df4e4c8850a339a32576
md/raid5: Convert prepare_to_wait() to wait_woken() api

raid5_get_active_stripe() can sleep in various situations and it
is called by make_stripe_request() while inside the
prepare_to_wait()/finish_wait() section. Nested waits like this are
not supported.

This was noticed while making other changes that add different sleeps
to raid5_get_active_stripe() that caused a WARNING with
CONFIG_DEBUG_ATOMIC_SLEEP.

No ill effects have been noticed with the code as is, but theoretically
a nested and here could cause a dead lock so it should be fixed.

To fix this, convert the prepare_to_wait() call to use wake_woken()
which supports nested sleeps.

Link: https://lwn.net/Articles/628628/
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/raid5.c