diff options
author | Yu Kuai <yukuai3@huawei.com> | 2023-11-29 10:02:34 +0800 |
---|---|---|
committer | Song Liu <song@kernel.org> | 2023-12-01 15:49:42 -0800 |
commit | fa2bbff7b0b4e211fec5e5686ef96350690597b5 (patch) | |
tree | d175d0e0e8b31bd0e6f6145f6c2c6ca823b0e90e /drivers/block/rnbd | |
parent | 15da990f8dd7e9d0e1fd0275730f6fed6f6a8a57 (diff) |
md: synchronize flush io with array reconfiguration
Currently rcu is used to protect iterating rdev from submit_flushes():
submit_flushes remove_and_add_spares
synchronize_rcu
pers->hot_remove_disk()
rcu_read_lock()
rdev_for_each_rcu
if (rdev->raid_disk >= 0)
rdev->radi_disk = -1;
atomic_inc(&rdev->nr_pending)
rcu_read_unlock()
bi = bio_alloc_bioset()
bi->bi_end_io = md_end_flush
bi->private = rdev
submit_bio
// issue io for removed rdev
Fix this problem by grabbing 'acive_io' before iterating rdev, make sure
that remove_and_add_spares() won't concurrent with submit_flushes().
Fixes: a2826aa92e2e ("md: support barrier requests on all personalities.")
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20231129020234.1586910-1-yukuai1@huaweicloud.com
Diffstat (limited to 'drivers/block/rnbd')
0 files changed, 0 insertions, 0 deletions