md: synchronize flush io with array reconfiguration
mainline inclusion from mainline-next-20231220 commit fa2bbff7b0b4e211fec5e5686ef96350690597b5 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I8T02O Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fa2bbff7b0b4e211fec5e5686ef96350690597b5 -------------------------------- 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: a2826aa9 ("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 Signed-off-by:
Li Nan <linan122@huawei.com>
Loading
Please sign in to comment