5dcb73843d
- tests: test loop labels (psusi) - libparted: don't trash filesystem when writing loop label (psusi) - libparted: give correct partition device name on loop labels (psusi) - partprobe: do not skip loop labels (psusi) - libparted: don't create partition on loop label (psusi) - libparted: fix loop labels to not vanish (psusi) - libparted: remove all old partitions, even if new label allows less (psusi) - libparted: remove old partitions *first* before adding new ones (psusi) - libparted: don't detect fat and ntfs boot sectors as dos MBR (psusi) - Fix filesystem detection on non 512 byte sectors (psusi) - tests: fix t2310-dos-extended-2-sector-min-offset.sh (psusi) - libparted: remove last_usable_if_grown (psusi)
64 lines
2.4 KiB
Diff
64 lines
2.4 KiB
Diff
From dc291e101cf20c6493c262124debab92427c83d9 Mon Sep 17 00:00:00 2001
|
|
From: Phillip Susi <psusi@ubuntu.com>
|
|
Date: Fri, 2 May 2014 21:50:45 -0400
|
|
Subject: [PATCH 202/208] 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 0c3bad5..a81c049 100644
|
|
--- a/NEWS
|
|
+++ b/NEWS
|
|
@@ -25,6 +25,9 @@ GNU parted NEWS -*- outline -*-
|
|
|
|
Fix filesystem detection on non 512 byte sector sizes
|
|
|
|
+ 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.0
|
|
|