- Rebase on parted master commit 081ed98
- libparted: Add support for partition resize - parted: add resizepart command
This commit is contained in:
parent
73aa139585
commit
13386670d0
@ -1,7 +1,7 @@
|
||||
From f688c5a7910e1e5f81e8bd0e48a9ed64ec6b2a47 Mon Sep 17 00:00:00 2001
|
||||
From 06241515a818dcf62e7c5728a8328cf165e3a793 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 16 Apr 2014 18:18:38 -0700
|
||||
Subject: [PATCH 123/125] libparted: Fix part dupe with empty name
|
||||
Date: Wed, 11 Jun 2014 12:13:48 -0700
|
||||
Subject: [PATCH 123/134] libparted: Fix part dupe with empty name
|
||||
|
||||
It was setting the original translated_name to 0, not the new copy.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d285d03becdcd96bdc6062224273e297fb12707e Mon Sep 17 00:00:00 2001
|
||||
From 8d2c819b9ec89ca7c29c061eb2fd438c3876d6f8 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 16 Apr 2014 16:51:18 -0700
|
||||
Subject: [PATCH 124/125] tests: check name when duplicating
|
||||
Date: Wed, 11 Jun 2014 12:13:49 -0700
|
||||
Subject: [PATCH 124/134] tests: check name when duplicating
|
||||
|
||||
Create a second partition with a name when supported by the disk label.
|
||||
Check to make sure that the duplicate has copied over the name. The goal
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 78ba2fe96dc7f39e585c508bfbc3549cc50aefff Mon Sep 17 00:00:00 2001
|
||||
From e8078b3a7b7652aa5f9ee6e09f3c6b21d2810b07 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 11 Jun 2014 11:00:39 -0700
|
||||
Subject: [PATCH 125/125] Fix python test scripts for distribution
|
||||
Date: Wed, 11 Jun 2014 12:13:50 -0700
|
||||
Subject: [PATCH 125/134] Fix python test scripts for distribution
|
||||
|
||||
make distcheck was failing because these scripts were not being
|
||||
included.
|
||||
|
146
0126-parted-add-resizepart-command.patch
Normal file
146
0126-parted-add-resizepart-command.patch
Normal file
@ -0,0 +1,146 @@
|
||||
From 21c58e17c473ea8ef31a18d03348eb2381c0f36c Mon Sep 17 00:00:00 2001
|
||||
From: Petr Uzel <petr.uzel@suse.cz>
|
||||
Date: Mon, 26 Sep 2011 17:21:01 +0200
|
||||
Subject: [PATCH 126/134] parted: add resizepart command
|
||||
|
||||
Add resizepart command to resize ( change the end position ) an existing
|
||||
partition. Note that it does nothing to a filesystem in the partition.
|
||||
---
|
||||
NEWS | 2 ++
|
||||
parted/parted.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 88 insertions(+)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 3de5dde..7069020 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -4,6 +4,8 @@ GNU parted NEWS -*- outline -*-
|
||||
|
||||
** New Features
|
||||
|
||||
+ Add resizepart command to resize a partition
|
||||
+
|
||||
Add support for EAV DASD partitions, which are ECKD's with more than
|
||||
65520 cylinders.
|
||||
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index 3bf03ea..a36ca28 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -153,6 +153,9 @@ static const char* fs_type_msg_start = N_("FS-TYPE is one of: ");
|
||||
static const char* start_end_msg = N_("START and END are disk locations, such as "
|
||||
"4GB or 10%. Negative values count from the end of the disk. "
|
||||
"For example, -1s specifies exactly the last sector.\n");
|
||||
+static const char* end_msg = N_("END is disk location, such as "
|
||||
+ "4GB or 10%. Negative value counts from the end of the disk. "
|
||||
+ "For example, -1s specifies exactly the last sector.\n");
|
||||
static const char* state_msg = N_("STATE is one of: on, off\n");
|
||||
static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
|
||||
static const char* name_msg = N_("NAME is any word you want\n");
|
||||
@@ -437,6 +440,21 @@ constraint_from_start_end (PedDevice* dev, PedGeometry* range_start,
|
||||
range_start, range_end, 1, dev->length);
|
||||
}
|
||||
|
||||
+
|
||||
+static PedConstraint*
|
||||
+constraint_from_start_end_fixed_start (PedDevice* dev, PedSector start_sector,
|
||||
+ PedGeometry* range_end)
|
||||
+{
|
||||
+ PedGeometry range_start;
|
||||
+ range_start.dev = dev;
|
||||
+ range_start.start = start_sector;
|
||||
+ range_start.end = start_sector;
|
||||
+ range_start.length = 1;
|
||||
+
|
||||
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
|
||||
+ &range_start, range_end, 1, dev->length);
|
||||
+}
|
||||
+
|
||||
void
|
||||
help_on (char* topic)
|
||||
{
|
||||
@@ -1484,6 +1502,66 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
+do_resizepart (PedDevice** dev, PedDisk** diskp)
|
||||
+{
|
||||
+ PedDisk *disk = *diskp;
|
||||
+ PedPartition *part = NULL;
|
||||
+ PedSector start, end, oldend;
|
||||
+ PedGeometry *range_end = NULL;
|
||||
+ PedConstraint* constraint;
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ if (!disk) {
|
||||
+ disk = ped_disk_new (*dev);
|
||||
+ *diskp = disk;
|
||||
+ }
|
||||
+ if (!disk)
|
||||
+ goto error;
|
||||
+
|
||||
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
|
||||
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
|
||||
+ alignment == ALIGNMENT_CYLINDER))
|
||||
+ goto error;
|
||||
+
|
||||
+ if (!command_line_get_partition (_("Partition number?"), disk, &part))
|
||||
+ goto error;
|
||||
+ if (!_partition_warn_busy (part))
|
||||
+ goto error;
|
||||
+
|
||||
+ start = part->geom.start;
|
||||
+ end = oldend = part->geom.end;
|
||||
+ if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, NULL))
|
||||
+ goto error;
|
||||
+ /* Do not move start of the partition */
|
||||
+ constraint = constraint_from_start_end_fixed_start (*dev, start, range_end);
|
||||
+ if (!ped_disk_set_partition_geom (disk, part, constraint,
|
||||
+ start, end))
|
||||
+ goto error_destroy_constraint;
|
||||
+ /* warn when shrinking partition - might lose data */
|
||||
+ if (part->geom.end < oldend)
|
||||
+ if (ped_exception_throw (
|
||||
+ PED_EXCEPTION_WARNING,
|
||||
+ PED_EXCEPTION_YES_NO,
|
||||
+ _("Shrinking a partition can cause data loss, " \
|
||||
+ "are you sure you want to continue?")) != PED_EXCEPTION_YES)
|
||||
+ goto error_destroy_constraint;
|
||||
+ ped_disk_commit (disk);
|
||||
+
|
||||
+ if ((*dev)->type != PED_DEVICE_FILE)
|
||||
+ disk_is_modified = 1;
|
||||
+
|
||||
+ rc = 1;
|
||||
+
|
||||
+error_destroy_constraint:
|
||||
+ ped_constraint_destroy (constraint);
|
||||
+error:
|
||||
+ if (range_end != NULL)
|
||||
+ ped_geometry_destroy (range_end);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
do_rm (PedDevice** dev, PedDisk** diskp)
|
||||
{
|
||||
PedPartition* part = NULL;
|
||||
@@ -1906,6 +1984,14 @@ NULL),
|
||||
str_list_create (_(start_end_msg), NULL), 1));
|
||||
|
||||
command_register (commands, command_create (
|
||||
+ str_list_create_unique ("resizepart", _("resizepart"), NULL),
|
||||
+ do_resizepart,
|
||||
+ str_list_create (
|
||||
+_("resizepart NUMBER END resize partition NUMBER"),
|
||||
+NULL),
|
||||
+ str_list_create (_(number_msg), _(end_msg), NULL), 1));
|
||||
+
|
||||
+command_register (commands, command_create (
|
||||
str_list_create_unique ("rm", _("rm"), NULL),
|
||||
do_rm,
|
||||
str_list_create (
|
||||
--
|
||||
1.9.3
|
||||
|
122
0127-tests-excersise-resize-command.patch
Normal file
122
0127-tests-excersise-resize-command.patch
Normal file
@ -0,0 +1,122 @@
|
||||
From 33fd692cb14045fdc13306cd57cfe2040328daa8 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Uzel <petr.uzel@suse.cz>
|
||||
Date: Tue, 27 Sep 2011 09:11:29 +0200
|
||||
Subject: [PATCH 127/134] tests: excersise resize command
|
||||
|
||||
a lot of TODOs
|
||||
---
|
||||
tests/Makefile.am | 1 +
|
||||
tests/t3200-resize-partition.sh | 89 +++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 90 insertions(+)
|
||||
create mode 100755 tests/t3200-resize-partition.sh
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 0b5b1b6..b726366 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -50,6 +50,7 @@ TESTS = \
|
||||
t2400-dos-hfs-partition-type.sh \
|
||||
t2500-probe-corrupt-hfs.sh \
|
||||
t3000-resize-fs.sh \
|
||||
+ t3200-resize-partition.sh \
|
||||
t3200-type-change.sh \
|
||||
t3300-palo-prep.sh \
|
||||
t3310-flags.sh \
|
||||
diff --git a/tests/t3200-resize-partition.sh b/tests/t3200-resize-partition.sh
|
||||
new file mode 100755
|
||||
index 0000000..251b545
|
||||
--- /dev/null
|
||||
+++ b/tests/t3200-resize-partition.sh
|
||||
@@ -0,0 +1,89 @@
|
||||
+#!/bin/sh
|
||||
+# exercise the resize sub-command
|
||||
+# based on t3000-resize-fs.sh test
|
||||
+
|
||||
+# Copyright (C) 2009-2011 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||||
+
|
||||
+require_root_
|
||||
+require_scsi_debug_module_
|
||||
+
|
||||
+ss=$sector_size_
|
||||
+
|
||||
+default_start=1024s
|
||||
+default_end=2048s
|
||||
+
|
||||
+# create memory-backed device
|
||||
+scsi_debug_setup_ dev_size_mb=5 > dev-name ||
|
||||
+ skip_ 'failed to create scsi_debug device'
|
||||
+dev=$(cat dev-name)
|
||||
+
|
||||
+# TODO test simple shrink
|
||||
+# TODO test expand past end of the disk
|
||||
+# TODO test expand past begin of next partition
|
||||
+# TODO test shrink before start
|
||||
+# TODO test everything with GPT
|
||||
+# TODO more tests with extended/logical partitions
|
||||
+
|
||||
+parted -s $dev mklabel msdos > out 2> err || fail=1
|
||||
+# expect no output
|
||||
+compare /dev/null out || fail=1
|
||||
+compare /dev/null err || fail=1
|
||||
+
|
||||
+# ensure that the disk is large enough
|
||||
+dev_n_sectors=$(parted -s $dev u s p|sed -n '2s/.* \([0-9]*\)s$/\1/p')
|
||||
+device_sectors_required=$(echo $default_end | sed 's/s$//')
|
||||
+# Ensure that $dev is large enough for this test
|
||||
+test $device_sectors_required -le $dev_n_sectors || fail=1
|
||||
+
|
||||
+# create an empty partition
|
||||
+parted -a minimal -s $dev mkpart primary $default_start $default_end > out 2>&1 || fail=1
|
||||
+compare /dev/null out || fail=1
|
||||
+
|
||||
+# print partition table
|
||||
+parted -m -s $dev u s p > out 2>&1 || fail=1
|
||||
+
|
||||
+# FIXME: check expected output
|
||||
+
|
||||
+# wait for new partition device to appear
|
||||
+wait_for_dev_to_appear_ ${dev}1 || { warn_ "${dev}1 did not appear" fail=1; }
|
||||
+sleep 1
|
||||
+
|
||||
+
|
||||
+# extend the filesystem to end on sector 4096
|
||||
+new_end=4096s
|
||||
+parted -s $dev resizepart 1 $new_end > out 2> err || fail=1
|
||||
+# expect no output
|
||||
+compare /dev/null out || fail=1
|
||||
+compare /dev/null err || fail=1
|
||||
+
|
||||
+# print partition table
|
||||
+parted -m -s $dev u s p > out 2>&1 || fail=1
|
||||
+
|
||||
+sed -n 3p out > k && mv k out || fail=1
|
||||
+printf "1:$default_start:$new_end:3073s:::$ms;\n" > exp || fail=1
|
||||
+compare exp out || fail=1
|
||||
+
|
||||
+# Remove the partition explicitly, so that mklabel doesn't evoke a warning.
|
||||
+parted -s $dev rm 1 || fail=1
|
||||
+
|
||||
+# Create a clean partition table for the next iteration.
|
||||
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
|
||||
+# expect no output
|
||||
+compare /dev/null out || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
1.9.3
|
||||
|
331
0128-libparted-Add-support-for-partition-resize.patch
Normal file
331
0128-libparted-Add-support-for-partition-resize.patch
Normal file
@ -0,0 +1,331 @@
|
||||
From f09ca967a0bc443b869a6fad5b5ffe8e95c3fe9a Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Tue, 29 Nov 2011 14:05:48 -0500
|
||||
Subject: [PATCH 128/134] libparted: Add support for partition resize
|
||||
|
||||
When resizing a partition ( same partition number, same
|
||||
start sector, different end sector ), try to use the
|
||||
new BLKPG_RES_PARTITION request to update the kernel
|
||||
partition table with the new size. Also handle resizing
|
||||
devmapper targets.
|
||||
---
|
||||
NEWS | 3 +-
|
||||
libparted/arch/linux.c | 207 +++++++++++++++++++++++++++++++++++++++++--------
|
||||
2 files changed, 177 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 7069020..ad2fea1 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -4,7 +4,8 @@ GNU parted NEWS -*- outline -*-
|
||||
|
||||
** New Features
|
||||
|
||||
- Add resizepart command to resize a partition
|
||||
+ Add resizepart command to resize a partition. This works even on
|
||||
+ mounted partitions.
|
||||
|
||||
Add support for EAV DASD partitions, which are ECKD's with more than
|
||||
65520 cylinders.
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index cdb8a26..0f18904 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2493,8 +2493,9 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
|
||||
}
|
||||
linux_part.length *= disk->dev->sector_size;
|
||||
}
|
||||
- else
|
||||
+ else {
|
||||
linux_part.length = part->geom.length * disk->dev->sector_size;
|
||||
+ }
|
||||
linux_part.pno = part->num;
|
||||
strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
|
||||
if (vol_name)
|
||||
@@ -2521,6 +2522,60 @@ _blkpg_remove_partition (PedDisk* disk, int n)
|
||||
BLKPG_DEL_PARTITION);
|
||||
}
|
||||
|
||||
+#ifdef BLKPG_RESIZE_PARTITION
|
||||
+static int _blkpg_resize_partition (PedDisk* disk, const PedPartition *part)
|
||||
+{
|
||||
+ struct blkpg_partition linux_part;
|
||||
+ char* dev_name;
|
||||
+
|
||||
+ PED_ASSERT(disk != NULL);
|
||||
+ PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
|
||||
+
|
||||
+ dev_name = _device_get_part_path (disk->dev, part->num);
|
||||
+ if (!dev_name)
|
||||
+ return 0;
|
||||
+ memset (&linux_part, 0, sizeof (linux_part));
|
||||
+ linux_part.start = part->geom.start * disk->dev->sector_size;
|
||||
+ /* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */
|
||||
+ if (part->type & PED_PARTITION_EXTENDED) {
|
||||
+ if (disk->dev->sector_size == 512) {
|
||||
+ linux_part.length = 2;
|
||||
+ PedPartition *walk;
|
||||
+ /* if the second sector is claimed by a logical partition,
|
||||
+ then there's just no room for lilo, so don't try to use it */
|
||||
+ for (walk = part->part_list; walk; walk = walk->next) {
|
||||
+ if (walk->geom.start == part->geom.start+1)
|
||||
+ linux_part.length = 1;
|
||||
+ }
|
||||
+ } else linux_part.length = 1;
|
||||
+ }
|
||||
+ else
|
||||
+ linux_part.length = part->geom.length * disk->dev->sector_size;
|
||||
+ linux_part.pno = part->num;
|
||||
+ strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
|
||||
+
|
||||
+ free (dev_name);
|
||||
+
|
||||
+ if (!_blkpg_part_command (disk->dev, &linux_part,
|
||||
+ BLKPG_RESIZE_PARTITION)) {
|
||||
+ return ped_exception_throw (
|
||||
+ PED_EXCEPTION_ERROR,
|
||||
+ PED_EXCEPTION_IGNORE_CANCEL,
|
||||
+ _("Error informing the kernel about modifications to "
|
||||
+ "partition %s -- %s. This means Linux won't know "
|
||||
+ "about any changes you made to %s until you reboot "
|
||||
+ "-- so you shouldn't mount it or use it in any way "
|
||||
+ "before rebooting."),
|
||||
+ linux_part.devname,
|
||||
+ strerror (errno),
|
||||
+ linux_part.devname)
|
||||
+ == PED_EXCEPTION_IGNORE;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/* Read the integer from /sys/block/DEV_BASE/ENTRY and set *VAL
|
||||
to that value, where DEV_BASE is the last component of DEV->path.
|
||||
Upon success, return true. Otherwise, return false. */
|
||||
@@ -2789,6 +2844,76 @@ err:
|
||||
free (vol_name);
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+static int
|
||||
+_dm_resize_partition (PedDisk* disk, const PedPartition* part)
|
||||
+{
|
||||
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
|
||||
+ char* params = NULL;
|
||||
+ char* vol_name = NULL;
|
||||
+ const char* dev_name = NULL;
|
||||
+ uint32_t cookie = 0;
|
||||
+
|
||||
+ /* Get map name from devicemapper */
|
||||
+ struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
|
||||
+ if (!task)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (!dm_task_set_major_minor (task, arch_specific->major,
|
||||
+ arch_specific->minor, 0))
|
||||
+ goto err;
|
||||
+
|
||||
+ if (!dm_task_run(task))
|
||||
+ goto err;
|
||||
+
|
||||
+ dev_name = dm_task_get_name (task);
|
||||
+ size_t name_len = strlen (dev_name);
|
||||
+ vol_name = zasprintf ("%s%s%d",
|
||||
+ dev_name,
|
||||
+ isdigit (dev_name[name_len - 1]) ? "p" : "",
|
||||
+ part->num);
|
||||
+ if (vol_name == NULL)
|
||||
+ goto err;
|
||||
+
|
||||
+ /* Caution: dm_task_destroy frees dev_name. */
|
||||
+ dm_task_destroy (task);
|
||||
+ task = NULL;
|
||||
+ if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major,
|
||||
+ arch_specific->minor, part->geom.start)))
|
||||
+ goto err;
|
||||
+
|
||||
+ task = dm_task_create (DM_DEVICE_RELOAD);
|
||||
+ if (!task)
|
||||
+ goto err;
|
||||
+
|
||||
+ dm_task_set_name (task, vol_name);
|
||||
+ dm_task_add_target (task, 0, part->geom.length,
|
||||
+ "linear", params);
|
||||
+ if (!dm_task_set_cookie (task, &cookie, 0))
|
||||
+ goto err;
|
||||
+ if (dm_task_run (task)) {
|
||||
+ dm_task_destroy (task);
|
||||
+ task = dm_task_create (DM_DEVICE_RESUME);
|
||||
+ if (!task)
|
||||
+ goto err;
|
||||
+ dm_task_set_name (task, vol_name);
|
||||
+ if (!dm_task_set_cookie (task, &cookie, 0))
|
||||
+ goto err;
|
||||
+ if (dm_task_run (task)) {
|
||||
+ free (params);
|
||||
+ free (vol_name);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+err:
|
||||
+ dm_task_update_nodes();
|
||||
+ if (task)
|
||||
+ dm_task_destroy (task);
|
||||
+ free (params);
|
||||
+ free (vol_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -2810,9 +2935,10 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
{
|
||||
PED_ASSERT(disk != NULL);
|
||||
PED_ASSERT(disk->dev != NULL);
|
||||
- int lpn;
|
||||
+ int lpn, lpn2;
|
||||
unsigned int part_range = _device_get_partition_range(disk->dev);
|
||||
int (*add_partition)(PedDisk* disk, const PedPartition *part);
|
||||
+ int (*resize_partition)(PedDisk* disk, const PedPartition *part);
|
||||
int (*remove_partition)(PedDisk* disk, int partno);
|
||||
bool (*get_partition_start_and_length)(PedPartition const *part,
|
||||
unsigned long long *start,
|
||||
@@ -2822,10 +2948,16 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
if (disk->dev->type == PED_DEVICE_DM) {
|
||||
add_partition = _dm_add_partition;
|
||||
remove_partition = _dm_remove_partition;
|
||||
+ resize_partition = _dm_resize_partition;
|
||||
get_partition_start_and_length = _dm_get_partition_start_and_length;
|
||||
} else {
|
||||
add_partition = _blkpg_add_partition;
|
||||
remove_partition = _blkpg_remove_partition;
|
||||
+#ifdef BLKPG_RESIZE_PARTITION
|
||||
+ resize_partition = _blkpg_resize_partition;
|
||||
+#else
|
||||
+ resize_partition = NULL;
|
||||
+#endif
|
||||
get_partition_start_and_length = _kernel_get_partition_start_and_length;
|
||||
}
|
||||
|
||||
@@ -2835,7 +2967,11 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
lpn = PED_MAX(lpn, part_range);
|
||||
else
|
||||
lpn = part_range;
|
||||
-
|
||||
+ /* for add pass, use lesser of device or label limit */
|
||||
+ if (ped_disk_get_max_supported_partition_count(disk, &lpn2))
|
||||
+ lpn2 = PED_MIN(lpn2, part_range);
|
||||
+ else
|
||||
+ lpn2 = part_range;
|
||||
/* Its not possible to support largest_partnum < 0.
|
||||
* largest_partnum == 0 would mean does not support partitions.
|
||||
* */
|
||||
@@ -2860,9 +2996,10 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
if (get_partition_start_and_length(part,
|
||||
&start, &length)
|
||||
&& start == part->geom.start
|
||||
- && length == part->geom.length)
|
||||
+ && (length == part->geom.length
|
||||
+ || (resize_partition && part->num < lpn2)))
|
||||
{
|
||||
- /* partition is unchanged, so nothing to do */
|
||||
+ /* partition is unchanged, or will be resized so nothing to do */
|
||||
ok[i - 1] = 1;
|
||||
continue;
|
||||
}
|
||||
@@ -2882,13 +3019,8 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
} while (n_sleep--);
|
||||
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;
|
||||
+ }
|
||||
+ lpn = lpn2;
|
||||
/* don't actually add partitions for loop */
|
||||
if (strcmp (disk->type->name, "loop") == 0)
|
||||
lpn = 0;
|
||||
@@ -2901,11 +3033,22 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
/* get start and length of existing partition */
|
||||
if (get_partition_start_and_length(part,
|
||||
&start, &length)
|
||||
- && start == part->geom.start
|
||||
- && length == part->geom.length) {
|
||||
- ok[i - 1] = 1;
|
||||
- /* partition is unchanged, so nothing to do */
|
||||
- continue;
|
||||
+ && start == part->geom.start)
|
||||
+ {
|
||||
+ if (length == part->geom.length) {
|
||||
+ ok[i - 1] = 1;
|
||||
+ /* partition is unchanged, so nothing to do */
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (resize_partition
|
||||
+ && start == part->geom.start)
|
||||
+ {
|
||||
+ /* try to resize */
|
||||
+ if (resize_partition (disk, part)) {
|
||||
+ ok[i - 1] = 1;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
/* add the (possibly modified or new) partition */
|
||||
if (!add_partition (disk, part)) {
|
||||
@@ -2917,31 +3060,31 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
char *bad_part_list = NULL;
|
||||
/* now warn about any errors */
|
||||
for (i = 1; i <= lpn; i++) {
|
||||
- if (ok[i - 1] || errnums[i - 1] == ENXIO)
|
||||
- continue;
|
||||
- if (bad_part_list == NULL) {
|
||||
- bad_part_list = malloc (lpn * 5);
|
||||
- if (!bad_part_list)
|
||||
- goto cleanup;
|
||||
- bad_part_list[0] = 0;
|
||||
- }
|
||||
- sprintf (bad_part_list + strlen (bad_part_list), "%d, ", i);
|
||||
- }
|
||||
+ if (ok[i - 1] || errnums[i - 1] == ENXIO)
|
||||
+ continue;
|
||||
+ if (bad_part_list == NULL) {
|
||||
+ bad_part_list = malloc (lpn * 5);
|
||||
+ if (!bad_part_list)
|
||||
+ goto cleanup;
|
||||
+ bad_part_list[0] = 0;
|
||||
+ }
|
||||
+ sprintf (bad_part_list + strlen (bad_part_list), "%d, ", i);
|
||||
+ }
|
||||
if (bad_part_list == NULL)
|
||||
- ret = 1;
|
||||
- else {
|
||||
+ ret = 1;
|
||||
+ else {
|
||||
bad_part_list[strlen (bad_part_list) - 2] = 0;
|
||||
if (ped_exception_throw (
|
||||
PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_IGNORE_CANCEL,
|
||||
_("Partition(s) %s on %s have been written, but we have "
|
||||
- "been unable to inform the kernel of the change, "
|
||||
- "probably because it/they are in use. As a result, "
|
||||
+ "been unable to inform the kernel of the change, "
|
||||
+ "probably because it/they are in use. As a result, "
|
||||
"the old partition(s) will remain in use. You "
|
||||
"should reboot now before making further changes."),
|
||||
bad_part_list, disk->dev->path) == PED_EXCEPTION_IGNORE)
|
||||
ret = 1;
|
||||
- free (bad_part_list);
|
||||
+ free (bad_part_list);
|
||||
}
|
||||
cleanup:
|
||||
free (errnums);
|
||||
--
|
||||
1.9.3
|
||||
|
105
0129-parted-make-_partition_warn_busy-actually-a-warning-.patch
Normal file
105
0129-parted-make-_partition_warn_busy-actually-a-warning-.patch
Normal file
@ -0,0 +1,105 @@
|
||||
From f46146a15bf45478569c1d364661d3d54f8e3a1a Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Wed, 30 Nov 2011 13:13:58 -0500
|
||||
Subject: [PATCH 129/134] parted: make _partition_warn_busy actually a warning
|
||||
instead of an error
|
||||
|
||||
This function was throwing a PED_EXCEPTION_ERROR with only the
|
||||
PED_EXCEPTION_CANCEL option. Converted to a PED_EXCEPTION_WARNING
|
||||
with the option to continue anyhow.
|
||||
---
|
||||
NEWS | 3 +++
|
||||
parted/parted.c | 17 ++++++++++-------
|
||||
tests/t1101-busy-partition.sh | 2 +-
|
||||
tests/t1102-loop-label.sh | 3 +--
|
||||
tests/t9041-undetected-in-use-16th-partition.sh | 4 ++--
|
||||
5 files changed, 17 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index ad2fea1..118f459 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -134,6 +134,9 @@ GNU parted NEWS -*- outline -*-
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
+ When attempting to manipulate a mounted partition, parted now issues
|
||||
+ a warning that you can choose to ignore, instead of an error.
|
||||
+
|
||||
When creating a loop label, it automatically comes with a partition
|
||||
using the whole disk.
|
||||
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index a36ca28..ec9e04e 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -224,14 +224,17 @@ _partition_warn_busy (PedPartition* part)
|
||||
|
||||
if (ped_partition_is_busy (part)) {
|
||||
path = ped_partition_get_path (part);
|
||||
- ped_exception_throw (
|
||||
- PED_EXCEPTION_ERROR,
|
||||
- PED_EXCEPTION_CANCEL,
|
||||
- _("Partition %s is being used. You must unmount it "
|
||||
- "before you modify it with Parted."),
|
||||
- path);
|
||||
+ if (ped_exception_throw (
|
||||
+ PED_EXCEPTION_WARNING,
|
||||
+ PED_EXCEPTION_YES_NO,
|
||||
+ _("Partition %s is being used. Are you sure you " \
|
||||
+ "want to continue?"),
|
||||
+ path) != PED_EXCEPTION_YES)
|
||||
+ {
|
||||
+ free (path);
|
||||
+ return 0;
|
||||
+ }
|
||||
free (path);
|
||||
- return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
diff --git a/tests/t1101-busy-partition.sh b/tests/t1101-busy-partition.sh
|
||||
index eb3fac6..ad091f7 100755
|
||||
--- a/tests/t1101-busy-partition.sh
|
||||
+++ b/tests/t1101-busy-partition.sh
|
||||
@@ -29,7 +29,7 @@ scsi_debug_setup_ dev_size_mb=80 > dev-name ||
|
||||
dev=$(cat dev-name)
|
||||
|
||||
cat <<EOF > exp-error || framework_failure
|
||||
-Error: Partition ${dev}2 is being used. You must unmount it before you modify it with Parted.
|
||||
+Warning: Partition ${dev}2 is being used. Are you sure you want to continue?
|
||||
EOF
|
||||
|
||||
parted -s "$dev" mklabel msdos > out 2>&1 || fail=1
|
||||
diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh
|
||||
index c6574c2..9752002 100644
|
||||
--- a/tests/t1102-loop-label.sh
|
||||
+++ b/tests/t1102-loop-label.sh
|
||||
@@ -73,8 +73,7 @@ compare exp out || fail=1
|
||||
# make sure partition busy check works ( mklabel checks whole disk )
|
||||
parted -s "$dev" rm 1 > out 2>&1; test $? = 1 || fail=1
|
||||
# create expected output file
|
||||
-echo "Error: Partition $dev is being used. You must unmount it before you modify \
|
||||
-it with Parted." > exp
|
||||
+echo "Warning: Partition ${dev} is being used. Are you sure you want to continue?" > exp
|
||||
compare exp out || fail=1
|
||||
|
||||
umount "$mount_point"
|
||||
diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
index b763e91..edaae1b 100644
|
||||
--- a/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
@@ -87,8 +87,8 @@ for part_dev in $partitions; do
|
||||
# Removal of mounted partition must fail.
|
||||
parted -s $scsi_dev rm $n > out 2>&1 && fail=1
|
||||
|
||||
- echo "Error: Partition $part_dev is being used." \
|
||||
- 'You must unmount it before you modify it with Parted.' \
|
||||
+ echo "Warning: Partition $part_dev is being used." \
|
||||
+ 'Are you sure you want to continue?' \
|
||||
> exp-error || framework_failure_
|
||||
|
||||
# expect error
|
||||
--
|
||||
1.9.3
|
||||
|
28
0130-parted-Allow-undocumented-commands.patch
Normal file
28
0130-parted-Allow-undocumented-commands.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 360d6277d674c6f92135c8b6bf274c48675ef168 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Mon, 5 Dec 2011 19:24:39 -0500
|
||||
Subject: [PATCH 130/134] parted: Allow undocumented commands
|
||||
|
||||
Have command_print_summary print nothing if the command summary is NULL.
|
||||
This allows for a command to be registered, but not documented in the
|
||||
output of help.
|
||||
---
|
||||
parted/command.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/parted/command.c b/parted/command.c
|
||||
index e8fa64e..bc70e8a 100644
|
||||
--- a/parted/command.c
|
||||
+++ b/parted/command.c
|
||||
@@ -118,6 +118,8 @@ command_get_names (Command** list)
|
||||
void
|
||||
command_print_summary (Command* cmd)
|
||||
{
|
||||
+ if (cmd->summary == NULL)
|
||||
+ return;
|
||||
fputs (" ", stdout);
|
||||
str_list_print_wrap (cmd->summary, screen_width(), 2, 8, stdout);
|
||||
putchar ('\n');
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,50 @@
|
||||
From 56bfbe21ecca0cb6466c78baed192dc2e5401676 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Tue, 8 Jan 2013 19:40:35 -0500
|
||||
Subject: [PATCH 131/134] parted: Add stub resize command for backward
|
||||
compatibility
|
||||
|
||||
To make sure that older scripts trying to use the resize command do not
|
||||
accidentally run the new resizepart command by mistake, this undocumented
|
||||
stub command will throw an error if called.
|
||||
---
|
||||
parted/parted.c | 16 ++++++++++++++++
|
||||
1 file changed, 16 insertions(+)
|
||||
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index ec9e04e..f27a035 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -1505,6 +1505,16 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
+do_resize (PedDevice **dev, PedDisk** diskp)
|
||||
+{
|
||||
+ ped_exception_throw (
|
||||
+ PED_EXCEPTION_ERROR,
|
||||
+ PED_EXCEPTION_CANCEL,
|
||||
+ _("The resize command has been removed in parted 3.0"));
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
do_resizepart (PedDevice** dev, PedDisk** diskp)
|
||||
{
|
||||
PedDisk *disk = *diskp;
|
||||
@@ -1987,6 +1997,12 @@ NULL),
|
||||
str_list_create (_(start_end_msg), NULL), 1));
|
||||
|
||||
command_register (commands, command_create (
|
||||
+ str_list_create_unique ("resize", _("resize"), NULL),
|
||||
+ do_resize,
|
||||
+ NULL,
|
||||
+ str_list_create (_(N_("The resize command was removed in parted 3.0\n")), NULL), 1));
|
||||
+
|
||||
+command_register (commands, command_create (
|
||||
str_list_create_unique ("resizepart", _("resizepart"), NULL),
|
||||
do_resizepart,
|
||||
str_list_create (
|
||||
--
|
||||
1.9.3
|
||||
|
62
0132-Document-resizepart-command.patch
Normal file
62
0132-Document-resizepart-command.patch
Normal file
@ -0,0 +1,62 @@
|
||||
From 5c793853fe5cb0718d895c3394fb909c73c6fa1e Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Sun, 25 May 2014 14:43:39 -0400
|
||||
Subject: [PATCH 132/134] Document resizepart command
|
||||
|
||||
---
|
||||
doc/C/parted.8 | 4 ++++
|
||||
doc/parted.texi | 16 ++++++++++++++++
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/doc/C/parted.8 b/doc/C/parted.8
|
||||
index f8e6a3d..689011c 100644
|
||||
--- a/doc/C/parted.8
|
||||
+++ b/doc/C/parted.8
|
||||
@@ -93,6 +93,10 @@ Rescue a lost partition that was located somewhere between \fIstart\fP and
|
||||
\fIend\fP. If a partition is found, \fBparted\fP will ask if you want to
|
||||
create an entry for it in the partition table.
|
||||
.TP
|
||||
+.B resizepart \fIpartition\fP \fIend\fP
|
||||
+Change the \fIend\fP position of \fIpartition\fP. Note that this does not
|
||||
+modify any filesystem present in the partition.
|
||||
+.TP
|
||||
.B rm \fIpartition\fP
|
||||
Delete \fIpartition\fP.
|
||||
.TP
|
||||
diff --git a/doc/parted.texi b/doc/parted.texi
|
||||
index 2b6f7f8..07aa702 100644
|
||||
--- a/doc/parted.texi
|
||||
+++ b/doc/parted.texi
|
||||
@@ -423,6 +423,7 @@ GNU Parted provides the following commands:
|
||||
* print::
|
||||
* quit::
|
||||
* rescue::
|
||||
+* resizepart::
|
||||
* rm::
|
||||
* select::
|
||||
* set::
|
||||
@@ -744,6 +745,21 @@ It's back! :)
|
||||
|
||||
@end deffn
|
||||
|
||||
+@node resizepart
|
||||
+@subsection resizepart
|
||||
+@cindex resizepart, command description
|
||||
+@cindex command description, resizepart
|
||||
+
|
||||
+@deffn Command resizepart @var{number} @var{end}
|
||||
+
|
||||
+Moves the @var{end} position of partition @var{number}. Note that this
|
||||
+does not modify any filesystem present in the partition. If you wish to
|
||||
+do this, you will need to use external tools, such as @command{resize2fs}.
|
||||
+
|
||||
+When growing a partition you will want to grow the filesystem afterwards,
|
||||
+but when shrinking, you need to shrink the filesystem before the partition.
|
||||
+@end deffn
|
||||
+
|
||||
@node rm
|
||||
@subsection rm
|
||||
@cindex rm, command description
|
||||
--
|
||||
1.9.3
|
||||
|
28
0133-tests-fix-t9020-alignment.sh.patch
Normal file
28
0133-tests-fix-t9020-alignment.sh.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From ae37d7c4586664e18f42e25a7f210f392e1f0100 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Sun, 15 Jun 2014 18:20:07 -0400
|
||||
Subject: [PATCH 133/134] tests: fix t9020-alignment.sh
|
||||
|
||||
This test was refering to print-alignment by absolute path, which
|
||||
broke building with a different object directory, causing
|
||||
make distcheck to fail.
|
||||
---
|
||||
tests/t9020-alignment.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/t9020-alignment.sh b/tests/t9020-alignment.sh
|
||||
index f27b59b..9ea6eb0 100755
|
||||
--- a/tests/t9020-alignment.sh
|
||||
+++ b/tests/t9020-alignment.sh
|
||||
@@ -36,7 +36,7 @@ scsi_debug_setup_ physblk_exp=3 lowest_aligned=7 num_parts=4 > dev-name ||
|
||||
scsi_dev=$(cat dev-name)
|
||||
|
||||
# print alignment info
|
||||
-"$abs_srcdir/print-align" $scsi_dev > out 2>&1 || fail=1
|
||||
+../print-align $scsi_dev > out 2>&1 || fail=1
|
||||
|
||||
compare exp out || fail=1
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
26
0134-maint-correct-a-POT-file-updating-rule.patch
Normal file
26
0134-maint-correct-a-POT-file-updating-rule.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From 081ed98dabfd1d857139c71fd6a74f8898dd9dcb Mon Sep 17 00:00:00 2001
|
||||
From: Jim Meyering <meyering@fb.com>
|
||||
Date: Mon, 23 Jun 2014 07:20:27 -0700
|
||||
Subject: [PATCH 134/134] maint: correct a POT-file updating rule
|
||||
|
||||
* doc/C/Makefile.am (updatepo): If there is no po/$name.pot,
|
||||
create an empty one. Reported by Philip Susi.
|
||||
---
|
||||
doc/C/Makefile.am | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am
|
||||
index 42b3cb1..c3595f5 100644
|
||||
--- a/doc/C/Makefile.am
|
||||
+++ b/doc/C/Makefile.am
|
||||
@@ -13,6 +13,7 @@ updatepo:
|
||||
test -w . || exit 0; \
|
||||
for name in $(dist_man8_MANS); do \
|
||||
echo $$name; \
|
||||
+ test -f po/$$name.pot || touch po/$$name.pot; \
|
||||
cp po/$$name.pot po/$$name.new.pot; \
|
||||
po4a-updatepo -f man -m $$name -p po/$$name.new.pot; \
|
||||
diff -I '^\"POT-Creation-Date: ' po/$$name.pot po/$$name.new.pot 2>&1 > /dev/null; \
|
||||
--
|
||||
1.9.3
|
||||
|
16
parted.spec
16
parted.spec
@ -4,7 +4,7 @@
|
||||
Summary: The GNU disk partition manipulation program
|
||||
Name: parted
|
||||
Version: 3.1
|
||||
Release: 28%{?dist}
|
||||
Release: 29%{?dist}
|
||||
License: GPLv3+
|
||||
Group: Applications/System
|
||||
URL: http://www.gnu.org/software/parted
|
||||
@ -150,6 +150,15 @@ Patch0122: 0122-tests-use-test-s-operator-not.patch
|
||||
Patch0123: 0123-libparted-Fix-part-dupe-with-empty-name.patch
|
||||
Patch0124: 0124-tests-check-name-when-duplicating.patch
|
||||
Patch0125: 0125-Fix-python-test-scripts-for-distribution.patch
|
||||
Patch0126: 0126-parted-add-resizepart-command.patch
|
||||
Patch0127: 0127-tests-excersise-resize-command.patch
|
||||
Patch0128: 0128-libparted-Add-support-for-partition-resize.patch
|
||||
Patch0129: 0129-parted-make-_partition_warn_busy-actually-a-warning-.patch
|
||||
Patch0130: 0130-parted-Allow-undocumented-commands.patch
|
||||
Patch0131: 0131-parted-Add-stub-resize-command-for-backward-compatib.patch
|
||||
Patch0132: 0132-Document-resizepart-command.patch
|
||||
Patch0133: 0133-tests-fix-t9020-alignment.sh.patch
|
||||
Patch0134: 0134-maint-correct-a-POT-file-updating-rule.patch
|
||||
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: e2fsprogs-devel
|
||||
@ -289,6 +298,11 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Jul 14 2014 Brian C. Lane <bcl@redhat.com> 3.1-29
|
||||
- Rebase on parted master commit 081ed98
|
||||
- libparted: Add support for partition resize
|
||||
- parted: add resizepart command
|
||||
|
||||
* Wed Jun 11 2014 Brian C. Lane <bcl@redhat.com> 3.1-28
|
||||
- Rebase on parted master commit 1da239e2ebd2
|
||||
- libparted: Fix bug with dupe and empty name
|
||||
|
Loading…
Reference in New Issue
Block a user