# fixes (bnc#397210) # see comment in the patch for explanation diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index 0107dd2..041208a 100644 --- a/libparted/arch/linux.c +++ b/libparted/arch/linux.c @@ -2248,7 +2248,15 @@ static int _disk_sync_part_table (PedDisk* disk) { int i; - int last = PED_MAX (ped_disk_get_last_partition_num (disk), 16); + int last; + + /* parted treats DVH directory entries as logical partitions with number > 16; + * we don't want to inform kernel about directory entries + */ + if (strcmp (disk->type->name, "dvh") == 0) + last = 16; + else + last = PED_MAX (ped_disk_get_last_partition_num (disk), 16); int* rets = ped_malloc(sizeof(int) * last); int* errnums = ped_malloc(sizeof(int) * last); int ret = 1; @@ -2470,8 +2478,16 @@ static int _dm_reread_part_table (PedDisk* disk) { int rc = 1; - int last = PED_MAX (ped_disk_get_last_partition_num (disk), 16); int i; + int last; + + /* parted treats DVH directory entries as partitions logical with number > 16; + * we don't want to inform kernel about directory entries + */ + if (strcmp (disk->type->name, "dvh") == 0) + last = 16; + else + last = PED_MAX (ped_disk_get_last_partition_num (disk), 16); sync(); if (!_dm_remove_parts(disk->dev))