repart: return 1 from probe_sector_size_prefer_ioctl() on block device success

probe_sector_size() returns 1 when it successfully determines the sector size,
0 when falling back to the default. blockdev_get_sector_size() returns 0 on
success. probe_sector_size_prefer_ioctl() was passing blockdev_get_sector_size()
return value through directly, so caller is checking r > 0 to detect a
successfully probed sector size never saw it for block devices.

In context_load_partition_table(), this caused fs_secsz to stay at 4096 bytes
even on 512-byte sector block devices, making verity hash partition sizes wrong
unless --sector-size=512 was passed explicitly.

Fix by returning 1 on success from the block device path to match probe_sector_size()
convention.
This commit is contained in:
Nandakumar Raghavan
2026-02-19 13:42:19 +00:00
committed by Lennart Poettering
parent 551227e3a0
commit fd6506eb9a

View File

@@ -200,8 +200,15 @@ int probe_sector_size_prefer_ioctl(int fd, uint32_t *ret) {
if (fstat(fd, &st) < 0)
return -errno;
if (S_ISBLK(st.st_mode))
return blockdev_get_sector_size(fd, ret);
if (S_ISBLK(st.st_mode)) {
int r;
r = blockdev_get_sector_size(fd, ret);
if (r < 0)
return r;
return 1; /* indicate we *did* find it, like probe_sector_size() does */
}
return probe_sector_size(fd, ret);
}