Re: [PATCH 1/2] loop: drop stale partitions on LOOP_CHANGE_FD

Shin'ichiro Kawasaki <[email protected]>
Newsgroups org.kernel.vger.linux-block,org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <anwpf-WdSj4W8AGp@shinmob>
On Aug 06, 2026 / 12:36, Daan De Meyer via B4 Relay wrote:
> From: Daan De Meyer <[email protected]>
> 
> Commit 267ec4d7223a ("loop: fix partition scan race between udev and
> loop_reread_partitions()") stopped disk_force_media_change() from
> setting GD_NEED_PART_SCAN. That bit did more than request a rescan:
> bdev_disk_changed() drops every partition before it consults
> disk_has_partscan(), so the lazy scan on the next open was also what
> removed partitions from a loop device without LO_FLAGS_PARTSCAN.
> 
> Such devices are not unusual. bdev_add_partition() only rejects
> GENHD_FL_NO_PART disks, so BLKPG_ADD_PARTITION works while
> GD_SUPPRESS_PART_SCAN is set, and parted, libfdisk and systemd all fall
> back to BLKPG when BLKRRPART fails with -EINVAL, which is what a loop
> device without LO_FLAGS_PARTSCAN returns.
> 
> loop_change_fd() only rescans when LO_FLAGS_PARTSCAN is set, so those
> partitions now survive the backing file swap and keep describing the old
> file. The new backing file must have the same size, but its partition
> table can be completely different, leaving the partition devices mapping
> the wrong ranges.
> 
> Call loop_reread_partitions() unconditionally. Without LO_FLAGS_PARTSCAN,
> blk_add_partitions() returns early, so this drops the stale partitions
> without scanning the new backing file.

Daan also posted a new, blktests test case that recreates the problem described
[*]. I confirmed that the test case failed with v7.2-rc7 kernel, and this patch
avoids the failure.

Tested-by: Shin'ichiro Kawasaki <[email protected]>

[*] https://github.com/linux-blktests/blktests/pull/259
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.