parted/fix-dvh-update.patch

42 lines
1.4 KiB
Diff

# 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))