When parted encounters busy partition during its loop for informing the kernel about partition changes, it tries to compare geometry of the to-be created partition with the geometry of the existing partition (reported by the kernel). If these geometries match, there is nothing more to do for parted.
However, this fails for msdos extended partitions, because kernel always reports size of extended partition to be 2s, no matter how big it actually is (to avoid having overlapping partitions in the kernel's representation of partition table). This makes the comparison of geometries to fail for extended partitions, so they need to be handled specially. Steps to reproduce: modprobe scsi_debug parted -s /dev/sdX mklabel msdos parted -s /dev/sdX mkpart extended 1M -- -1 exec 3>/dev/sdX1 # make sdX1 busy parted -s /dev/sdX mkpart logical ext2 2M 4M * libparted/arch/linux.c (_disk_sync_part_table): Do not check size of extended partition. Signed-off-by: Petr Uzel <[email protected]> --- libparted/arch/linux.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index e2c4139..96a6b37 100644 --- a/libparted/arch/linux.c +++ b/libparted/arch/linux.c @@ -2614,9 +2614,10 @@ _disk_sync_part_table (PedDisk* disk) if (!_kernel_get_partition_start_and_length(part, &start, &length)) goto cleanup; - if (start == part->geom.start - && length == part->geom.length) - ok[i - 1] = 1; + if (start == part->geom.start + && (length == part->geom.length + || part->type == PED_PARTITION_EXTENDED)) + ok[i - 1] = 1; /* If the new partition is unchanged and the existing one was not removed because it was in use, then reset the error flag and do not -- 1.7.10.4

