diff options
author | Logan Gunthorpe <logang@deltatee.com> | 2022-07-28 00:06:00 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-08-03 06:08:53 +0300 |
commit | 20313b1b8cd1bda34ee136b656c39ff2ae189330 (patch) | |
tree | 30c3b19a52812a921535503af1fce64226ed16ff /scripts/gdb/linux/proc.py | |
parent | df6b0e205d1fe3fe1f2e9aaee9fc396b64e1c293 (diff) | |
download | linux-20313b1b8cd1bda34ee136b656c39ff2ae189330.tar.xz |
md/raid5: Ensure batch_last is released before sleeping for quiesce
A race condition exists where if raid5_quiesce() is called in the
middle of a request that has set batch_last, it will deadlock.
batch_last will hold a reference to a stripe when raid5_quiesce() is
called. This will cause the next raid5_get_active_stripe() call to
sleep waiting for the quiesce to finish, but the raid5_quiesce() thread
will wait for active_stripes to go to zero which will never happen
because request thread is waiting for the quiesce to stop.
Fix this by creating a special __raid5_get_active_stripe() function
which takes the request context and clears the last_batch before
sleeping.
While we're at it, change the arguments of raid5_get_active_stripe()
to bools.
Fixes: 3312e6c887fe ("md/raid5: Keep a reference to last stripe_head for batch")
Reported-by: David Sloan <David.Sloan@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'scripts/gdb/linux/proc.py')
0 files changed, 0 insertions, 0 deletions