summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorYu Kuai <yukuai3@huawei.com>2023-11-29 05:02:34 +0300
committerSong Liu <song@kernel.org>2023-12-02 02:49:42 +0300
commitfa2bbff7b0b4e211fec5e5686ef96350690597b5 (patch)
treed175d0e0e8b31bd0e6f6145f6c2c6ca823b0e90e /block
parent15da990f8dd7e9d0e1fd0275730f6fed6f6a8a57 (diff)
downloadlinux-fa2bbff7b0b4e211fec5e5686ef96350690597b5.tar.xz
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 'block')
0 files changed, 0 insertions, 0 deletions