42 lines
1.4 KiB
Diff
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))
|