block: remove redundant GD_NEED_PART_SCAN in add_disk_final()#966
block: remove redundant GD_NEED_PART_SCAN in add_disk_final()#966blktests-ci[bot] wants to merge 2 commits into
Conversation
|
Upstream branch: 062871f |
e48f9db to
199644a
Compare
|
Upstream branch: 5b33fc6 |
faecb57 to
6e7b4cd
Compare
199644a to
e6d9eb8
Compare
|
Upstream branch: 66affa3 |
6e7b4cd to
06c106c
Compare
|
Upstream branch: 66affa3 |
06c106c to
88b4f03
Compare
e6d9eb8 to
7d8604f
Compare
|
Upstream branch: bade58e |
88b4f03 to
c9698f1
Compare
7d8604f to
4cc45a3
Compare
|
Upstream branch: 4edcdef |
c9698f1 to
42b2434
Compare
4cc45a3 to
90ffd56
Compare
|
Upstream branch: dc59e4f |
42b2434 to
e64be54
Compare
90ffd56 to
d52f35a
Compare
|
Upstream branch: 87320be |
e64be54 to
24c0961
Compare
d52f35a to
a644c13
Compare
add_disk_final() sets GD_NEED_PART_SCAN before calling bdev_add(), then calls disk_scan_partitions() which sets the flag itself. The early set is redundant and introduces a race. Between bdev_add() and disk_scan_partitions(), concurrent openers (multipathd, blkid, LVM) see the flag in blkdev_get_whole() and trigger bdev_disk_changed(). When disk_scan_partitions() then runs, it calls bdev_disk_changed() again, dropping the partitions the concurrent opener already created before re-adding them, which can result in transient partition disappearances. The race is observable by inserting an msleep() between bdev_add() and disk_scan_partitions() while running concurrent open() calls during device bind. Without artificial delay, it manifests under scheduling pressure during boot on systems with aggressive device scanners (multipathd, systemd-udevd). Therefore, do not set GD_NEED_PART_SCAN in add_disk_final(). Other GD_NEED_PART_SCAN consumers (blkdev_get_whole(), sd_need_revalidate()) should not be affected as the flag is set internally by disk_scan_partitions(). The retry-on-next-open intention from commit e5cfefa ("block: fix scan partition for exclusively open device again") should also not be affected as the early return paths in disk_scan_partitions() should be unreachable at device registration time (bd_holder is NULL and open_partitions is zero). Fixes: e5cfefa ("block: fix scan partition for exclusively open device again") Cc: stable@vger.kernel.org Signed-off-by: Connor Williamson <connordw@amazon.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
|
Upstream branch: 8cdeaa5 |
24c0961 to
f660739
Compare
a644c13 to
a2204c3
Compare
Pull request for series with
subject: block: remove redundant GD_NEED_PART_SCAN in add_disk_final()
version: 1
url: https://patchwork.kernel.org/project/linux-block/list/?series=1111700