73aa139585
- libparted: Fix bug with dupe and empty name
64 lines
2.4 KiB
Diff
64 lines
2.4 KiB
Diff
From dfdd8b0dd99b7fa990f40a3d3a225c5b3ef13c57 Mon Sep 17 00:00:00 2001
|
|
From: Phillip Susi <psusi@ubuntu.com>
|
|
Date: Sat, 26 Apr 2014 21:16:15 -0400
|
|
Subject: [PATCH 107/131] libparted: remove all old partitions, even if new
|
|
label allows less
|
|
|
|
We were limiting partition sync operations to the lesser number allowed
|
|
by the device, or the label. This meant that when creating a new label
|
|
over an old label that had more partitions than the new one allows, the
|
|
higher partitions would not be removed. Use the greater of the two values
|
|
for the remove pass, and the lesser for the add.
|
|
---
|
|
NEWS | 3 +++
|
|
libparted/arch/linux.c | 11 +++++++++--
|
|
2 files changed, 12 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/NEWS b/NEWS
|
|
index bc852e2..3dc39fd 100644
|
|
--- a/NEWS
|
|
+++ b/NEWS
|
|
@@ -29,6 +29,9 @@ GNU parted NEWS -*- outline -*-
|
|
|
|
** Bug Fixes
|
|
|
|
+ libparted: remove all old partitions, even if new label does not allow
|
|
+ as many.
|
|
+
|
|
libparted: fat and ntfs boot sectors were misdetected as dos
|
|
partition tables instead of being treated as a loop label.
|
|
|
|
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
|
index ced06a3..4cbe49b 100644
|
|
--- a/libparted/arch/linux.c
|
|
+++ b/libparted/arch/linux.c
|
|
@@ -2823,9 +2823,10 @@ _disk_sync_part_table (PedDisk* disk)
|
|
get_partition_start_and_length = _kernel_get_partition_start_and_length;
|
|
}
|
|
|
|
- /* lpn = largest partition number. */
|
|
+ /* lpn = largest partition number.
|
|
+ * for remove pass, use greater of device or label limit */
|
|
if (ped_disk_get_max_supported_partition_count(disk, &lpn))
|
|
- lpn = PED_MIN(lpn, part_range);
|
|
+ lpn = PED_MAX(lpn, part_range);
|
|
else
|
|
lpn = part_range;
|
|
|
|
@@ -2876,6 +2877,12 @@ _disk_sync_part_table (PedDisk* disk)
|
|
if (!ok[i - 1] && errnums[i - 1] == ENXIO)
|
|
ok[i - 1] = 1; /* it already doesn't exist */
|
|
}
|
|
+ /* lpn = largest partition number.
|
|
+ * for add pass, use lesser of device or label limit */
|
|
+ if (ped_disk_get_max_supported_partition_count(disk, &lpn))
|
|
+ lpn = PED_MIN(lpn, part_range);
|
|
+ else
|
|
+ lpn = part_range;
|
|
for (i = 1; i <= lpn; i++) {
|
|
PedPartition *part = ped_disk_get_partition (disk, i);
|
|
if (!part)
|
|
--
|
|
1.9.3
|
|
|