parted package update
Signed-off-by: basebuilder_pel7ppc64bebuilder0 <basebuilder@powerel.org>master
parent
b0d8d7692b
commit
b8ea4c8fec
SOURCES
SPECS
|
@ -0,0 +1,35 @@
|
|||
From 7ed256294ba287c807eca7bcc915a42f0030e5f9 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 22 Jan 2014 11:57:56 -0800
|
||||
Subject: [PATCH] tests: Remove rmmod loop from t8001 (#1040504)
|
||||
|
||||
There is no reason to remove and reload the loop module, which may be in
|
||||
use by other things on the system the test is running on.
|
||||
|
||||
* tests/t8001-loop-blkpg.sh: Drop loop remove/load code.
|
||||
---
|
||||
tests/t8001-loop-blkpg.sh | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
diff --git a/tests/t8001-loop-blkpg.sh b/tests/t8001-loop-blkpg.sh
|
||||
index deef18b..abffd4e 100755
|
||||
--- a/tests/t8001-loop-blkpg.sh
|
||||
+++ b/tests/t8001-loop-blkpg.sh
|
||||
@@ -27,14 +27,6 @@ cleanup_fn_()
|
||||
&& { udevadm settle --timeout=3; losetup -d "$loopdev"; }
|
||||
}
|
||||
|
||||
-# If the loop module is loaded, unload it first
|
||||
-if lsmod | grep '^loop[[:space:]]'; then
|
||||
- rmmod loop || fail=1
|
||||
-fi
|
||||
-
|
||||
-# Insert loop module with max_part > 1
|
||||
-modprobe loop max_part=7 || fail=1
|
||||
-
|
||||
# Create backing file
|
||||
dd if=/dev/zero of=backing_file bs=1M count=4 >/dev/null 2>&1 || fail=1
|
||||
|
||||
--
|
||||
1.8.4.2
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From 9f0da5d1112d148fc9bdbedfe3f0ee04b7a66708 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 22 Jan 2014 14:51:51 -0800
|
||||
Subject: [PATCH] tests: Increase size of container filesystem in t4100 tests
|
||||
(#1036149)
|
||||
|
||||
The xfs container filesystem was running out of space with larger sector
|
||||
size tests. Increase it from 20M to 100M.
|
||||
|
||||
* tests/t4100-dvh-partition-limits.sh: Increase fs_file to 100M
|
||||
* tests/t4100-msdos-partition-limits.sh: Increase fs_file to 100M
|
||||
---
|
||||
tests/t4100-dvh-partition-limits.sh | 2 +-
|
||||
tests/t4100-msdos-partition-limits.sh | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/t4100-dvh-partition-limits.sh b/tests/t4100-dvh-partition-limits.sh
|
||||
index d885502..ec6981d 100755
|
||||
--- a/tests/t4100-dvh-partition-limits.sh
|
||||
+++ b/tests/t4100-dvh-partition-limits.sh
|
||||
@@ -37,7 +37,7 @@ mp=`pwd`/mount-point
|
||||
n=4096
|
||||
|
||||
# create an XFS file system
|
||||
-dd if=/dev/zero of=$fs bs=1MB count=2 seek=20 || fail=1
|
||||
+dd if=/dev/zero of=$fs bs=1MB count=2 seek=100 || fail=1
|
||||
mkfs.xfs -f -q $fs || fail=1
|
||||
mkdir "$mp" || fail=1
|
||||
|
||||
diff --git a/tests/t4100-msdos-partition-limits.sh b/tests/t4100-msdos-partition-limits.sh
|
||||
index ec1854f..f03a85e 100755
|
||||
--- a/tests/t4100-msdos-partition-limits.sh
|
||||
+++ b/tests/t4100-msdos-partition-limits.sh
|
||||
@@ -37,7 +37,7 @@ mp=`pwd`/mount-point
|
||||
n=4096
|
||||
|
||||
# create an XFS file system
|
||||
-dd if=/dev/zero of=$fs bs=1MB count=2 seek=20 || fail=1
|
||||
+dd if=/dev/zero of=$fs bs=1MB count=2 seek=100 || fail=1
|
||||
mkfs.xfs -f -q $fs || fail=1
|
||||
mkdir "$mp" || fail=1
|
||||
|
||||
--
|
||||
1.8.4.2
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 2b55a78efa8e11202c8c5b266bc6e80386487f4d Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 22 Jan 2014 17:17:25 -0800
|
||||
Subject: [PATCH] tests: Disable t4100-dvh test for now (#1036093)
|
||||
|
||||
This test is failing on ppc64, possibly because of a bug in the dvh
|
||||
code.
|
||||
|
||||
* tests/Makefile.am: Move t4100-dvh- test to XFAIL
|
||||
---
|
||||
tests/Makefile.am | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 98310f2..faa0f37 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -1,5 +1,6 @@
|
||||
XFAIL_TESTS = \
|
||||
- t3200-type-change.sh
|
||||
+ t3200-type-change.sh \
|
||||
+ t4100-dvh-partition-limits.sh
|
||||
|
||||
TEST_EXTENSIONS = .sh
|
||||
SH_LOG_COMPILER = $(SHELL)
|
||||
@@ -48,7 +49,6 @@ TESTS = \
|
||||
t4000-sun-raid-type.sh \
|
||||
t4001-sun-vtoc.sh \
|
||||
t4100-msdos-partition-limits.sh \
|
||||
- t4100-dvh-partition-limits.sh \
|
||||
t4100-msdos-starting-sector.sh \
|
||||
t4200-partprobe.sh \
|
||||
t4300-nilfs2-tiny.sh \
|
||||
--
|
||||
1.8.4.2
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
From 911bc52b2609ccb2cc3b123ce383b07c66d54048 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Mon, 4 Nov 2013 13:10:09 -0500
|
||||
Subject: [PATCH] libparted: make sure not to treat percentages as exact
|
||||
(#1045957)
|
||||
|
||||
If 1% of the drive size worked out ot be an even power of
|
||||
two, it would trigger the exact placement. Add an exception
|
||||
for the percent units.
|
||||
---
|
||||
NEWS | 9 +++++++++
|
||||
libparted/unit.c | 2 +-
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index e2d01ed..80a62d6 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,5 +1,13 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes in release 3.1-16 (2014-01-22) [RHEL7]
|
||||
+
|
||||
+** Bug Fixes
|
||||
+
|
||||
+ If a drive was 100 times an even multiple of two, sizes specified as
|
||||
+ a percentage would trigger the exact placement rule and refuse to round
|
||||
+ to the nearest half percent.
|
||||
+
|
||||
* Noteworthy changes in release 3.1-4 (2012-06-08) [Fedora]
|
||||
|
||||
** Bug Fixes
|
||||
@@ -8,6 +16,7 @@ GNU parted NEWS -*- outline -*-
|
||||
libparted: Treat disks without a PMBR as msdos labeled disks
|
||||
even if they have GPT partition tables.
|
||||
|
||||
+
|
||||
* Noteworthy changes in release 3.1 (2012-03-02) [stable]
|
||||
|
||||
** New features
|
||||
diff --git a/libparted/unit.c b/libparted/unit.c
|
||||
index 66f2b6c..265cc68 100644
|
||||
--- a/libparted/unit.c
|
||||
+++ b/libparted/unit.c
|
||||
@@ -548,7 +548,7 @@ ped_unit_parse_custom (const char* str, const PedDevice* dev, PedUnit unit,
|
||||
do not use 4MiB as the range. Rather, presume that they
|
||||
are specifying precisely the starting or ending number,
|
||||
and treat "4MiB" just as we would treat "4194304B". */
|
||||
- if (is_power_of_2 (unit_size))
|
||||
+ if (is_power_of_2 (unit_size) && unit != PED_UNIT_PERCENT)
|
||||
radius = 0;
|
||||
|
||||
*sector = num * unit_size / dev->sector_size;
|
||||
--
|
||||
1.8.4.2
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
From e6e0f1db4535179f25ebf8f6f0a59eb430d377ff Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Thu, 23 Jan 2014 10:09:36 -0800
|
||||
Subject: [PATCH] tests: Use mkfs.xfs to create files (#1036152)
|
||||
|
||||
On s390 there is a bug with mkfs.xfs and pre-existing files. Work around
|
||||
it by creating the file directly with mkfs.xfs. This also works on other
|
||||
arches.
|
||||
|
||||
* tests/t1700-probe-fs.sh: Check for xfs and use direct file creation
|
||||
* tests/t4100-dvh-partition-limits.sh: Use mkfs.xfs -dfile
|
||||
* tests/t4100-msdos-partition-limits.sh: Use mkfs.xfs -dfile
|
||||
---
|
||||
tests/t1700-probe-fs.sh | 9 +++++++--
|
||||
tests/t4100-dvh-partition-limits.sh | 3 +--
|
||||
tests/t4100-msdos-partition-limits.sh | 3 +--
|
||||
3 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
|
||||
index 36e7cdf..575ca24 100755
|
||||
--- a/tests/t1700-probe-fs.sh
|
||||
+++ b/tests/t1700-probe-fs.sh
|
||||
@@ -31,8 +31,13 @@ for type in ext2 ext3 ext4 btrfs xfs nilfs2; do
|
||||
*) n_sectors=$((257*1024)) force=;; esac
|
||||
|
||||
# create an $type file system
|
||||
- dd if=/dev/zero of=$dev bs=$ss count=$n_sectors >/dev/null || fail=1
|
||||
- mkfs.$type $force $dev || { warn_ $ME: mkfs.$type failed; fail=1; continue; }
|
||||
+ if [ "$type" == "xfs" ]; then
|
||||
+ # Work around a problem with s390
|
||||
+ mkfs.xfs -ssize=$ss -dfile,name=$dev,size=${n_sectors}s || fail=1
|
||||
+ else
|
||||
+ dd if=/dev/zero of=$dev bs=$ss count=$n_sectors >/dev/null || fail=1
|
||||
+ mkfs.$type $force $dev || { warn_ $ME: mkfs.$type failed; fail=1; continue; }
|
||||
+ fi
|
||||
|
||||
# probe the $type file system
|
||||
parted -m -s $dev u s print >out 2>&1 || fail=1
|
||||
diff --git a/tests/t4100-dvh-partition-limits.sh b/tests/t4100-dvh-partition-limits.sh
|
||||
index ec6981d..88e452d 100755
|
||||
--- a/tests/t4100-dvh-partition-limits.sh
|
||||
+++ b/tests/t4100-dvh-partition-limits.sh
|
||||
@@ -37,8 +37,7 @@ mp=`pwd`/mount-point
|
||||
n=4096
|
||||
|
||||
# create an XFS file system
|
||||
-dd if=/dev/zero of=$fs bs=1MB count=2 seek=100 || fail=1
|
||||
-mkfs.xfs -f -q $fs || fail=1
|
||||
+mkfs.xfs -dfile,name=$fs,size=100m || fail=1
|
||||
mkdir "$mp" || fail=1
|
||||
|
||||
# Unmount upon interrupt, failure, etc., as well as upon normal completion.
|
||||
diff --git a/tests/t4100-msdos-partition-limits.sh b/tests/t4100-msdos-partition-limits.sh
|
||||
index f03a85e..9350441 100755
|
||||
--- a/tests/t4100-msdos-partition-limits.sh
|
||||
+++ b/tests/t4100-msdos-partition-limits.sh
|
||||
@@ -37,8 +37,7 @@ mp=`pwd`/mount-point
|
||||
n=4096
|
||||
|
||||
# create an XFS file system
|
||||
-dd if=/dev/zero of=$fs bs=1MB count=2 seek=100 || fail=1
|
||||
-mkfs.xfs -f -q $fs || fail=1
|
||||
+mkfs.xfs -dfile,name=$fs,size=100m || fail=1
|
||||
mkdir "$mp" || fail=1
|
||||
|
||||
# Unmount upon interrupt, failure, etc., as well as upon normal completion.
|
||||
--
|
||||
1.8.4.2
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 9dfa4ab406c45abc2f7a7e5e64ce01b4ca9977ed Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 1 Aug 2014 14:48:13 -0700
|
||||
Subject: [PATCH] Update manpage NAME so whatis will work (#948424)
|
||||
|
||||
Resolves: rhbz#948424
|
||||
---
|
||||
doc/C/parted.8 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/doc/C/parted.8 b/doc/C/parted.8
|
||||
index 689011c..5304375 100644
|
||||
--- a/doc/C/parted.8
|
||||
+++ b/doc/C/parted.8
|
||||
@@ -1,6 +1,6 @@
|
||||
.TH PARTED 8 "2007 March 29" parted "GNU Parted Manual"
|
||||
.SH NAME
|
||||
-GNU Parted \- a partition manipulation program
|
||||
+parted \- a partition manipulation program
|
||||
.SH SYNOPSIS
|
||||
.B parted
|
||||
[options] [device [command [options...]...]]
|
||||
--
|
||||
1.9.3
|
||||
|
|
@ -0,0 +1,209 @@
|
|||
From cfb23fa541ada431b8225760371bb4d5029893b1 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Battaiola Kreling <dbkreling@br.ibm.com>
|
||||
Date: Mon, 7 Oct 2013 11:51:50 +0530
|
||||
Subject: [PATCH] GPT: add support for PReP GUID (#1108196)
|
||||
|
||||
PReP (PowerPC Reference Platform) boot partition is the first partition used in
|
||||
PowerPC platform for containing the bootable kernel or bootloader. The firmware
|
||||
searches for this partition and jumps to it for booting. So far no GUID was
|
||||
specified for this partition type and hence booting from GPT disk was not
|
||||
supported on this platform. A new GUID 9e1a2d38-c612-4316-aa26-8b49521e5a8b for
|
||||
PReP partition is proposed to be included in GPT.
|
||||
|
||||
Resolves: rhbz#1108196
|
||||
|
||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||
---
|
||||
NEWS | 7 +++++++
|
||||
doc/parted.texi | 2 +-
|
||||
libparted/labels/gpt.c | 37 +++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 45 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 80a62d6..4d30b1b 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,5 +1,12 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes in release 3.1-18 (2014-08-12) [RHEL7.1]
|
||||
+
|
||||
+** New features
|
||||
+
|
||||
+ Add support for prep flag to GPT to select PowerPC Reference Platform
|
||||
+ boot partition type.
|
||||
+
|
||||
* Noteworthy changes in release 3.1-16 (2014-01-22) [RHEL7]
|
||||
|
||||
** Bug Fixes
|
||||
diff --git a/doc/parted.texi b/doc/parted.texi
|
||||
index 2b1ce64..f10d5e1 100644
|
||||
--- a/doc/parted.texi
|
||||
+++ b/doc/parted.texi
|
||||
@@ -823,7 +823,7 @@ physical volume.
|
||||
by the Linux/PA-RISC boot loader, palo.
|
||||
|
||||
@item PREP
|
||||
-(MS-DOS) - this flag can be enabled so that the partition can be used
|
||||
+(MS-DOS, GPT) - this flag can be enabled so that the partition can be used
|
||||
as a PReP boot partition on PowerPC PReP or IBM RS6K/CHRP hardware.
|
||||
|
||||
@item DIAG
|
||||
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
||||
index 6ca33c8..f9332bd 100644
|
||||
--- a/libparted/labels/gpt.c
|
||||
+++ b/libparted/labels/gpt.c
|
||||
@@ -142,6 +142,10 @@ typedef struct
|
||||
((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
|
||||
PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
|
||||
{ 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }})
|
||||
+#define PARTITION_PREP_GUID \
|
||||
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \
|
||||
+ PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \
|
||||
+ { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }})
|
||||
|
||||
struct __attribute__ ((packed)) _GuidPartitionTableHeader_t
|
||||
{
|
||||
@@ -283,6 +287,7 @@ typedef struct _GPTPartitionData
|
||||
int atvrecv;
|
||||
int msftrecv;
|
||||
int legacy_boot;
|
||||
+ int prep;
|
||||
} GPTPartitionData;
|
||||
|
||||
static PedDiskType gpt_disk_type;
|
||||
@@ -782,6 +787,7 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte)
|
||||
= gpt_part_data->hidden = gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
= gpt_part_data->legacy_boot
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0;
|
||||
|
||||
if (pte->Attributes.RequiredToFunction & 0x1)
|
||||
@@ -805,6 +811,8 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte)
|
||||
gpt_part_data->msftrecv = 1;
|
||||
else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID))
|
||||
gpt_part_data->atvrecv = 1;
|
||||
+ else if (!guid_cmp (gpt_part_data->type, PARTITION_PREP_GUID))
|
||||
+ gpt_part_data->prep = 1;
|
||||
|
||||
return part;
|
||||
}
|
||||
@@ -1321,6 +1329,7 @@ gpt_partition_new (const PedDisk *disk,
|
||||
gpt_part_data->msftrecv = 0;
|
||||
gpt_part_data->atvrecv = 0;
|
||||
gpt_part_data->legacy_boot = 0;
|
||||
+ gpt_part_data->prep = 0;
|
||||
uuid_generate ((unsigned char *) &gpt_part_data->uuid);
|
||||
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid));
|
||||
memset (gpt_part_data->name, 0, sizeof gpt_part_data->name);
|
||||
@@ -1394,6 +1403,11 @@ gpt_partition_set_system (PedPartition *part,
|
||||
gpt_part_data->type = PARTITION_RAID_GUID;
|
||||
return 1;
|
||||
}
|
||||
+ if (gpt_part_data->prep)
|
||||
+ {
|
||||
+ gpt_part_data->type = PARTITION_PREP_GUID;
|
||||
+ return 1;
|
||||
+ }
|
||||
if (gpt_part_data->boot)
|
||||
{
|
||||
gpt_part_data->type = PARTITION_SYSTEM_GUID;
|
||||
@@ -1564,6 +1578,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_BIOS_GRUB:
|
||||
@@ -1575,6 +1590,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_RAID:
|
||||
@@ -1586,6 +1602,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_LVM:
|
||||
@@ -1597,6 +1614,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_HPSERVICE:
|
||||
@@ -1608,6 +1626,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_MSFT_RESERVED:
|
||||
@@ -1619,6 +1638,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_DIAG:
|
||||
@@ -1630,6 +1650,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_APPLE_TV_RECOVERY:
|
||||
@@ -1641,8 +1662,21 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->msftrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
+ case PED_PARTITION_PREP:
|
||||
+ gpt_part_data->prep = state;
|
||||
+ if (state)
|
||||
+ gpt_part_data->boot
|
||||
+ = gpt_part_data->raid
|
||||
+ = gpt_part_data->lvm
|
||||
+ = gpt_part_data->bios_grub
|
||||
+ = gpt_part_data->hp_service
|
||||
+ = gpt_part_data->msftres
|
||||
+ = gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->atvrecv = 0;
|
||||
+ return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_HIDDEN:
|
||||
gpt_part_data->hidden = state;
|
||||
return 1;
|
||||
@@ -1687,6 +1721,8 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag)
|
||||
return gpt_part_data->hidden;
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
return gpt_part_data->legacy_boot;
|
||||
+ case PED_PARTITION_PREP:
|
||||
+ return gpt_part_data->prep;
|
||||
case PED_PARTITION_SWAP:
|
||||
case PED_PARTITION_LBA:
|
||||
case PED_PARTITION_ROOT:
|
||||
@@ -1712,6 +1748,7 @@ gpt_partition_is_flag_available (const PedPartition *part,
|
||||
case PED_PARTITION_APPLE_TV_RECOVERY:
|
||||
case PED_PARTITION_HIDDEN:
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
+ case PED_PARTITION_PREP:
|
||||
return 1;
|
||||
case PED_PARTITION_SWAP:
|
||||
case PED_PARTITION_ROOT:
|
||||
--
|
||||
1.9.3
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From 22f857bb8f57438ec6f34876e1933df01b448044 Mon Sep 17 00:00:00 2001
|
||||
From: Fedora Ninjas <parted-owner@fedoraproject.org>
|
||||
Date: Wed, 24 Sep 2014 15:59:47 -0700
|
||||
Subject: [PATCH] libparted: reread part table with 0 partitions (#1138465)
|
||||
|
||||
After removing the last partition it still needs to be able to rescan
|
||||
the partition table, otherwise device-mapper (and in this case mpath) is
|
||||
never told that the last partition was removed.
|
||||
|
||||
Resolves: rhbz#1138465
|
||||
---
|
||||
libparted/arch/linux.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 4af0d5c..4daa881 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2878,9 +2878,6 @@ static int
|
||||
_dm_reread_part_table (PedDisk* disk)
|
||||
{
|
||||
int largest_partnum = ped_disk_get_last_partition_num (disk);
|
||||
- if (largest_partnum <= 0)
|
||||
- return 1;
|
||||
-
|
||||
int rc = 1;
|
||||
int i;
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From c4bf408e794c3e2df85539e7d561da51a8ae2cad Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 7 Nov 2014 11:15:55 -0800
|
||||
Subject: [PATCH] tests: Change minimum size to 256MiB
|
||||
|
||||
btrfs on ppc64 wants 136MiB so expand the minimum temp filesystem size
|
||||
for the t1700-probe-fs test.
|
||||
---
|
||||
tests/t1700-probe-fs.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
|
||||
index 575ca24..83e6be4 100755
|
||||
--- a/tests/t1700-probe-fs.sh
|
||||
+++ b/tests/t1700-probe-fs.sh
|
||||
@@ -28,7 +28,7 @@ for type in ext2 ext3 ext4 btrfs xfs nilfs2; do
|
||||
|| { warn_ "$ME: no $type support"; continue; }
|
||||
|
||||
case $type in ext*) n_sectors=8000 force=-F;;
|
||||
- *) n_sectors=$((257*1024)) force=;; esac
|
||||
+ *) n_sectors=$((512*1024)) force=;; esac
|
||||
|
||||
# create an $type file system
|
||||
if [ "$type" == "xfs" ]; then
|
||||
--
|
||||
1.9.3
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
From 535f60c9ef91cc662d5ccaecb2f7048a3c2241d9 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Thu, 12 Jan 2012 14:53:56 -0500
|
||||
Subject: [PATCH] libparted: handle logical partitions starting immediately
|
||||
after the EBR
|
||||
|
||||
_blkpg_add_partition() set the length of the extended partition
|
||||
to 2 sectors to allow LILO to be installed there, beacuse the
|
||||
linux kernel does this. If a logical partition used that second
|
||||
sector, adding it would fail beacuse of the overlap. Now
|
||||
_blkpg_add_partition() will limit the length to only the first
|
||||
sector if the second is used by a logical partition.
|
||||
|
||||
Previously parted did create the partition table, and after a
|
||||
reboot, the kernel would recognize the table, and happily create
|
||||
the extended partition as 2 sectors long, thus overlapping the
|
||||
logical partition, but when parted tried to recreate the same
|
||||
table with BLKPG, the kernel rightly rejected it.
|
||||
|
||||
(cherry picked from commit f503870153eda7659b09e52e4adeda3bebf06471)
|
||||
---
|
||||
NEWS | 8 ++++++++
|
||||
libparted/arch/linux.c | 17 +++++++++++++++--
|
||||
tests/t2310-dos-extended-2-sector-min-offset.sh | 16 ++++------------
|
||||
3 files changed, 27 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 4d30b1b..d1ab2a6 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -11,6 +11,14 @@ GNU parted NEWS -*- outline -*-
|
||||
|
||||
** Bug Fixes
|
||||
|
||||
+ libparted: handle logical partitions starting immediately after
|
||||
+ the EBR. Creating a logical partition one sector after the EBR
|
||||
+ used to cause parted to complain that it could not inform the
|
||||
+ kernel of the changes, but after a reboot, everything was fine.
|
||||
+ Parted will now correctly inform the kernel of the changes, but
|
||||
+ only set the length of the extended partition to 1 sector instead
|
||||
+ of two, which would cause it to overlap the logical partition.
|
||||
+
|
||||
If a drive was 100 times an even multiple of two, sizes specified as
|
||||
a percentage would trigger the exact placement rule and refuse to round
|
||||
to the nearest half percent.
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 4daa881..788cdc3 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2371,8 +2371,21 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
|
||||
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)
|
||||
- linux_part.length = part->geom.length == 1 ? 512 : 1024;
|
||||
+ if (part->type & PED_PARTITION_EXTENDED) {
|
||||
+ linux_part.length = 1;
|
||||
+ if (disk->dev->sector_size == 512) {
|
||||
+ if (linux_part.length == 1)
|
||||
+ 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;
|
||||
+ }
|
||||
+ }
|
||||
+ linux_part.length *= disk->dev->sector_size;
|
||||
+ }
|
||||
else
|
||||
linux_part.length = part->geom.length * disk->dev->sector_size;
|
||||
linux_part.pno = part->num;
|
||||
diff --git a/tests/t2310-dos-extended-2-sector-min-offset.sh b/tests/t2310-dos-extended-2-sector-min-offset.sh
|
||||
index 89453ae..bd7defb 100644
|
||||
--- a/tests/t2310-dos-extended-2-sector-min-offset.sh
|
||||
+++ b/tests/t2310-dos-extended-2-sector-min-offset.sh
|
||||
@@ -1,8 +1,6 @@
|
||||
#!/bin/sh
|
||||
-# Ensure that parted leaves at least 2 sectors between the beginning
|
||||
+# Ensure that parted allows a single sector between the beginning
|
||||
# of an extended partition and the first logical partition.
|
||||
-# Before parted-2.3, it could be made to leave just one, and that
|
||||
-# would cause trouble with the Linux kernel.
|
||||
|
||||
# Copyright (C) 2010-2012 Free Software Foundation, Inc.
|
||||
|
||||
@@ -35,7 +33,7 @@ cat <<EOF > exp || framework_failure
|
||||
BYT;
|
||||
$scsi_dev:2048s:scsi:512:512:msdos:Linux scsi_debug:;
|
||||
1:64s:128s:65s:::lba;
|
||||
-5:66s:128s:63s:::;
|
||||
+5:65s:128s:64s:::;
|
||||
EOF
|
||||
|
||||
cat <<EOF > err.exp || framework_failure
|
||||
@@ -49,15 +47,9 @@ parted --align=min -s $scsi_dev mkpart extended 64s 128s> out 2>&1 || fail=1
|
||||
parted -m -s $scsi_dev u s print
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
-# Provoke a failure by trying to create a partition that starts just
|
||||
+# Trying to create a partition that starts just
|
||||
# one sector after the start of the extended partition.
|
||||
-parted --align=min -s $scsi_dev mkpart logical 65s 128s > err 2>&1 && fail=1
|
||||
-compare err.exp err || fail=1
|
||||
-
|
||||
-# The above failed, but created the partition nonetheless. Remove it.
|
||||
-parted -s $scsi_dev rm 5 || fail=1
|
||||
-
|
||||
-parted --align=min -s $scsi_dev mkpart logical 66s 128s > out 2>&1 || fail=1
|
||||
+parted --align=min -s $scsi_dev mkpart logical 65s 128s > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
parted -m -s $scsi_dev u s print > out 2>&1
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
From 1c5b0b263f08faa0649bf673a685d93ed9319bef Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 4 Feb 2015 16:31:00 -0800
|
||||
Subject: [PATCH 31/32] tests: Add a test for device-mapper partition sizes
|
||||
(#1188431)
|
||||
|
||||
device-mapper uses 512b sector units, not device specific sector sizes.
|
||||
This test ensures that the correct partition size is created, no matter
|
||||
what the device's sector size is.
|
||||
|
||||
Related: rhbz#1188431
|
||||
---
|
||||
tests/Makefile.am | 1 +
|
||||
tests/t6004-dm-512b-sectors.sh | 68 ++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 69 insertions(+)
|
||||
create mode 100644 tests/t6004-dm-512b-sectors.sh
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index faa0f37..1cf859c 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -57,6 +57,7 @@ TESTS = \
|
||||
t6001-psep.sh \
|
||||
t6002-dm-many-partitions.sh \
|
||||
t6003-dm-uuid.sh \
|
||||
+ t6004-dm-512b-sectors.sh \
|
||||
t6100-mdraid-partitions.sh \
|
||||
t7000-scripting.sh \
|
||||
t8000-loop.sh \
|
||||
diff --git a/tests/t6004-dm-512b-sectors.sh b/tests/t6004-dm-512b-sectors.sh
|
||||
new file mode 100644
|
||||
index 0000000..31abba9
|
||||
--- /dev/null
|
||||
+++ b/tests/t6004-dm-512b-sectors.sh
|
||||
@@ -0,0 +1,68 @@
|
||||
+#!/bin/sh
|
||||
+# device-mapper sector sizes are 512b, make sure partitions are the correct
|
||||
+# size when using larger sector sizes and a linear dm table.
|
||||
+
|
||||
+# Copyright (C) 2015 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_
|
||||
+
|
||||
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
|
||||
+ skip_ 'this system lacks a new-enough libblkid'
|
||||
+
|
||||
+(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
+
|
||||
+# Device maps names - should be random to not conflict with existing ones on
|
||||
+# the system
|
||||
+linear_=plinear-$$test
|
||||
+
|
||||
+cleanup_fn_() {
|
||||
+ i=0
|
||||
+ udevadm settle
|
||||
+ while [ $i -lt 10 ] ; do
|
||||
+ [ -e "/dev/mapper/${linear_}1" ] && dmsetup remove ${linear_}1
|
||||
+ sleep .2
|
||||
+ [ -e "/dev/mapper/$linear_" ] && dmsetup remove $linear_
|
||||
+ sleep .2
|
||||
+ [ -e "/dev/mapper/${linear_}1" -o -e "/dev/mapper/$linear_" ] || i=10
|
||||
+ i=$((i + 1))
|
||||
+ done
|
||||
+ udevadm settle
|
||||
+}
|
||||
+
|
||||
+# Create a 500M device
|
||||
+ss=$sector_size_
|
||||
+scsi_debug_setup_ sector_size=$ss dev_size_mb=500 > dev-name ||
|
||||
+ skip_ 'failed to create scsi_debug device'
|
||||
+scsi_dev=$(cat dev-name)
|
||||
+
|
||||
+# Size of device, in 512b units
|
||||
+scsi_dev_size=$(blockdev --getsz $scsi_dev) || framework_failure
|
||||
+
|
||||
+dmsetup create $linear_ --table "0 $scsi_dev_size linear $scsi_dev 0" || framework_failure
|
||||
+dev="/dev/mapper/$linear_"
|
||||
+
|
||||
+# Create msdos partition table with a partition from 1MiB to 100MiB
|
||||
+parted -s $dev mklabel msdos mkpart primary ext2 1MiB 101MiB > out 2>&1 || fail=1
|
||||
+compare /dev/null out || fail=1
|
||||
+
|
||||
+# The size of the partition should be 100MiB, or 204800 512b sectors
|
||||
+p1_size=$(blockdev --getsz ${dev}1) || framework_failure
|
||||
+[ $p1_size == 204800 ] || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From 07f2604aeeb20d187e7243007fc5ab1a0560a4b7 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 4 Feb 2015 16:46:07 -0800
|
||||
Subject: [PATCH 32/32] libparted: device mapper uses 512b sectors (#1188431)
|
||||
|
||||
device mapper doesn't use the device's sector size when creating a
|
||||
table. It always uses 512b units. This causes partitions to be created
|
||||
8x smaller than expected on devices with 4906b sectors.
|
||||
|
||||
Resolves: rhbz#1188431
|
||||
---
|
||||
libparted/arch/linux.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 788cdc3..1d11f58 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2849,8 +2849,10 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
dm_task_destroy (task);
|
||||
task = NULL;
|
||||
|
||||
+ /* device-mapper uses 512b units, not the device's sector size */
|
||||
if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major,
|
||||
- arch_specific->minor, part->geom.start)))
|
||||
+ arch_specific->minor,
|
||||
+ part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT))))
|
||||
goto err;
|
||||
|
||||
task = dm_task_create (DM_DEVICE_CREATE);
|
||||
@@ -2860,7 +2862,8 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
dm_task_set_name (task, vol_name);
|
||||
if (vol_uuid)
|
||||
dm_task_set_uuid (task, vol_uuid);
|
||||
- dm_task_add_target (task, 0, part->geom.length,
|
||||
+ /* device-mapper uses 512b units, not the device's sector size */
|
||||
+ dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT),
|
||||
"linear", params);
|
||||
if (!dm_task_set_cookie(task, &cookie, 0))
|
||||
goto err;
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
From 468d537b07c3c1ad72e1ee1e9651a17c72038837 Mon Sep 17 00:00:00 2001
|
||||
From: Fedora Ninjas <parted-owner@fedoraproject.org>
|
||||
Date: Thu, 6 Aug 2015 07:17:14 -0700
|
||||
Subject: [PATCH 33/35] libparted: Use read only when probing devices on linux
|
||||
(#1245144)
|
||||
|
||||
When a device is opened for RW closing it can trigger other actions,
|
||||
like udev scanning it for partition changes. Use read only for the
|
||||
init_* methods and RW for actual changes to the device.
|
||||
|
||||
This adds _device_open which takes mode flags as an argument and turns
|
||||
linux_open into a wrapper for it with RW_MODE.
|
||||
|
||||
_device_open_ro is added to open the device with RD_MODE and increment
|
||||
the open_counter. This is used in the init_* functions.
|
||||
|
||||
_device_close is a wrapper around linux_close that decrements the
|
||||
open_counter and is used in the init_* functions.
|
||||
|
||||
All of these changes are self-contained with no external API changes.
|
||||
The only visible change in behavior is that when a new PedDevice is
|
||||
created the device is opened in RO_MODE instead of RW_MODE.
|
||||
|
||||
Resolves: rhbz#1245144
|
||||
---
|
||||
libparted/arch/linux.c | 61 ++++++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 44 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 1d11f58..341bbbb 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -287,6 +287,9 @@ struct blkdev_ioctl_param {
|
||||
|
||||
static char* _device_get_part_path (PedDevice* dev, int num);
|
||||
static int _partition_is_mounted_by_path (const char* path);
|
||||
+static int _device_open (PedDevice* dev, int flags);
|
||||
+static int _device_open_ro (PedDevice* dev);
|
||||
+static int _device_close (PedDevice* dev);
|
||||
|
||||
static int
|
||||
_read_fd (int fd, char **buf)
|
||||
@@ -830,7 +833,7 @@ init_ide (PedDevice* dev)
|
||||
if (!_device_stat (dev, &dev_stat))
|
||||
goto error;
|
||||
|
||||
- if (!ped_device_open (dev))
|
||||
+ if (!_device_open_ro (dev))
|
||||
goto error;
|
||||
|
||||
if (ioctl (arch_specific->fd, HDIO_GET_IDENTITY, &hdi)) {
|
||||
@@ -899,11 +902,11 @@ init_ide (PedDevice* dev)
|
||||
if (!_device_probe_geometry (dev))
|
||||
goto error_close_dev;
|
||||
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
return 1;
|
||||
|
||||
error_close_dev:
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
error:
|
||||
return 0;
|
||||
}
|
||||
@@ -1036,7 +1039,7 @@ init_scsi (PedDevice* dev)
|
||||
char* vendor;
|
||||
char* product;
|
||||
|
||||
- if (!ped_device_open (dev))
|
||||
+ if (!_device_open_ro (dev))
|
||||
goto error;
|
||||
|
||||
if (ioctl (arch_specific->fd, SCSI_IOCTL_GET_IDLUN, &idlun) < 0) {
|
||||
@@ -1050,7 +1053,7 @@ init_scsi (PedDevice* dev)
|
||||
goto error_close_dev;
|
||||
if (!_device_probe_geometry (dev))
|
||||
goto error_close_dev;
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1072,11 +1075,11 @@ init_scsi (PedDevice* dev)
|
||||
if (!_device_probe_geometry (dev))
|
||||
goto error_close_dev;
|
||||
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
return 1;
|
||||
|
||||
error_close_dev:
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
error:
|
||||
return 0;
|
||||
}
|
||||
@@ -1088,7 +1091,7 @@ init_file (PedDevice* dev)
|
||||
|
||||
if (!_device_stat (dev, &dev_stat))
|
||||
goto error;
|
||||
- if (!ped_device_open (dev))
|
||||
+ if (!_device_open_ro (dev))
|
||||
goto error;
|
||||
|
||||
dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
|
||||
@@ -1115,7 +1118,7 @@ init_file (PedDevice* dev)
|
||||
goto error_close_dev;
|
||||
}
|
||||
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
|
||||
dev->bios_geom.cylinders = dev->length / 4 / 32;
|
||||
dev->bios_geom.heads = 4;
|
||||
@@ -1126,7 +1129,7 @@ init_file (PedDevice* dev)
|
||||
return 1;
|
||||
|
||||
error_close_dev:
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
error:
|
||||
return 0;
|
||||
}
|
||||
@@ -1142,7 +1145,7 @@ init_dasd (PedDevice* dev, const char* model_name)
|
||||
if (!_device_stat (dev, &dev_stat))
|
||||
goto error;
|
||||
|
||||
- if (!ped_device_open (dev))
|
||||
+ if (!_device_open_ro (dev))
|
||||
goto error;
|
||||
|
||||
LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
|
||||
@@ -1182,11 +1185,11 @@ init_dasd (PedDevice* dev, const char* model_name)
|
||||
|
||||
dev->model = strdup (model_name);
|
||||
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
return 1;
|
||||
|
||||
error_close_dev:
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
error:
|
||||
return 0;
|
||||
}
|
||||
@@ -1201,7 +1204,7 @@ init_generic (PedDevice* dev, const char* model_name)
|
||||
if (!_device_stat (dev, &dev_stat))
|
||||
goto error;
|
||||
|
||||
- if (!ped_device_open (dev))
|
||||
+ if (!_device_open_ro (dev))
|
||||
goto error;
|
||||
|
||||
ped_exception_fetch_all ();
|
||||
@@ -1249,11 +1252,11 @@ init_generic (PedDevice* dev, const char* model_name)
|
||||
|
||||
dev->model = strdup (model_name);
|
||||
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
return 1;
|
||||
|
||||
error_close_dev:
|
||||
- ped_device_close (dev);
|
||||
+ _device_close (dev);
|
||||
error:
|
||||
return 0;
|
||||
}
|
||||
@@ -1543,12 +1546,27 @@ retry:
|
||||
}
|
||||
|
||||
static int
|
||||
+_device_open_ro (PedDevice* dev)
|
||||
+{
|
||||
+ int rc = _device_open (dev, RD_MODE);
|
||||
+ if (rc)
|
||||
+ dev->open_count++;
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
linux_open (PedDevice* dev)
|
||||
{
|
||||
+ return _device_open (dev, RW_MODE);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+_device_open (PedDevice* dev, int flags)
|
||||
+{
|
||||
LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
|
||||
|
||||
retry:
|
||||
- arch_specific->fd = open (dev->path, RW_MODE);
|
||||
+ arch_specific->fd = open (dev->path, flags);
|
||||
|
||||
if (arch_specific->fd == -1) {
|
||||
char* rw_error_msg = strerror (errno);
|
||||
@@ -1617,6 +1635,15 @@ linux_refresh_close (PedDevice* dev)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static int
|
||||
+_device_close (PedDevice* dev)
|
||||
+{
|
||||
+ int rc = linux_close (dev);
|
||||
+ if (dev->open_count > 0)
|
||||
+ dev->open_count--;
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
#if SIZEOF_OFF_T < 8
|
||||
|
||||
static _syscall5(int,_llseek,
|
||||
--
|
||||
2.4.3
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
From 4182428d60496b7fe61f0599156f871e3cd63f89 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 7 Aug 2015 11:43:17 -0700
|
||||
Subject: [PATCH 34/35] tests: Use wait_for_dev_to_ functions
|
||||
|
||||
Recent changes to udev have made some long-standing problems appear more
|
||||
frequently. udev executes various actions when changes are made to
|
||||
devices. Sometimes this can result in device nodes not appearing
|
||||
immediately. Other times it can result in EBUSY being returned. This
|
||||
patch only addresses devices that are slow to appear/disappear.
|
||||
|
||||
It is best to use the wait_for_dev_to_appear_ and
|
||||
wait_for_dev_to_disappear_ functions than to test for existance. These
|
||||
will loop and wait for up to 2 seconds for it to appear.
|
||||
|
||||
This also changes t9041 to fail if mkfs doesn't work since using skip
|
||||
here may hide cases when the device node doesn't appear.
|
||||
|
||||
Related: rhbz#1245144
|
||||
---
|
||||
tests/t1100-busy-label.sh | 10 ++--------
|
||||
tests/t6001-psep.sh | 4 ++--
|
||||
tests/t6002-dm-many-partitions.sh | 6 ++----
|
||||
tests/t6004-dm-512b-sectors.sh | 1 +
|
||||
tests/t6100-mdraid-partitions.sh | 5 +++--
|
||||
tests/t9041-undetected-in-use-16th-partition.sh | 2 +-
|
||||
6 files changed, 11 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh
|
||||
index 9e371da..93229a7 100755
|
||||
--- a/tests/t1100-busy-label.sh
|
||||
+++ b/tests/t1100-busy-label.sh
|
||||
@@ -27,22 +27,16 @@ dev=$(cat dev-name)
|
||||
|
||||
parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
-mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed"
|
||||
+wait_for_dev_to_appear_ ${dev}1 || fail=1
|
||||
+mkfs.vfat ${dev}1 || fail=1
|
||||
|
||||
mount_point="`pwd`/mnt"
|
||||
|
||||
# Be sure to unmount upon interrupt, failure, etc.
|
||||
cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
|
||||
|
||||
-# There's a race condition here: on udev-based systems, the partition#1
|
||||
-# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and
|
||||
-# without some delay, this mount command would fail. Using a flash card
|
||||
-# as $dev, the loop below typically iterates 7-20 times.
|
||||
-
|
||||
# create mount point dir. and mount the just-created partition on it
|
||||
mkdir $mount_point || fail=1
|
||||
-i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break;
|
||||
- i=$(expr $i + 1); done;
|
||||
mount "${dev}1" $mount_point || fail=1
|
||||
|
||||
# now that a partition is mounted, mklabel attempt must fail
|
||||
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
|
||||
index 0c1ab99..b747732 100644
|
||||
--- a/tests/t6001-psep.sh
|
||||
+++ b/tests/t6001-psep.sh
|
||||
@@ -55,7 +55,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
#make sure device name is correct
|
||||
-test -e ${dev}p1 || fail=1
|
||||
+wait_for_dev_to_appear_ ${dev}p1 || fail=1
|
||||
|
||||
#repeat on name not ending in a digit
|
||||
# setup: create a mapping
|
||||
@@ -67,7 +67,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
#make sure device name is correct
|
||||
-test -e ${dev}1 || fail=1
|
||||
+wait_for_dev_to_appear_ ${dev}1 || fail=1
|
||||
|
||||
if [ -n "$fail" ]; then
|
||||
ls /dev/mapper
|
||||
diff --git a/tests/t6002-dm-many-partitions.sh b/tests/t6002-dm-many-partitions.sh
|
||||
index 4d08e72..247c9ee 100755
|
||||
--- a/tests/t6002-dm-many-partitions.sh
|
||||
+++ b/tests/t6002-dm-many-partitions.sh
|
||||
@@ -49,10 +49,8 @@ parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fa
|
||||
|
||||
# Make sure all the partitions appeared under /dev/mapper/
|
||||
for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
- if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then
|
||||
- fail=1
|
||||
- break
|
||||
- fi
|
||||
+ wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; }
|
||||
+
|
||||
# remove the partitions as we go, otherwise cleanup won't work.
|
||||
dmsetup remove /dev/mapper/${dm_name}p$i
|
||||
done
|
||||
diff --git a/tests/t6004-dm-512b-sectors.sh b/tests/t6004-dm-512b-sectors.sh
|
||||
index 31abba9..c3045af 100644
|
||||
--- a/tests/t6004-dm-512b-sectors.sh
|
||||
+++ b/tests/t6004-dm-512b-sectors.sh
|
||||
@@ -60,6 +60,7 @@ dev="/dev/mapper/$linear_"
|
||||
# Create msdos partition table with a partition from 1MiB to 100MiB
|
||||
parted -s $dev mklabel msdos mkpart primary ext2 1MiB 101MiB > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
+wait_for_dev_to_appear_ ${dev}1 || fail=1
|
||||
|
||||
# The size of the partition should be 100MiB, or 204800 512b sectors
|
||||
p1_size=$(blockdev --getsz ${dev}1) || framework_failure
|
||||
diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
|
||||
index aedf69b..d7e7d6a 100755
|
||||
--- a/tests/t6100-mdraid-partitions.sh
|
||||
+++ b/tests/t6100-mdraid-partitions.sh
|
||||
@@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
# Verify that kernel has been informed about the second device.
|
||||
-grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; }
|
||||
+wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; }
|
||||
|
||||
# Remove partitions from the raid device.
|
||||
parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
# Verify that kernel has been informed about those removals.
|
||||
-grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; }
|
||||
+wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; }
|
||||
+wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; }
|
||||
|
||||
Exit $fail
|
||||
diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
index 6ddc7d8..0b22b0e 100644
|
||||
--- a/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
|
||||
@@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear
|
||||
|
||||
partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16"
|
||||
for i in $partitions; do
|
||||
- mkfs.ext3 $i || skip_ mkfs.ext3 $i failed
|
||||
+ mkfs.ext3 $i || fail=1
|
||||
done
|
||||
|
||||
# be sure to unmount upon interrupt, failure, etc.
|
||||
--
|
||||
2.4.3
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
From 0d00bd73ba85c18082cbe47dd76e2adeba7e8620 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 1 Mar 2016 10:38:26 -0800
|
||||
Subject: [PATCH] tests: Add udevadm settle to wait_for_ loop (#1260664)
|
||||
|
||||
Sometimes the device will vanish after the wait_for_dev_to_appear exits.
|
||||
Add udevadm settle in an attempt to make sure the udev system is done
|
||||
flapping around and the device will stay in place.
|
||||
|
||||
Related: rhbz#1260664
|
||||
---
|
||||
tests/t-lib-helpers.sh | 2 ++
|
||||
tests/t-local.sh | 2 ++
|
||||
tests/t6001-psep.sh | 2 ++
|
||||
tests/t6002-dm-many-partitions.sh | 1 +
|
||||
tests/t6003-dm-uuid.sh | 2 ++
|
||||
tests/t6100-mdraid-partitions.sh | 1 +
|
||||
6 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/tests/t-lib-helpers.sh b/tests/t-lib-helpers.sh
|
||||
index 4b3c122..b65d675 100644
|
||||
--- a/tests/t-lib-helpers.sh
|
||||
+++ b/tests/t-lib-helpers.sh
|
||||
@@ -371,6 +371,7 @@ wait_for_dev_to_appear_()
|
||||
local i=0
|
||||
local incr=1
|
||||
while :; do
|
||||
+ udevadm settle
|
||||
ls "$file" > /dev/null 2>&1 && return 0
|
||||
sleep .1 2>/dev/null || { sleep 1; incr=10; }
|
||||
i=$(expr $i + $incr); test $i = 20 && break
|
||||
@@ -386,6 +387,7 @@ wait_for_dev_to_disappear_()
|
||||
local i=0
|
||||
local incr=1
|
||||
while :; do
|
||||
+ udevadm settle
|
||||
ls "$file" > /dev/null 2>&1 || return 0
|
||||
sleep .1 2>/dev/null || { sleep 1; incr=10; }
|
||||
i=$(expr $i + $incr); test $i -ge $(expr $n_sec \* 10) && break
|
||||
diff --git a/tests/t-local.sh b/tests/t-local.sh
|
||||
index dde1b8d..5305865 100644
|
||||
--- a/tests/t-local.sh
|
||||
+++ b/tests/t-local.sh
|
||||
@@ -47,6 +47,7 @@ wait_for_dev_to_appear_()
|
||||
local i=0
|
||||
local incr=1
|
||||
while :; do
|
||||
+ udevadm settle
|
||||
ls "$file" > /dev/null 2>&1 && return 0
|
||||
sleep .1 2>/dev/null || { sleep 1; incr=10; }
|
||||
i=$(expr $i + $incr); test $i = 20 && break
|
||||
@@ -110,6 +111,7 @@ scsi_debug_setup_()
|
||||
local i=0
|
||||
local new_dev
|
||||
while :; do
|
||||
+ udevadm settle
|
||||
new_dev=$(new_sdX_) && break
|
||||
sleep .1 2>/dev/null || { sleep 1; incr=10; }
|
||||
i=$(expr $i + $incr); test $i = 20 && break
|
||||
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
|
||||
index b747732..f22c877 100644
|
||||
--- a/tests/t6001-psep.sh
|
||||
+++ b/tests/t6001-psep.sh
|
||||
@@ -20,6 +20,8 @@
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||||
|
||||
require_root_
|
||||
+require_udevadm_settle_
|
||||
+
|
||||
(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
|
||||
# Device maps names - should be random to not conflict with existing ones on
|
||||
diff --git a/tests/t6002-dm-many-partitions.sh b/tests/t6002-dm-many-partitions.sh
|
||||
index 247c9ee..13894f5 100755
|
||||
--- a/tests/t6002-dm-many-partitions.sh
|
||||
+++ b/tests/t6002-dm-many-partitions.sh
|
||||
@@ -20,6 +20,7 @@
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||||
|
||||
require_root_
|
||||
+require_udevadm_settle_
|
||||
(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
|
||||
ss=$sector_size_
|
||||
diff --git a/tests/t6003-dm-uuid.sh b/tests/t6003-dm-uuid.sh
|
||||
index f58cb06..f51e45f 100755
|
||||
--- a/tests/t6003-dm-uuid.sh
|
||||
+++ b/tests/t6003-dm-uuid.sh
|
||||
@@ -20,6 +20,7 @@
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||||
|
||||
require_root_
|
||||
+require_udevadm_settle_
|
||||
(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
|
||||
ss=$sector_size_
|
||||
@@ -46,6 +47,7 @@ for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
cmd="$cmd mkpart p$i ${s}s ${s}s"
|
||||
done
|
||||
parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1
|
||||
+wait_for_dev_to_appear_ /dev/mapper/${dm_name}p${n_partitions} || fail=1
|
||||
|
||||
# Make sure all the partitions have UUIDs
|
||||
for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
|
||||
index d7e7d6a..a74afe0 100755
|
||||
--- a/tests/t6100-mdraid-partitions.sh
|
||||
+++ b/tests/t6100-mdraid-partitions.sh
|
||||
@@ -38,6 +38,7 @@ parted -s "$scsi_dev" mklabel gpt \
|
||||
mkpart p1 ext2 1M 4M \
|
||||
mkpart p2 ext2 5M 8M > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
+wait_for_dev_to_appear_ ${scsi_dev}2 || { fail=1; cat /proc/partitions; }
|
||||
|
||||
cleanup_fn_() {
|
||||
# stop mdraid array
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From ce7a3fd5e2beeee6b0765decb77ba8ee15867342 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 1 Mar 2016 13:51:54 -0800
|
||||
Subject: [PATCH] tests: Add wait to t9042 (#1257415)
|
||||
|
||||
Also make the new disklabel and first partition all in one step to
|
||||
prevent udev problems.
|
||||
|
||||
Resolves: rhbz#1257415
|
||||
---
|
||||
tests/t9042-dos-partition-limit.sh | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/t9042-dos-partition-limit.sh b/tests/t9042-dos-partition-limit.sh
|
||||
index 67ea86d..fb2dd72 100644
|
||||
--- a/tests/t9042-dos-partition-limit.sh
|
||||
+++ b/tests/t9042-dos-partition-limit.sh
|
||||
@@ -44,8 +44,8 @@ printf '%s\n' "BYT;" \
|
||||
"1:$((start-2))s:$((n-1))s:$((n-start+2))s:::lba;" \
|
||||
> exp || fail=1
|
||||
|
||||
-parted -s $scsi_dev mklabel msdos || fail=1
|
||||
-parted -s -a min $scsi_dev mkpart extended $((start-2))s 100% || fail=1
|
||||
+parted -s -a min $scsi_dev mklabel msdos mkpart extended $((start-2))s 100% || fail=1
|
||||
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
|
||||
|
||||
i=1
|
||||
while :; do
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
From 72ed2ef652be536c6752febf4f03cfc5d343e520 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 29 Feb 2016 14:31:35 -0800
|
||||
Subject: [PATCH] tests: Fix t1700 failing on a host with a 4k xfs filesystem
|
||||
(#1260664)
|
||||
|
||||
The problem is that mkfs.xfs won't work if the file it is trying to
|
||||
create is on a filesystem with a sector size larger than the passed
|
||||
-ssize value. So a host with 4k disks (eg. s390) and the xfs filesystem
|
||||
will fail with the error message:
|
||||
illegal sector size 512; hw sector is 4096
|
||||
|
||||
Failures setting up the environment for the test aren't parted bugs.
|
||||
This stops treating mkfs and dd errors as test failures, skipping the fs
|
||||
and logging a warning.
|
||||
|
||||
Related: rhbz#1260664
|
||||
---
|
||||
tests/t1700-probe-fs.sh | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
|
||||
index 83e6be4..2b59307 100755
|
||||
--- a/tests/t1700-probe-fs.sh
|
||||
+++ b/tests/t1700-probe-fs.sh
|
||||
@@ -30,13 +30,13 @@ for type in ext2 ext3 ext4 btrfs xfs nilfs2; do
|
||||
case $type in ext*) n_sectors=8000 force=-F;;
|
||||
*) n_sectors=$((512*1024)) force=;; esac
|
||||
|
||||
- # create an $type file system
|
||||
- if [ "$type" == "xfs" ]; then
|
||||
- # Work around a problem with s390
|
||||
- mkfs.xfs -ssize=$ss -dfile,name=$dev,size=${n_sectors}s || fail=1
|
||||
+ # create an $type file system, creation failures are not parted bugs,
|
||||
+ # skip the filesystem instead of failing the test.
|
||||
+ if [ "$type" = "xfs" ]; then
|
||||
+ mkfs.xfs -ssize=$ss -dfile,name=$dev,size=${n_sectors}s || { warn_ "$ME: mkfs.$type failed, skipping"; continue; }
|
||||
else
|
||||
- dd if=/dev/zero of=$dev bs=$ss count=$n_sectors >/dev/null || fail=1
|
||||
- mkfs.$type $force $dev || { warn_ $ME: mkfs.$type failed; fail=1; continue; }
|
||||
+ dd if=/dev/null of=$dev bs=$ss seek=$n_sectors >/dev/null || { warn_ "$ME: dd failed, skipping $type"; continue; }
|
||||
+ mkfs.$type $force $dev || { warn_ "$ME: mkfs.$type failed skipping"; continue; }
|
||||
fi
|
||||
|
||||
# probe the $type file system
|
||||
@@ -48,7 +48,7 @@ done
|
||||
# Some features should indicate ext4 by themselves.
|
||||
for feature in uninit_bg flex_bg; do
|
||||
# create an ext3 file system
|
||||
- dd if=/dev/zero of=$dev bs=1024 count=4096 >/dev/null || fail=1
|
||||
+ dd if=/dev/null of=$dev bs=1024 seek=4096 >/dev/null || skip_ "dd failed"
|
||||
mkfs.ext3 -F $dev >/dev/null || skip_ "mkfs.ext3 failed"
|
||||
|
||||
# set the feature
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From 9da2f460bebf9a8281fdd52536d3676b0914b8fd Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 11 Apr 2016 15:10:51 -0700
|
||||
Subject: [PATCH 38/39] libparted: Remove fdasd geometry code from
|
||||
alloc_metadata (#1244833)
|
||||
|
||||
commit db20944f changed how the trailing_metadata_end is calculated in
|
||||
dasd_alloc_metadata, removing the need for setting up the anchor struct.
|
||||
But dasd_alloc_metadata can be called in various contexts, and the
|
||||
arch_specific->fd may or may not be valid during these calls. This can
|
||||
result in unpredictable crashes when it uses a stale fd and tries to run
|
||||
the file image code in fdasd_get_geometry instead of the device code.
|
||||
|
||||
The solution is to just drop the unneeded code, and to remember that
|
||||
arch_specific->fd should only be used when ped_device_open has first
|
||||
been called.
|
||||
|
||||
Resolves: rhbz#1244833
|
||||
---
|
||||
libparted/labels/dasd.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
|
||||
index 4d533cf..5bffda7 100644
|
||||
--- a/libparted/labels/dasd.c
|
||||
+++ b/libparted/labels/dasd.c
|
||||
@@ -950,7 +950,6 @@ dasd_alloc_metadata (PedDisk* disk)
|
||||
PedPartition* part = NULL; /* initialize solely to placate gcc */
|
||||
PedPartition* new_part2;
|
||||
PedSector trailing_meta_start, trailing_meta_end;
|
||||
- struct fdasd_anchor anchor;
|
||||
|
||||
PED_ASSERT (disk != NULL);
|
||||
PED_ASSERT (disk->dev != NULL);
|
||||
@@ -1000,10 +999,7 @@ dasd_alloc_metadata (PedDisk* disk)
|
||||
backed up, then restored to a larger size disk, etc.
|
||||
*/
|
||||
trailing_meta_start = part->geom.end + 1;
|
||||
- fdasd_initialize_anchor(&anchor);
|
||||
- fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd);
|
||||
trailing_meta_end = (long long) disk->dev->length - 1;
|
||||
- fdasd_cleanup(&anchor);
|
||||
if (trailing_meta_end >= trailing_meta_start) {
|
||||
new_part2 = ped_partition_new (disk,PED_PARTITION_METADATA,
|
||||
NULL, trailing_meta_start, trailing_meta_end);
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 8e64cda0151fa70195030d5abc0361bd3cd187bb Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 29 Feb 2016 16:47:18 -0800
|
||||
Subject: [PATCH 39/39] docs: Add list of filesystems for fs-type (#1311596)
|
||||
|
||||
Add the most common filesystem types to the parted manpage.
|
||||
|
||||
Resolves: rhbz#1311596
|
||||
(cherry picked from commit c9f50a36aee0a4c373b5e1bd3069aeb18fac055d)
|
||||
---
|
||||
doc/C/parted.8 | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/doc/C/parted.8 b/doc/C/parted.8
|
||||
index 1ea741e..03bb3a5 100644
|
||||
--- a/doc/C/parted.8
|
||||
+++ b/doc/C/parted.8
|
||||
@@ -76,6 +76,8 @@ should be one of "aix", "amiga", "bsd", "dvh", "gpt", "loop", "mac", "msdos",
|
||||
.B mkpart \fIpart-type\fP \fI[fs-type]\fP \fIstart\fP \fIend\fP
|
||||
Make a \fIpart-type\fP partition for filesystem \fIfs-type\fP (if specified),
|
||||
beginning at \fIstart\fP and ending at \fIend\fP (by default in megabytes).
|
||||
+\fIfs-type\fP can be one of "btrfs", "ext2", "ext3", "ext4", "fat16", "fat32",
|
||||
+"hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", or "xfs".
|
||||
\fIpart-type\fP should be one of "primary", "logical", or "extended".
|
||||
.TP
|
||||
.B name \fIpartition\fP \fIname\fP
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From c34f2e31d804d70332b8be9760ea3f285d480070 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 25 May 2016 09:00:04 -0700
|
||||
Subject: [PATCH] partprobe: Open the device once for probing (#1339705)
|
||||
|
||||
Previously there were 3 open/close pairs for the device, which may
|
||||
result in triggering extra udev actions. Instead, open it once at the
|
||||
start of process_dev and close it at the end.
|
||||
|
||||
Resolves: rhbz#1339705
|
||||
---
|
||||
partprobe/partprobe.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/partprobe/partprobe.c b/partprobe/partprobe.c
|
||||
index 8bccc4f..c5260c6 100644
|
||||
--- a/partprobe/partprobe.c
|
||||
+++ b/partprobe/partprobe.c
|
||||
@@ -108,6 +108,9 @@ process_dev (PedDevice* dev)
|
||||
PedDiskType* disk_type;
|
||||
PedDisk* disk;
|
||||
|
||||
+ if (!ped_device_open (dev))
|
||||
+ return 0;
|
||||
+
|
||||
disk_type = ped_disk_probe (dev);
|
||||
if (!disk_type || !strcmp (disk_type->name, "loop"))
|
||||
return 1;
|
||||
@@ -122,11 +125,13 @@ process_dev (PedDevice* dev)
|
||||
if (opt_summary)
|
||||
summary (disk);
|
||||
ped_disk_destroy (disk);
|
||||
+ ped_device_close (dev);
|
||||
return 1;
|
||||
|
||||
error_destroy_disk:
|
||||
ped_disk_destroy (disk);
|
||||
error:
|
||||
+ ped_device_close (dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From 4e729dc2d3ab4339181f59dc0a51583ecc14c7ab Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 29 Feb 2016 16:54:05 -0800
|
||||
Subject: [PATCH] tests: Stop timing t9040 (#1172675)
|
||||
|
||||
parted doesn't have any control over how long this takes, there is no
|
||||
reason to consider this a parted bug if it takes longer than expected.
|
||||
|
||||
Resolves: rhbz#1172675
|
||||
---
|
||||
tests/t9040-many-partitions.sh | 10 ----------
|
||||
1 file changed, 10 deletions(-)
|
||||
|
||||
diff --git a/tests/t9040-many-partitions.sh b/tests/t9040-many-partitions.sh
|
||||
index 8949310..1f8e201 100644
|
||||
--- a/tests/t9040-many-partitions.sh
|
||||
+++ b/tests/t9040-many-partitions.sh
|
||||
@@ -53,9 +53,7 @@ while :; do
|
||||
done
|
||||
|
||||
# Time the actual command:
|
||||
-t0=$(date +%s.%N)
|
||||
parted -m -a min -s $scsi_dev mklabel gpt $cmd u s p > out 2>&1 || fail=1
|
||||
-t_final=$(date +%s.%N)
|
||||
|
||||
i=1
|
||||
while :; do
|
||||
@@ -64,14 +62,6 @@ while :; do
|
||||
printf "$i:${s}s:${e}s:${partition_sectors}s::p$i:;\n" >> exp
|
||||
test $i = $n_partitions && break; i=$((i+1))
|
||||
done
|
||||
-
|
||||
-# Fail the test if it takes too long.
|
||||
-# On Fedora 16, this takes about 10 seconds for me.
|
||||
-# With Fedora-12-era kernels, it typically took more than 150 seconds.
|
||||
-$AWK "BEGIN {d = $t_final - $t0; n = $n_partitions; st = 60 < d;"\
|
||||
-' printf "created %d partitions in %.2f seconds\n", n, d; exit st }' /dev/null \
|
||||
- || fail=1
|
||||
-
|
||||
compare exp out || fail=1
|
||||
|
||||
Exit $fail
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From f648310fbc24186395e1864a48571982e1588435 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 23 Aug 2016 08:55:18 -0700
|
||||
Subject: [PATCH] tests: Set optimal blocks to 64 for scsi_debug devices
|
||||
(#1359682)
|
||||
|
||||
The Linux kernel 4.5 changed the optimal blocks count from 64 to 1024
|
||||
This causes tests using scsi_debug devices to fail because of alignment
|
||||
issues. Set the opt_blks to 64 so that we have consistent behavior
|
||||
across kernels.
|
||||
|
||||
Resolves: rhbz#1359682
|
||||
---
|
||||
tests/t-local.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/t-local.sh b/tests/t-local.sh
|
||||
index 5305865..93ee0f7 100644
|
||||
--- a/tests/t-local.sh
|
||||
+++ b/tests/t-local.sh
|
||||
@@ -98,7 +98,7 @@ scsi_debug_setup_()
|
||||
# It is not trivial to determine the name of the device we're creating.
|
||||
# Record the names of all /sys/block/sd* devices *before* probing:
|
||||
touch stamp
|
||||
- modprobe scsi_debug "$@" || { rm -f stamp; return 1; }
|
||||
+ modprobe scsi_debug opt_blks=64 "$@" || { rm -f stamp; return 1; }
|
||||
scsi_debug_modprobe_succeeded_=1
|
||||
test "$VERBOSE" = yes \
|
||||
&& warn_ $ME_ modprobe scsi_debug succeeded
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
From 62cb6416f112dda0b0b969c1247cbc0f98314182 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Uzel <petr.uzel@suse.cz>
|
||||
Date: Tue, 14 Jun 2016 13:17:00 +0200
|
||||
Subject: [PATCH] Add support for NVMe devices
|
||||
|
||||
Recognize NVMe Devices, so "parted -s /dev/nvme0n1" now prints
|
||||
"NVMe Device (nvme)" instead of "Model: Unknown (unknown)".
|
||||
|
||||
In order for a device to be recognized as NVMe, it has to
|
||||
have a 'blkext' major number. But since this major can be
|
||||
used also by other device types, we also check the device
|
||||
path contains 'nvme' as a substring.
|
||||
|
||||
* NEWS: Mention the change
|
||||
* include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_NVME
|
||||
* libparted/arch/linux.c(BLKEXT_MAJOR): New define.
|
||||
* libparted/arch/linux.c(_is_blkext_major): New function.
|
||||
* libparted/arch/linux.c(_device_probe_type): Recognize NVMe devices.
|
||||
* libparted/arch/linux.c(linux_new): Handle NVMe devices.
|
||||
* parted/parted.c(do_print): Add "nvme" to list of transports.
|
||||
|
||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||
(cherry picked from commit e4ae4330f3e33201aeeed3b7ca88e15d98d03e13)
|
||||
|
||||
Resolves: rhbz#1316239
|
||||
---
|
||||
NEWS | 4 ++++
|
||||
include/parted/device.in.h | 3 ++-
|
||||
libparted/arch/linux.c | 14 ++++++++++++++
|
||||
parted/parted.c | 2 +-
|
||||
4 files changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index d1ab2a6..d1a6f58 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,5 +1,9 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes in release 3.1-29 (2017-04-11) [RHEL7.4]
|
||||
+
|
||||
+ Parted now recognizes NVMe devices
|
||||
+
|
||||
* Noteworthy changes in release 3.1-18 (2014-08-12) [RHEL7.1]
|
||||
|
||||
** New features
|
||||
diff --git a/include/parted/device.in.h b/include/parted/device.in.h
|
||||
index a3d1737..b0aa1f2 100644
|
||||
--- a/include/parted/device.in.h
|
||||
+++ b/include/parted/device.in.h
|
||||
@@ -49,7 +49,8 @@ typedef enum {
|
||||
PED_DEVICE_VIRTBLK = 15,
|
||||
PED_DEVICE_AOE = 16,
|
||||
PED_DEVICE_MD = 17,
|
||||
- PED_DEVICE_LOOP = 18
|
||||
+ PED_DEVICE_LOOP = 18,
|
||||
+ PED_DEVICE_NVME = 19
|
||||
} PedDeviceType;
|
||||
|
||||
typedef struct _PedDevice PedDevice;
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 341bbbb..fa329f4 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -275,6 +275,7 @@ struct blkdev_ioctl_param {
|
||||
#define SDMMC_MAJOR 179
|
||||
#define LOOP_MAJOR 7
|
||||
#define MD_MAJOR 9
|
||||
+#define BLKEXT_MAJOR 259
|
||||
|
||||
#define SCSI_BLK_MAJOR(M) ( \
|
||||
(M) == SCSI_DISK0_MAJOR \
|
||||
@@ -437,6 +438,12 @@ _is_virtblk_major (int major)
|
||||
return _major_type_in_devices (major, "virtblk");
|
||||
}
|
||||
|
||||
+static int
|
||||
+_is_blkext_major (int major)
|
||||
+{
|
||||
+ return _major_type_in_devices (major, "blkext");
|
||||
+}
|
||||
+
|
||||
#ifdef ENABLE_DEVICE_MAPPER
|
||||
static int
|
||||
_is_dm_major (int major)
|
||||
@@ -600,6 +607,8 @@ _device_probe_type (PedDevice* dev)
|
||||
dev->type = PED_DEVICE_LOOP;
|
||||
} else if (dev_major == MD_MAJOR) {
|
||||
dev->type = PED_DEVICE_MD;
|
||||
+ } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "nvme")) {
|
||||
+ dev->type = PED_DEVICE_NVME;
|
||||
} else {
|
||||
dev->type = PED_DEVICE_UNKNOWN;
|
||||
}
|
||||
@@ -1372,6 +1381,11 @@ linux_new (const char* path)
|
||||
goto error_free_arch_specific;
|
||||
break;
|
||||
|
||||
+ case PED_DEVICE_NVME:
|
||||
+ if (!init_generic (dev, _("NVMe Device")))
|
||||
+ goto error_free_arch_specific;
|
||||
+ break;
|
||||
+
|
||||
case PED_DEVICE_ATARAID:
|
||||
if (!init_generic (dev, _("ATARAID Controller")))
|
||||
goto error_free_arch_specific;
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index 789030a..957789a 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -947,7 +947,7 @@ _print_disk_info (const PedDevice *dev, const PedDisk *disk)
|
||||
"cpqarray", "file", "ataraid", "i2o",
|
||||
"ubd", "dasd", "viodasd", "sx8", "dm",
|
||||
"xvd", "sd/mmc", "virtblk", "aoe",
|
||||
- "md", "loopback"};
|
||||
+ "md", "loopback", "nvme"};
|
||||
|
||||
char* start = ped_unit_format (dev, 0);
|
||||
PedUnit default_unit = ped_unit_get_default ();
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
From c051e9f7eaae007940a73be1509257bd52c569de Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Sun, 25 May 2014 14:43:39 -0400
|
||||
Subject: [PATCH 44/48] Document resizepart command
|
||||
|
||||
(cherry picked from commit 5c793853fe5cb0718d895c3394fb909c73c6fa1e)
|
||||
|
||||
Related: rhbz#1423357
|
||||
---
|
||||
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 03bb3a5..5a24c94 100644
|
||||
--- a/doc/C/parted.8
|
||||
+++ b/doc/C/parted.8
|
||||
@@ -95,6 +95,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 f10d5e1..d498367 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::
|
||||
@@ -715,6 +716,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
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
From 575b286502bd7338bfeeafbfc5e6ae6718b269f9 Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Susi <psusi@ubuntu.com>
|
||||
Date: Tue, 8 Jan 2013 19:40:35 -0500
|
||||
Subject: [PATCH 45/48] 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.
|
||||
|
||||
(cherry picked from commit 56bfbe21ecca0cb6466c78baed192dc2e5401676)
|
||||
|
||||
Related: rhbz#1423357
|
||||
---
|
||||
parted/parted.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index 957789a..d4a397b 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -1478,6 +1478,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_rm (PedDevice** dev)
|
||||
{
|
||||
PedDisk* disk;
|
||||
@@ -1891,6 +1901,20 @@ 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 (
|
||||
+_("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 (
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,842 @@
|
|||
From 31ab97cfe0233191a73a1dd9cb7cd193451491da Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 11 Aug 2017 08:37:11 -0700
|
||||
Subject: [PATCH 46/48] libparted: Backport partition resize code
|
||||
|
||||
This adds _blkpg_resize_partition, _dm_resize_partition, and adjust the
|
||||
current code to support it. Changes are somewhat extensive, since they
|
||||
also touch _disk_sync_part_table.
|
||||
|
||||
This is based on code from commit f09ca967a0bc443b869a6fad5b5ffe8e95c3fe9a
|
||||
|
||||
Related: rhbz#1423357
|
||||
---
|
||||
libparted/arch/linux.c | 673 +++++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 403 insertions(+), 270 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index fa329f4..6e78faf 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -288,6 +288,7 @@ struct blkdev_ioctl_param {
|
||||
|
||||
static char* _device_get_part_path (PedDevice* dev, int num);
|
||||
static int _partition_is_mounted_by_path (const char* path);
|
||||
+static unsigned int _device_get_partition_range(PedDevice const* dev);
|
||||
static int _device_open (PedDevice* dev, int flags);
|
||||
static int _device_open_ro (PedDevice* dev);
|
||||
static int _device_close (PedDevice* dev);
|
||||
@@ -446,6 +447,17 @@ _is_blkext_major (int major)
|
||||
|
||||
#ifdef ENABLE_DEVICE_MAPPER
|
||||
static int
|
||||
+_dm_task_run_wait (struct dm_task *task, uint32_t cookie)
|
||||
+{
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ rc = dm_task_run (task);
|
||||
+ dm_udev_wait (cookie);
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
_is_dm_major (int major)
|
||||
{
|
||||
return _major_type_in_devices (major, "device-mapper");
|
||||
@@ -1521,6 +1533,7 @@ _flush_cache (PedDevice* dev)
|
||||
{
|
||||
LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
|
||||
int i;
|
||||
+ int lpn = _device_get_partition_range(dev);
|
||||
|
||||
if (dev->read_only)
|
||||
return;
|
||||
@@ -1532,7 +1545,7 @@ _flush_cache (PedDevice* dev)
|
||||
if (_have_kern26())
|
||||
return;
|
||||
|
||||
- for (i = 1; i < 16; i++) {
|
||||
+ for (i = 1; i < lpn; i++) {
|
||||
char* name;
|
||||
int fd;
|
||||
|
||||
@@ -2268,28 +2281,63 @@ zasprintf (const char *format, ...)
|
||||
return r < 0 ? NULL : resultp;
|
||||
}
|
||||
|
||||
+#ifdef ENABLE_DEVICE_MAPPER
|
||||
+static char *
|
||||
+dm_canonical_path (PedDevice const *dev)
|
||||
+{
|
||||
+ LinuxSpecific const *arch_specific = LINUX_SPECIFIC (dev);
|
||||
+
|
||||
+ /* 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;
|
||||
+ char *dev_name = zasprintf ("/dev/mapper/%s", dm_task_get_name (task));
|
||||
+ if (dev_name == NULL)
|
||||
+ goto err;
|
||||
+ dm_task_destroy (task);
|
||||
+ return dev_name;
|
||||
+err:
|
||||
+ return NULL;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static char*
|
||||
_device_get_part_path (PedDevice *dev, int num)
|
||||
{
|
||||
- size_t path_len = strlen (dev->path);
|
||||
-
|
||||
+ char *devpath;
|
||||
+ size_t path_len;
|
||||
char *result;
|
||||
+#ifdef ENABLE_DEVICE_MAPPER
|
||||
+ devpath = (dev->type == PED_DEVICE_DM
|
||||
+ ? dm_canonical_path (dev) : dev->path);
|
||||
+#else
|
||||
+ devpath = dev->path;
|
||||
+#endif
|
||||
+ path_len = strlen (devpath);
|
||||
/* Check for devfs-style /disc => /partN transformation
|
||||
unconditionally; the system might be using udev with devfs rules,
|
||||
and if not the test is harmless. */
|
||||
- if (5 < path_len && !strcmp (dev->path + path_len - 5, "/disc")) {
|
||||
+ if (5 < path_len && !strcmp (devpath + path_len - 5, "/disc")) {
|
||||
/* replace /disc with /part%d */
|
||||
result = zasprintf ("%.*s/part%d",
|
||||
- (int) (path_len - 5), dev->path, num);
|
||||
+ (int) (path_len - 5), devpath, num);
|
||||
} else {
|
||||
char const *p = (dev->type == PED_DEVICE_DAC960
|
||||
|| dev->type == PED_DEVICE_CPQARRAY
|
||||
|| dev->type == PED_DEVICE_ATARAID
|
||||
|| isdigit (dev->path[path_len - 1])
|
||||
? "p" : "");
|
||||
- result = zasprintf ("%s%s%d", dev->path, p, num);
|
||||
+ result = zasprintf ("%s%s%d", devpath, p, num);
|
||||
}
|
||||
-
|
||||
+#ifdef ENABLE_DEVICE_MAPPER
|
||||
+ if (dev->type == PED_DEVICE_DM)
|
||||
+ free (devpath);
|
||||
+#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2438,6 +2486,62 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
|
||||
|
||||
if (!_blkpg_part_command (disk->dev, &linux_part,
|
||||
BLKPG_ADD_PARTITION)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+_blkpg_remove_partition (PedDisk* disk, int n)
|
||||
+{
|
||||
+ struct blkpg_partition linux_part;
|
||||
+
|
||||
+ memset (&linux_part, 0, sizeof (linux_part));
|
||||
+ linux_part.pno = n;
|
||||
+ return _blkpg_part_command (disk->dev, &linux_part,
|
||||
+ 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;
|
||||
+ }
|
||||
+ linux_part.length *= disk->dev->sector_size;
|
||||
+ }
|
||||
+ 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,
|
||||
@@ -2454,17 +2558,7 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
|
||||
|
||||
return 1;
|
||||
}
|
||||
-
|
||||
-static int
|
||||
-_blkpg_remove_partition (PedDisk* disk, int n)
|
||||
-{
|
||||
- struct blkpg_partition linux_part;
|
||||
-
|
||||
- memset (&linux_part, 0, sizeof (linux_part));
|
||||
- linux_part.pno = n;
|
||||
- return _blkpg_part_command (disk->dev, &linux_part,
|
||||
- BLKPG_DEL_PARTITION);
|
||||
-}
|
||||
+#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.
|
||||
@@ -2586,6 +2680,8 @@ static unsigned int
|
||||
_device_get_partition_range(PedDevice const* dev)
|
||||
{
|
||||
int range;
|
||||
+ if (dev->type == PED_DEVICE_DM)
|
||||
+ return MAX_NUM_PARTS;
|
||||
bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range);
|
||||
|
||||
if (!ok)
|
||||
@@ -2594,264 +2690,78 @@ _device_get_partition_range(PedDevice const* dev)
|
||||
return range > 1 ? range : 0;
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Sync the partition table in two step process:
|
||||
- * 1. Remove all of the partitions from the kernel's tables, but do not attempt
|
||||
- * removal of any partition for which the corresponding ioctl call fails.
|
||||
- * 2. Add all the partitions that we hold in disk, throwing a warning
|
||||
- * if we cannot because step 1 failed to remove it and it is not being
|
||||
- * added back with the same start and length.
|
||||
- *
|
||||
- * To achieve this two step process we must calculate the minimum number of
|
||||
- * maximum possible partitions between what linux supports and what the label
|
||||
- * type supports. EX:
|
||||
- *
|
||||
- * number=MIN(max_parts_supported_in_linux,max_parts_supported_in_msdos_tables)
|
||||
- */
|
||||
-static int
|
||||
-_disk_sync_part_table (PedDisk* disk)
|
||||
-{
|
||||
- PED_ASSERT(disk != NULL);
|
||||
- PED_ASSERT(disk->dev != NULL);
|
||||
- int lpn;
|
||||
-
|
||||
- unsigned int part_range = _device_get_partition_range(disk->dev);
|
||||
-
|
||||
- /* lpn = largest partition number. */
|
||||
- if (ped_disk_get_max_supported_partition_count(disk, &lpn))
|
||||
- lpn = PED_MIN(lpn, part_range);
|
||||
- else
|
||||
- lpn = part_range;
|
||||
-
|
||||
- /* Its not possible to support largest_partnum < 0.
|
||||
- * largest_partnum == 0 would mean does not support partitions.
|
||||
- * */
|
||||
- if (lpn < 1)
|
||||
- return 0;
|
||||
- int ret = 0;
|
||||
- int *ok = calloc (lpn, sizeof *ok);
|
||||
- if (!ok)
|
||||
- return 0;
|
||||
- int *errnums = ped_malloc(sizeof(int) * lpn);
|
||||
- if (!errnums)
|
||||
- goto cleanup;
|
||||
-
|
||||
- /* Attempt to remove each and every partition, retrying for
|
||||
- up to max_sleep_seconds upon any failure due to EBUSY. */
|
||||
- unsigned int sleep_microseconds = 10000;
|
||||
- unsigned int max_sleep_seconds = 1;
|
||||
- unsigned int n_sleep = (max_sleep_seconds
|
||||
- * 1000000 / sleep_microseconds);
|
||||
- int i;
|
||||
- for (i = 0; i < n_sleep; i++) {
|
||||
- if (i)
|
||||
- usleep (sleep_microseconds);
|
||||
- bool busy = false;
|
||||
- int j;
|
||||
- for (j = 0; j < lpn; j++) {
|
||||
- if (!ok[j]) {
|
||||
- ok[j] = _blkpg_remove_partition (disk, j + 1);
|
||||
- errnums[j] = errno;
|
||||
- if (!ok[j] && errnums[j] == EBUSY)
|
||||
- busy = true;
|
||||
- }
|
||||
- }
|
||||
- if (!busy)
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- for (i = 1; i <= lpn; i++) {
|
||||
- PedPartition *part = ped_disk_get_partition (disk, i);
|
||||
- if (part) {
|
||||
- if (!ok[i - 1] && errnums[i - 1] == EBUSY) {
|
||||
- unsigned long long length;
|
||||
- unsigned long long start;
|
||||
- /* get start and length of existing partition */
|
||||
- if (!_kernel_get_partition_start_and_length(part,
|
||||
- &start, &length))
|
||||
- goto cleanup;
|
||||
- if (start == part->geom.start
|
||||
- && length == part->geom.length)
|
||||
- ok[i - 1] = 1;
|
||||
- /* If the new partition is unchanged and the
|
||||
- existing one was not removed because it was
|
||||
- in use, then reset the error flag and do not
|
||||
- try to add it since it is already there. */
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- /* add the (possibly modified or new) partition */
|
||||
- if (!_blkpg_add_partition (disk, part)) {
|
||||
- ped_exception_throw (
|
||||
- PED_EXCEPTION_ERROR,
|
||||
- PED_EXCEPTION_RETRY_CANCEL,
|
||||
- _("Failed to add partition %d (%s)"),
|
||||
- i, strerror (errno));
|
||||
- goto cleanup;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- 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 (bad_part_list == NULL)
|
||||
- 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, "
|
||||
- "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);
|
||||
- }
|
||||
- cleanup:
|
||||
- free (errnums);
|
||||
- free (ok);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
#ifdef ENABLE_DEVICE_MAPPER
|
||||
static int
|
||||
-_dm_remove_map_name(char *name)
|
||||
+_dm_remove_partition(PedDisk* disk, int partno)
|
||||
{
|
||||
- struct dm_task *task = NULL;
|
||||
int rc = 0;
|
||||
uint32_t cookie = 0;
|
||||
+ char *part_name = _device_get_part_path (disk->dev, partno);
|
||||
|
||||
- task = dm_task_create(DM_DEVICE_REMOVE);
|
||||
+ int fd = open (part_name, O_RDONLY | O_EXCL);
|
||||
+ if (fd == -1) {
|
||||
+ if (errno == ENOENT)
|
||||
+ errno = ENXIO; /* nothing to remove, device already doesn't exist */
|
||||
+ goto err;
|
||||
+ }
|
||||
+ close (fd);
|
||||
+ struct dm_task *task = dm_task_create(DM_DEVICE_REMOVE);
|
||||
if (!task)
|
||||
- return 1;
|
||||
-
|
||||
- dm_task_set_name (task, name);
|
||||
- if (!dm_task_set_cookie(task, &cookie, 0))
|
||||
- goto err;
|
||||
-
|
||||
- rc = dm_task_run(task);
|
||||
- dm_udev_wait(cookie);
|
||||
+ goto err;
|
||||
+ dm_task_set_name (task, part_name);
|
||||
+ if (!dm_task_set_cookie (task, &cookie, 0))
|
||||
+ goto err;
|
||||
+ rc = _dm_task_run_wait (task, cookie);
|
||||
dm_task_update_nodes();
|
||||
-err:
|
||||
dm_task_destroy(task);
|
||||
- if (!rc)
|
||||
- return 1;
|
||||
-
|
||||
- return 0;
|
||||
+err:
|
||||
+ free (part_name);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
-static int
|
||||
-_dm_is_part (struct dm_info *this, char *name)
|
||||
+static bool
|
||||
+_dm_get_partition_start_and_length(PedPartition const *part,
|
||||
+ unsigned long long *start,
|
||||
+ unsigned long long *length)
|
||||
{
|
||||
struct dm_task* task = NULL;
|
||||
- struct dm_info* info = alloca(sizeof *info);
|
||||
- struct dm_deps* deps = NULL;
|
||||
int rc = 0;
|
||||
- unsigned int i;
|
||||
|
||||
- task = dm_task_create(DM_DEVICE_DEPS);
|
||||
- if (!task)
|
||||
+ if (!(task = dm_task_create(DM_DEVICE_TABLE)))
|
||||
return 0;
|
||||
-
|
||||
- dm_task_set_name(task, name);
|
||||
- if (!dm_task_run(task))
|
||||
+ char *path = _device_get_part_path (part->disk->dev, part->num);
|
||||
+ PED_ASSERT(path);
|
||||
+ /* libdevmapper likes to complain on stderr instead of quietly
|
||||
+ returning ENOENT or ENXIO, so try to stat first */
|
||||
+ struct stat st;
|
||||
+ if (stat(path, &st))
|
||||
goto err;
|
||||
-
|
||||
- memset(info, '\0', sizeof *info);
|
||||
- dm_task_get_info(task, info);
|
||||
- if (!info->exists)
|
||||
+ dm_task_set_name(task, path);
|
||||
+ if (!dm_task_run(task))
|
||||
goto err;
|
||||
|
||||
- deps = dm_task_get_deps(task);
|
||||
- if (!deps)
|
||||
+ int major, minor;
|
||||
+ char *params;
|
||||
+ char *target_type;
|
||||
+ dm_get_next_target(task, NULL, (uint64_t *)start, (uint64_t *)length, &target_type, ¶ms);
|
||||
+ if (sscanf (params, "%d:%d %Ld", &major, &minor, start) != 3)
|
||||
goto err;
|
||||
+ rc = 1;
|
||||
|
||||
- for (i = 0; i < deps->count; i++) {
|
||||
- unsigned int ma = major(deps->device[i]),
|
||||
- mi = minor(deps->device[i]);
|
||||
-
|
||||
- if (ma == this->major && mi == this->minor)
|
||||
- rc = 1;
|
||||
- }
|
||||
-
|
||||
+ /* device-mapper uses 512b units, make sure we return length and start in terms of the device's
|
||||
+ * sector size.
|
||||
+ */
|
||||
+ *start /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
|
||||
+ *length /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
|
||||
err:
|
||||
+ free (path);
|
||||
dm_task_destroy(task);
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int
|
||||
-_dm_remove_parts (PedDevice* dev)
|
||||
-{
|
||||
- struct dm_task* task = NULL;
|
||||
- struct dm_info* info = alloca(sizeof *info);
|
||||
- struct dm_names* names = NULL;
|
||||
- unsigned int next = 0;
|
||||
- int rc;
|
||||
- LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
|
||||
-
|
||||
- task = dm_task_create(DM_DEVICE_LIST);
|
||||
- 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;
|
||||
-
|
||||
- memset(info, '\0', sizeof *info);
|
||||
- dm_task_get_info(task, info);
|
||||
- if (!info->exists)
|
||||
- goto err;
|
||||
-
|
||||
- names = dm_task_get_names(task);
|
||||
- if (!names)
|
||||
- goto err;
|
||||
-
|
||||
- rc = 0;
|
||||
- do {
|
||||
- names = (void *) ((char *) names + next);
|
||||
-
|
||||
- if (_dm_is_part(info, names->name))
|
||||
- rc += _dm_remove_map_name(names->name);
|
||||
-
|
||||
- next = names->next;
|
||||
- } while (next);
|
||||
-
|
||||
- dm_task_update_nodes();
|
||||
- dm_task_destroy(task);
|
||||
- task = NULL;
|
||||
-
|
||||
- if (!rc)
|
||||
- return 1;
|
||||
-err:
|
||||
- if (task)
|
||||
- dm_task_destroy(task);
|
||||
- ped_exception_throw (PED_EXCEPTION_WARNING, PED_EXCEPTION_IGNORE,
|
||||
- _("parted was unable to re-read the partition "
|
||||
- "table on %s (%s). This means Linux won't know "
|
||||
- "anything about the modifications you made. "),
|
||||
- dev->path, strerror (errno));
|
||||
- return 0;
|
||||
-}
|
||||
|
||||
static int
|
||||
-_dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
+_dm_add_partition (PedDisk* disk, const PedPartition* part)
|
||||
{
|
||||
char* vol_name = NULL;
|
||||
const char* dev_name = NULL;
|
||||
@@ -2908,9 +2818,8 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
"linear", params);
|
||||
if (!dm_task_set_cookie(task, &cookie, 0))
|
||||
goto err;
|
||||
- if (dm_task_run (task)) {
|
||||
+ if (_dm_task_run_wait (task, cookie)) {
|
||||
//printf("0 %ld linear %s\n", part->geom.length, params);
|
||||
- dm_udev_wait(cookie);
|
||||
dm_task_update_nodes();
|
||||
dm_task_destroy(task);
|
||||
free(params);
|
||||
@@ -2918,8 +2827,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
free(vol_name);
|
||||
return 1;
|
||||
} else {
|
||||
- dm_udev_wait(cookie);
|
||||
- _dm_remove_map_name(vol_name);
|
||||
+ _dm_remove_partition (disk, part->num);
|
||||
}
|
||||
err:
|
||||
dm_task_update_nodes();
|
||||
@@ -2932,30 +2840,259 @@ err:
|
||||
}
|
||||
|
||||
static int
|
||||
-_dm_reread_part_table (PedDisk* disk)
|
||||
+_dm_resize_partition (PedDisk* disk, const PedPartition* part)
|
||||
{
|
||||
- int largest_partnum = ped_disk_get_last_partition_num (disk);
|
||||
- int rc = 1;
|
||||
- int i;
|
||||
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
|
||||
+ char* params = NULL;
|
||||
+ char* vol_name = NULL;
|
||||
+ const char* dev_name = NULL;
|
||||
+ uint32_t cookie = 0;
|
||||
+ int rc = 0;
|
||||
|
||||
- sync();
|
||||
- if (!_dm_remove_parts(disk->dev))
|
||||
- rc = 0;
|
||||
+ /* Get map name from devicemapper */
|
||||
+ struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
|
||||
+ if (!task)
|
||||
+ goto err;
|
||||
|
||||
- for (i = 1; i <= largest_partnum; i++) {
|
||||
- PedPartition* part;
|
||||
+ if (!dm_task_set_major_minor (task, arch_specific->major,
|
||||
+ arch_specific->minor, 0))
|
||||
+ goto err;
|
||||
|
||||
- part = ped_disk_get_partition (disk, i);
|
||||
- if (!part)
|
||||
- continue;
|
||||
+ 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;
|
||||
+
|
||||
+ /* device-mapper uses 512b units, not the device's sector size */
|
||||
+ if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major,
|
||||
+ arch_specific->minor,
|
||||
+ part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT))))
|
||||
+ goto err;
|
||||
+
|
||||
+ task = dm_task_create (DM_DEVICE_RELOAD);
|
||||
+ if (!task)
|
||||
+ goto err;
|
||||
|
||||
- if (!_dm_add_partition (disk, part))
|
||||
- rc = 0;
|
||||
+ dm_task_set_name (task, vol_name);
|
||||
+ /* device-mapper uses 512b units, not the device's sector size */
|
||||
+ dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT),
|
||||
+ "linear", params);
|
||||
+ /* NOTE: DM_DEVICE_RELOAD doesn't generate udev events, so no cookie is needed (it will freeze).
|
||||
+ * DM_DEVICE_RESUME does, so get a cookie and synchronize with udev.
|
||||
+ */
|
||||
+ 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_wait (task, cookie)) {
|
||||
+ rc = 1;
|
||||
+ }
|
||||
}
|
||||
+err:
|
||||
+ dm_task_update_nodes();
|
||||
+ if (task)
|
||||
+ dm_task_destroy (task);
|
||||
+ free (params);
|
||||
+ free (vol_name);
|
||||
return rc;
|
||||
}
|
||||
+
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * Sync the partition table in two step process:
|
||||
+ * 1. Remove all of the partitions from the kernel's tables, but do not attempt
|
||||
+ * removal of any partition for which the corresponding ioctl call fails.
|
||||
+ * 2. Add all the partitions that we hold in disk, throwing a warning
|
||||
+ * if we cannot because step 1 failed to remove it and it is not being
|
||||
+ * added back with the same start and length.
|
||||
+ *
|
||||
+ * To achieve this two step process we must calculate the minimum number of
|
||||
+ * maximum possible partitions between what linux supports and what the label
|
||||
+ * type supports. EX:
|
||||
+ *
|
||||
+ * number=MIN(max_parts_supported_in_linux,max_parts_supported_in_msdos_tables)
|
||||
+ */
|
||||
+static int
|
||||
+_disk_sync_part_table (PedDisk* disk)
|
||||
+{
|
||||
+ PED_ASSERT(disk != NULL);
|
||||
+ PED_ASSERT(disk->dev != NULL);
|
||||
+ 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,
|
||||
+ unsigned long long *length);
|
||||
+
|
||||
+
|
||||
+#ifdef ENABLE_DEVICE_MAPPER
|
||||
+ 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
|
||||
+#endif
|
||||
+ {
|
||||
+ 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;
|
||||
+ }
|
||||
+
|
||||
+ /* 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_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.
|
||||
+ * */
|
||||
+ if (lpn < 1)
|
||||
+ return 0;
|
||||
+ int ret = 0;
|
||||
+ int *ok = calloc (lpn, sizeof *ok);
|
||||
+ if (!ok)
|
||||
+ return 0;
|
||||
+ int *errnums = ped_malloc(sizeof(int) * lpn);
|
||||
+ if (!errnums)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ int i;
|
||||
+ /* remove old partitions first */
|
||||
+ for (i = 1; i <= lpn; i++) {
|
||||
+ PedPartition *part = ped_disk_get_partition (disk, i);
|
||||
+ if (part) {
|
||||
+ unsigned long long length;
|
||||
+ unsigned long long start;
|
||||
+ /* get start and length of existing partition */
|
||||
+ if (get_partition_start_and_length(part,
|
||||
+ &start, &length)
|
||||
+ && start == part->geom.start
|
||||
+ && (length == part->geom.length
|
||||
+ || (resize_partition && part->num < lpn2)))
|
||||
+ {
|
||||
+ /* partition is unchanged, or will be resized so nothing to do */
|
||||
+ ok[i - 1] = 1;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ /* Attempt to remove the partition, retrying for
|
||||
+ up to max_sleep_seconds upon any failure due to EBUSY. */
|
||||
+ unsigned int sleep_microseconds = 10000;
|
||||
+ unsigned int max_sleep_seconds = 1;
|
||||
+ unsigned int n_sleep = (max_sleep_seconds
|
||||
+ * 1000000 / sleep_microseconds);
|
||||
+ do {
|
||||
+ ok[i - 1] = remove_partition (disk, i);
|
||||
+ errnums[i - 1] = errno;
|
||||
+ if (ok[i - 1] || errnums[i - 1] != EBUSY)
|
||||
+ break;
|
||||
+ usleep (sleep_microseconds);
|
||||
+ } while (n_sleep--);
|
||||
+ if (!ok[i - 1] && errnums[i - 1] == ENXIO)
|
||||
+ ok[i - 1] = 1; /* it already doesn't exist */
|
||||
+ }
|
||||
+ lpn = lpn2;
|
||||
+ /* don't actually add partitions for loop */
|
||||
+ if (strcmp (disk->type->name, "loop") == 0)
|
||||
+ lpn = 0;
|
||||
+ for (i = 1; i <= lpn; i++) {
|
||||
+ PedPartition *part = ped_disk_get_partition (disk, i);
|
||||
+ if (!part)
|
||||
+ continue;
|
||||
+ unsigned long long length;
|
||||
+ unsigned long long start;
|
||||
+ /* get start and length of existing partition */
|
||||
+ if (get_partition_start_and_length(part,
|
||||
+ &start, &length)
|
||||
+ && 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)) {
|
||||
+ ok[i - 1] = 0;
|
||||
+ errnums[i - 1] = errno;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ 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 (bad_part_list == NULL)
|
||||
+ 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, "
|
||||
+ "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);
|
||||
+ }
|
||||
+ cleanup:
|
||||
+ free (errnums);
|
||||
+ free (ok);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
_have_blkpg ()
|
||||
{
|
||||
@@ -2973,10 +3110,6 @@ _have_blkpg ()
|
||||
static int
|
||||
linux_disk_commit (PedDisk* disk)
|
||||
{
|
||||
-#ifdef ENABLE_DEVICE_MAPPER
|
||||
- if (disk->dev->type == PED_DEVICE_DM)
|
||||
- return _dm_reread_part_table (disk);
|
||||
-#endif
|
||||
if (disk->dev->type != PED_DEVICE_FILE) {
|
||||
|
||||
/* We now require BLKPG support. If this assertion fails,
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
From f1711f8bd420315a01b2df6d4339646c96169558 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 47/48] tests: excersise resize command
|
||||
|
||||
a lot of TODOs
|
||||
|
||||
(cherry picked from commit 33fd692cb14045fdc13306cd57cfe2040328daa8)
|
||||
---
|
||||
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 1cf859c..29fa280 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -42,6 +42,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
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
From 109a5a35d8482f43c7d779df3b7d10bf16d5f31b 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 48/48] 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.
|
||||
|
||||
(cherry picked from commit 21c58e17c473ea8ef31a18d03348eb2381c0f36c)
|
||||
|
||||
Resolves: rhbz#1423357
|
||||
---
|
||||
NEWS | 1 +
|
||||
parted/parted.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 77 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index d1a6f58..62d6381 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -3,6 +3,7 @@ GNU parted NEWS -*- outline -*-
|
||||
* Noteworthy changes in release 3.1-29 (2017-04-11) [RHEL7.4]
|
||||
|
||||
Parted now recognizes NVMe devices
|
||||
+ Add resizepart command to resize a partition
|
||||
|
||||
* Noteworthy changes in release 3.1-18 (2014-08-12) [RHEL7.1]
|
||||
|
||||
diff --git a/parted/parted.c b/parted/parted.c
|
||||
index d4a397b..d64b0b8 100644
|
||||
--- a/parted/parted.c
|
||||
+++ b/parted/parted.c
|
||||
@@ -152,6 +152,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");
|
||||
@@ -435,6 +438,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)
|
||||
{
|
||||
@@ -1478,7 +1496,7 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
-do_resize (PedDevice **dev, PedDisk** diskp)
|
||||
+do_resize (PedDevice **dev)
|
||||
{
|
||||
ped_exception_throw (
|
||||
PED_EXCEPTION_ERROR,
|
||||
@@ -1488,6 +1506,63 @@ do_resize (PedDevice **dev, PedDisk** diskp)
|
||||
}
|
||||
|
||||
static int
|
||||
+do_resizepart (PedDevice** dev)
|
||||
+{
|
||||
+ PedDisk *disk;
|
||||
+ PedPartition *part = NULL;
|
||||
+ PedSector start, end, oldend;
|
||||
+ PedGeometry *range_end = NULL;
|
||||
+ PedConstraint* constraint;
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ disk = ped_disk_new (*dev);
|
||||
+ 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* disk;
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
From e3f74af78b774b235123b9d5fa40fead3b003bb2 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 20 Jan 2012 15:31:43 -0800
|
||||
Subject: [PATCH] libparted: use dm_udev_wait (#698121)
|
||||
|
||||
This applies Peter Rajnoha's patch to use dm_udev_wait to
|
||||
synchronize with udev.
|
||||
|
||||
This requires libdevmapper v1.02.39 and higher.
|
||||
|
||||
Patch is from:
|
||||
https://lists.gnu.org/archive/html/bug-parted/2010-09/msg00007.html
|
||||
|
||||
Resolves: rhbz#698121
|
||||
---
|
||||
libparted/arch/linux.c | 16 +++++++++++++++-
|
||||
1 files changed, 15 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index e2c4139..1fcbcad 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -1319,6 +1319,10 @@ linux_new (const char* path)
|
||||
dev->dirty = 0;
|
||||
dev->boot_dirty = 0;
|
||||
|
||||
+#ifdef ENABLE_DEVICE_MAPPER
|
||||
+ dm_udev_set_sync_support(1);
|
||||
+#endif
|
||||
+
|
||||
if (!_device_probe_type (dev))
|
||||
goto error_free_arch_specific;
|
||||
|
||||
@@ -2676,16 +2680,21 @@ static int
|
||||
_dm_remove_map_name(char *name)
|
||||
{
|
||||
struct dm_task *task = NULL;
|
||||
- int rc;
|
||||
+ int rc = 0;
|
||||
+ uint32_t cookie = 0;
|
||||
|
||||
task = dm_task_create(DM_DEVICE_REMOVE);
|
||||
if (!task)
|
||||
return 1;
|
||||
|
||||
dm_task_set_name (task, name);
|
||||
+ if (!dm_task_set_cookie(task, &cookie, 0))
|
||||
+ goto err;
|
||||
|
||||
rc = dm_task_run(task);
|
||||
+ dm_udev_wait(cookie);
|
||||
dm_task_update_nodes();
|
||||
+err:
|
||||
dm_task_destroy(task);
|
||||
if (!rc)
|
||||
return 1;
|
||||
@@ -2796,6 +2805,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
const char* dev_name = NULL;
|
||||
char* params = NULL;
|
||||
LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
|
||||
+ uint32_t cookie = 0;
|
||||
|
||||
/* Get map name from devicemapper */
|
||||
struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
|
||||
@@ -2832,14 +2842,18 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
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)) {
|
||||
//printf("0 %ld linear %s\n", part->geom.length, params);
|
||||
+ dm_udev_wait(cookie);
|
||||
dm_task_update_nodes();
|
||||
dm_task_destroy(task);
|
||||
free(params);
|
||||
free(vol_name);
|
||||
return 1;
|
||||
} else {
|
||||
+ dm_udev_wait(cookie);
|
||||
_dm_remove_map_name(vol_name);
|
||||
}
|
||||
err:
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 43663f1226da0a6284b5f52f6e2f741473c077b6 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Fri, 3 Feb 2012 13:03:27 -0800
|
||||
Subject: [PATCH] libparted: copy pmbr_boot when duplicating GPT disk
|
||||
|
||||
* libparted/labels/gpt.c (gpt_duplicate): copy pmbr_boot flag
|
||||
---
|
||||
libparted/labels/gpt.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
||||
index bad9ed4..0f07250 100644
|
||||
--- a/libparted/labels/gpt.c
|
||||
+++ b/libparted/labels/gpt.c
|
||||
@@ -562,6 +562,7 @@ gpt_duplicate (const PedDisk *disk)
|
||||
old_disk_data->data_area.length);
|
||||
new_disk_data->entry_count = old_disk_data->entry_count;
|
||||
new_disk_data->uuid = old_disk_data->uuid;
|
||||
+ new_disk_data->pmbr_boot = old_disk_data->pmbr_boot;
|
||||
return new_disk;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
Subject: [PATCH] libparted: Avoid dasd as default disk type while probe
|
||||
|
||||
From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
|
||||
This patch avoids setting 'dasd' as a default disk type for
|
||||
'disk image file' at the time of probe.
|
||||
|
||||
Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
---
|
||||
include/parted/fdasd.h | 1 +
|
||||
libparted/labels/fdasd.c | 6 +++++-
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/parted/fdasd.h
|
||||
+++ b/include/parted/fdasd.h
|
||||
@@ -261,6 +261,7 @@ typedef struct fdasd_anchor {
|
||||
struct fdasd_hd_geometry geo;
|
||||
unsigned int label_block;
|
||||
unsigned int FBA_layout;
|
||||
+ bool is_file;
|
||||
} fdasd_anchor_t;
|
||||
|
||||
enum offset {lower, upper};
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -301,6 +301,7 @@ fdasd_initialize_anchor (fdasd_anchor_t
|
||||
}
|
||||
anc->hw_cylinders = 0;
|
||||
anc->formatted_cylinders = 0;
|
||||
+ anc->is_file = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -892,7 +893,7 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
||||
/* Some times LDL formatted disks does not
|
||||
contain any volume label */
|
||||
return 1;
|
||||
- } else {
|
||||
+ } else if (! anc->is_file) {
|
||||
/* didn't find VOL1 volume label */
|
||||
anc->formatted_cylinders = anc->hw_cylinders;
|
||||
anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||
@@ -976,6 +977,7 @@ fdasd_get_geometry (const PedDevice *dev
|
||||
dasd_info.FBA_layout = 0;
|
||||
anc->hw_cylinders = ((st.st_size / blksize) / anc->geo.sectors) /
|
||||
anc->geo.heads;
|
||||
+ anc->is_file = 1;
|
||||
} else {
|
||||
if (ioctl(f, HDIO_GETGEO, &anc->geo) != 0)
|
||||
fdasd_error(anc, unable_to_ioctl,
|
||||
@@ -997,6 +999,8 @@ fdasd_get_geometry (const PedDevice *dev
|
||||
anc->hw_cylinders = characteristics->long_no_cyl;
|
||||
else
|
||||
anc->hw_cylinders = characteristics->no_cyl;
|
||||
+
|
||||
+ anc->is_file = 0;
|
||||
}
|
||||
|
||||
anc->dev_type = dasd_info.dev_type;
|
|
@ -0,0 +1,54 @@
|
|||
From 1190dc5b214ce6ba4cbeadbdd599ab3ebb2cbb13 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 8 Jun 2012 14:42:45 -0700
|
||||
Subject: [PATCH] libparted: Fix endian error with FirstUsableLBA (#829960)
|
||||
|
||||
On big-endial systems (eg. ppc64) this would cause parted to
|
||||
crash.
|
||||
|
||||
* NEWS: add new bugfix
|
||||
* libparted/labels/gpt.c (gpt_get_max_supported_partition_count):
|
||||
fix endian issues with pth->FirstUsableLBA
|
||||
---
|
||||
NEWS | 3 ++-
|
||||
libparted/labels/gpt.c | 4 ++--
|
||||
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index b0a0657..596ab37 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,9 +1,10 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
-* Noteworthy changes in release 3.1-2 (2012-03-21) [Fedora]
|
||||
+* Noteworthy changes in release 3.1-4 (2012-06-08) [Fedora]
|
||||
|
||||
** Bug Fixes
|
||||
|
||||
+ libparted: Don't crash on big-endian systems when using GPT
|
||||
libparted: Treat disks without a PMBR as msdos labeled disks
|
||||
even if they have GPT partition tables.
|
||||
|
||||
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
||||
index ab2145e..6ca33c8 100644
|
||||
--- a/libparted/labels/gpt.c
|
||||
+++ b/libparted/labels/gpt.c
|
||||
@@ -1787,12 +1787,12 @@ gpt_get_max_supported_partition_count (const PedDisk *disk, int *max_n)
|
||||
|
||||
if (!_header_is_valid (disk, pth, 1))
|
||||
{
|
||||
- pth->FirstUsableLBA = 34;
|
||||
+ pth->FirstUsableLBA = PED_CPU_TO_LE64 (34);
|
||||
pth->SizeOfPartitionEntry
|
||||
= PED_CPU_TO_LE32 (sizeof (GuidPartitionEntry_t));
|
||||
}
|
||||
|
||||
- *max_n = (disk->dev->sector_size * (pth->FirstUsableLBA - 2)
|
||||
+ *max_n = (disk->dev->sector_size * (PED_LE64_TO_CPU (pth->FirstUsableLBA)-2)
|
||||
/ PED_LE32_TO_CPU (pth->SizeOfPartitionEntry));
|
||||
pth_free (pth);
|
||||
return true;
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
From dc213bf52d640c0219541afb002f71b49a888c7f Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 4 Sep 2013 11:45:44 -0700
|
||||
Subject: [PATCH] libparted: Flush parent device on open (#962611)
|
||||
|
||||
Parted probes for filesystems using geometry offsets into the parent
|
||||
device, not the partition device itself. This means it may get stale
|
||||
information if a partition has just been formatted.
|
||||
|
||||
On kernels before 2.6 this will also flush all partition devices. On 2.6
|
||||
and newer kernels it will only flush the parent device.
|
||||
|
||||
* libparted/arch/linux.c (linux_open): Always call _flush_cache
|
||||
---
|
||||
libparted/arch/linux.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 2c410a0..4af0d5c 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -1579,9 +1579,7 @@ retry:
|
||||
dev->read_only = 0;
|
||||
}
|
||||
|
||||
- /* With kernels < 2.6 flush cache for cache coherence issues */
|
||||
- if (!_have_kern26())
|
||||
- _flush_cache (dev);
|
||||
+ _flush_cache (dev);
|
||||
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
From 242217de0268d6036a6e6a3f196abd79bfcb98b8 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 27 Aug 2013 17:27:07 -0700
|
||||
Subject: [PATCH 1/2] libparted: Recognize btrfs filesystem
|
||||
|
||||
Add support for showing 'btrfs' in the 'file system' column. Also
|
||||
allows the used to enter btrfs as the fs type. It doesn't really do
|
||||
anything -- just sets the partition type to linux.
|
||||
|
||||
* NEWS (Changes in behavior): Mention it.
|
||||
* doc/parted.texti: Document btrfs fs.
|
||||
* (libparted/fs/Makefile.am): Add btrfs.c
|
||||
* (libparted/fs/btrfs/btrfs.c): Probe for btrfs
|
||||
* (libparted/libparted.c): Register btrfs
|
||||
---
|
||||
NEWS | 3 ++
|
||||
doc/parted.texi | 1 +
|
||||
libparted/fs/Makefile.am | 1 +
|
||||
libparted/fs/btrfs/btrfs.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
libparted/libparted.c | 4 +++
|
||||
5 files changed, 87 insertions(+)
|
||||
create mode 100644 libparted/fs/btrfs/btrfs.c
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 596ab37..e2d01ed 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -84,6 +84,9 @@ GNU parted NEWS -*- outline -*-
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
+ Added support for recognizing btrfs filesystem. This simply displays
|
||||
+ btrfs in the 'file system' column of the parted output.
|
||||
+
|
||||
Floppy drives are no longer scanned on linux: they cannot be partitioned
|
||||
anyhow, and some users have a misconfigured BIOS that claims to have a
|
||||
floppy when they don't, and scanning gets hung up.
|
||||
diff --git a/doc/parted.texi b/doc/parted.texi
|
||||
index 6561d0e..2b1ce64 100644
|
||||
--- a/doc/parted.texi
|
||||
+++ b/doc/parted.texi
|
||||
@@ -575,6 +575,7 @@ partition table.
|
||||
@item NTFS
|
||||
@item reiserfs
|
||||
@item ufs
|
||||
+@item btrfs
|
||||
@end itemize
|
||||
|
||||
Example:
|
||||
diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
|
||||
index 8d48ea1..a8fb313 100644
|
||||
--- a/libparted/fs/Makefile.am
|
||||
+++ b/libparted/fs/Makefile.am
|
||||
@@ -25,6 +25,7 @@ libfs_la_SOURCES = \
|
||||
amiga/asfs.c \
|
||||
amiga/asfs.h \
|
||||
amiga/a-interface.c \
|
||||
+ btrfs/btrfs.c \
|
||||
ext2/ext2.h \
|
||||
ext2/ext2_fs.h \
|
||||
ext2/interface.c \
|
||||
diff --git a/libparted/fs/btrfs/btrfs.c b/libparted/fs/btrfs/btrfs.c
|
||||
new file mode 100644
|
||||
index 0000000..e5abed6
|
||||
--- /dev/null
|
||||
+++ b/libparted/fs/btrfs/btrfs.c
|
||||
@@ -0,0 +1,78 @@
|
||||
+/*
|
||||
+ libparted - a library for manipulating disk partitions
|
||||
+ Copyright (C) 2013 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/>.
|
||||
+*/
|
||||
+
|
||||
+#include <config.h>
|
||||
+
|
||||
+#include <parted/parted.h>
|
||||
+#include <parted/endian.h>
|
||||
+
|
||||
+/* Located 64k inside the partition (start of the first btrfs superblock) */
|
||||
+#define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */
|
||||
+#define BTRFS_CSUM_SIZE 32
|
||||
+#define BTRFS_FSID_SIZE 16
|
||||
+
|
||||
+
|
||||
+static PedGeometry*
|
||||
+btrfs_probe (PedGeometry* geom)
|
||||
+{
|
||||
+ union {
|
||||
+ struct {
|
||||
+ /* Just enough of the btrfs_super_block to get the magic */
|
||||
+ uint8_t csum[BTRFS_CSUM_SIZE];
|
||||
+ uint8_t fsid[BTRFS_FSID_SIZE];
|
||||
+ uint64_t bytenr;
|
||||
+ uint64_t flags;
|
||||
+ uint64_t magic;
|
||||
+ } sb;
|
||||
+ int8_t sector[8192];
|
||||
+ } buf;
|
||||
+ PedSector offset = (64*1024)/geom->dev->sector_size;
|
||||
+
|
||||
+ if (geom->length < offset+1)
|
||||
+ return 0;
|
||||
+ if (!ped_geometry_read (geom, &buf, offset, 1))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (PED_LE64_TO_CPU(buf.sb.magic) == BTRFS_MAGIC) {
|
||||
+ return ped_geometry_new (geom->dev, geom->start, geom->length);
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static PedFileSystemOps btrfs_ops = {
|
||||
+ probe: btrfs_probe,
|
||||
+};
|
||||
+
|
||||
+static PedFileSystemType btrfs_type = {
|
||||
+ next: NULL,
|
||||
+ ops: &btrfs_ops,
|
||||
+ name: "btrfs",
|
||||
+ block_sizes: ((int[2]){512, 0})
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+ped_file_system_btrfs_init ()
|
||||
+{
|
||||
+ ped_file_system_type_register (&btrfs_type);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+ped_file_system_btrfs_done ()
|
||||
+{
|
||||
+ ped_file_system_type_unregister (&btrfs_type);
|
||||
+}
|
||||
diff --git a/libparted/libparted.c b/libparted/libparted.c
|
||||
index a6d86f0..3c3b337 100644
|
||||
--- a/libparted/libparted.c
|
||||
+++ b/libparted/libparted.c
|
||||
@@ -109,6 +109,7 @@ extern void ped_file_system_hfs_init (void);
|
||||
extern void ped_file_system_fat_init (void);
|
||||
extern void ped_file_system_ext2_init (void);
|
||||
extern void ped_file_system_nilfs2_init (void);
|
||||
+extern void ped_file_system_btrfs_init (void);
|
||||
|
||||
static void
|
||||
init_file_system_types ()
|
||||
@@ -124,6 +125,7 @@ init_file_system_types ()
|
||||
ped_file_system_fat_init ();
|
||||
ped_file_system_ext2_init ();
|
||||
ped_file_system_nilfs2_init ();
|
||||
+ ped_file_system_btrfs_init ();
|
||||
}
|
||||
|
||||
extern void ped_disk_aix_done ();
|
||||
@@ -186,6 +188,7 @@ extern void ped_file_system_reiserfs_done (void);
|
||||
extern void ped_file_system_ufs_done (void);
|
||||
extern void ped_file_system_xfs_done (void);
|
||||
extern void ped_file_system_amiga_done (void);
|
||||
+extern void ped_file_system_btrfs_done (void);
|
||||
|
||||
static void
|
||||
done_file_system_types ()
|
||||
@@ -201,6 +204,7 @@ done_file_system_types ()
|
||||
ped_file_system_ufs_done ();
|
||||
ped_file_system_xfs_done ();
|
||||
ped_file_system_amiga_done ();
|
||||
+ ped_file_system_btrfs_done ();
|
||||
}
|
||||
|
||||
static void _done() __attribute__ ((destructor));
|
||||
--
|
||||
1.8.3.1
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,187 @@
|
|||
Subject: [PATCH] libparted: add support for implicit FBA DASD partitions
|
||||
|
||||
From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
|
||||
Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
|
||||
which are layed out as a sequence of 512-byte sectors. In contrast
|
||||
to ECKD DASDs, these disks do not require formatting and resemble
|
||||
the LBA layout of non-mainframe disks. Despite this resemblance,
|
||||
the Linux kernel applies special handling during partition detection
|
||||
for FBA DASDs, resulting in a single, immutable partition being
|
||||
reported.
|
||||
|
||||
While actual FBA DASD hardware is no longer available, the z/VM
|
||||
hypervisor can simulate FBA DASD disks, backed by either ECKD or
|
||||
SCSI devices.
|
||||
|
||||
This patch adds support for recognizing FBA DASD partitions
|
||||
to parted.
|
||||
|
||||
Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
|
||||
|
||||
---
|
||||
include/parted/fdasd.h | 2 +
|
||||
libparted/labels/dasd.c | 63 ++++++++++++++++++++++++++++++++++++++++-------
|
||||
libparted/labels/fdasd.c | 5 +++
|
||||
3 files changed, 61 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/include/parted/fdasd.h
|
||||
+++ b/include/parted/fdasd.h
|
||||
@@ -194,6 +194,8 @@ typedef struct fdasd_anchor {
|
||||
volume_label_t *vlabel;
|
||||
config_data_t confdata[USABLE_PARTITIONS];
|
||||
struct fdasd_hd_geometry geo;
|
||||
+ unsigned int label_block;
|
||||
+ unsigned int FBA_layout;
|
||||
} fdasd_anchor_t;
|
||||
|
||||
enum offset {lower, upper};
|
||||
--- a/libparted/labels/dasd.c
|
||||
+++ b/libparted/labels/dasd.c
|
||||
@@ -71,6 +71,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
unsigned int format_type;
|
||||
+ unsigned int label_block;
|
||||
volume_label_t vlabel;
|
||||
} DasdDiskSpecific;
|
||||
|
||||
@@ -151,6 +152,7 @@ dasd_alloc (const PedDevice* dev)
|
||||
|
||||
/* CDL format, newer */
|
||||
disk_specific->format_type = 2;
|
||||
+ disk_specific->label_block = 2;
|
||||
|
||||
/* Setup volume label (for fresh disks) */
|
||||
snprintf(volser, sizeof(volser), "0X%04X", arch_specific->devno);
|
||||
@@ -226,7 +228,9 @@ dasd_probe (const PedDevice *dev)
|
||||
|
||||
fdasd_check_api_version(&anchor, arch_specific->fd);
|
||||
|
||||
- if (fdasd_check_volume(&anchor, arch_specific->fd))
|
||||
+ /* Labels are required on CDL formatted DASDs. */
|
||||
+ if (fdasd_check_volume(&anchor, arch_specific->fd) &&
|
||||
+ anchor.FBA_layout == 0)
|
||||
goto error_cleanup;
|
||||
|
||||
fdasd_cleanup(&anchor);
|
||||
@@ -273,17 +277,53 @@ dasd_read (PedDisk* disk)
|
||||
fdasd_initialize_anchor(&anchor);
|
||||
|
||||
fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd);
|
||||
+ disk_specific->label_block = anchor.label_block;
|
||||
+
|
||||
+ if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE)
|
||||
+ anchor.big_disk++;
|
||||
|
||||
/* check dasd for labels and vtoc */
|
||||
- if (fdasd_check_volume(&anchor, arch_specific->fd))
|
||||
- goto error_close_dev;
|
||||
+ if (fdasd_check_volume(&anchor, arch_specific->fd)) {
|
||||
+ DasdPartitionData* dasd_data;
|
||||
+
|
||||
+ /* Kernel partitioning code will report 'implicit' partitions
|
||||
+ * for non-CDL format DASDs even when there is no
|
||||
+ * label/VTOC. */
|
||||
+ if (anchor.FBA_layout == 0)
|
||||
+ goto error_close_dev;
|
||||
+
|
||||
+ disk_specific->format_type = 1;
|
||||
+
|
||||
+ /* Register implicit partition */
|
||||
+ ped_disk_delete_all (disk);
|
||||
+
|
||||
+ start = (PedSector) arch_specific->real_sector_size /
|
||||
+ (PedSector) disk->dev->sector_size *
|
||||
+ (PedSector) (anchor.label_block + 1);
|
||||
+ end = disk->dev->length - 1;
|
||||
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
|
||||
+ start, end);
|
||||
+ if (!part)
|
||||
+ goto error_close_dev;
|
||||
+
|
||||
+ part->num = 1;
|
||||
+ part->fs_type = ped_file_system_probe (&part->geom);
|
||||
+ dasd_data = part->disk_specific;
|
||||
+ dasd_data->raid = 0;
|
||||
+ dasd_data->lvm = 0;
|
||||
+ dasd_data->type = 0;
|
||||
+
|
||||
+ if (!ped_disk_add_partition (disk, part, NULL))
|
||||
+ goto error_close_dev;
|
||||
+
|
||||
+ fdasd_cleanup(&anchor);
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
|
||||
/* Save volume label (read by fdasd_check_volume) for writing */
|
||||
memcpy(&disk_specific->vlabel, anchor.vlabel, sizeof(volume_label_t));
|
||||
|
||||
- if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE)
|
||||
- anchor.big_disk++;
|
||||
-
|
||||
ped_disk_delete_all (disk);
|
||||
|
||||
bool is_ldl = strncmp(anchor.vlabel->volkey,
|
||||
@@ -348,7 +388,7 @@ dasd_read (PedDisk* disk)
|
||||
/ (long long) disk->dev->sector_size
|
||||
* (long long) (cms_ptr->block_count - 1) - 1;
|
||||
|
||||
- part = ped_partition_new (disk, PED_PARTITION_PROTECTED, NULL, start, end);
|
||||
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, start, end);
|
||||
if (!part)
|
||||
goto error_close_dev;
|
||||
|
||||
@@ -923,7 +963,12 @@ dasd_alloc_metadata (PedDisk* disk)
|
||||
the start of the first partition */
|
||||
if (disk_specific->format_type == 1) {
|
||||
part = ped_disk_get_partition(disk, 1);
|
||||
- vtoc_end = part->geom.start - 1;
|
||||
+ if (part)
|
||||
+ vtoc_end = part->geom.start - 1;
|
||||
+ else
|
||||
+ vtoc_end = (PedSector) arch_specific->real_sector_size /
|
||||
+ (PedSector) disk->dev->sector_size *
|
||||
+ (PedSector) disk_specific->label_block;
|
||||
}
|
||||
else {
|
||||
if (disk->dev->type == PED_DEVICE_FILE)
|
||||
@@ -943,7 +988,7 @@ dasd_alloc_metadata (PedDisk* disk)
|
||||
goto error;
|
||||
}
|
||||
|
||||
- if (disk_specific->format_type == 1) {
|
||||
+ if (disk_specific->format_type == 1 && part) {
|
||||
/*
|
||||
For LDL or CMS there may be trailing metadata as well.
|
||||
For example: the last block of a CMS reserved file,
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -721,6 +721,7 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
||||
unsigned long b = -1;
|
||||
char str[LINE_LENGTH];
|
||||
|
||||
+ memset(v, 0, sizeof(volume_label_t));
|
||||
vtoc_read_volume_label (fd, anc->label_pos, v);
|
||||
|
||||
if (strncmp(v->vollbl, vtoc_ebcdic_enc ("VOL1", str, 4), 4) == 0) {
|
||||
@@ -800,6 +801,8 @@ fdasd_get_geometry (const PedDevice *dev
|
||||
dasd_info.dev_type = 13200;
|
||||
dasd_info.label_block = 2;
|
||||
dasd_info.devno = 513;
|
||||
+ dasd_info.label_block = 2;
|
||||
+ dasd_info.FBA_layout = 0;
|
||||
} else {
|
||||
if (ioctl(f, HDIO_GETGEO, &anc->geo) != 0)
|
||||
fdasd_error(anc, unable_to_ioctl,
|
||||
@@ -820,6 +823,8 @@ fdasd_get_geometry (const PedDevice *dev
|
||||
anc->label_pos = dasd_info.label_block * blksize;
|
||||
anc->devno = dasd_info.devno;
|
||||
anc->fspace_trk = anc->geo.cylinders * anc->geo.heads - FIRST_USABLE_TRK;
|
||||
+ anc->label_block = dasd_info.label_block;
|
||||
+ anc->FBA_layout = dasd_info.FBA_layout;
|
||||
}
|
||||
|
||||
/*
|
|
@ -0,0 +1,91 @@
|
|||
From 9343e79fee796a142a4bd12674aa3fdb56526eb6 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 20 Mar 2012 16:08:25 -0700
|
||||
Subject: [PATCH 1/2] libparted: check PMBR before GPT partition table
|
||||
(#805272)
|
||||
|
||||
The UEFI spec requires that a valid GPT disk label have a PMBR
|
||||
partition. This moves the PMBR check to before the GPT check,
|
||||
exiting gpt_probe with a 0 if the PMBR is not valid.
|
||||
|
||||
The previous behavior would cause problems in the following situation:
|
||||
1. format a disk as GPT
|
||||
2. re-format it as MSDOS using tools that don't understand GPT
|
||||
|
||||
Subsequent operations with parted would then complain about the invlid
|
||||
PMBR, but would not allow the disk to be used as a msdos disk. This
|
||||
change causes parted to tread the disk as a msdos disk.
|
||||
|
||||
* libparted/labels/gpt.c (gpt_probe): Move _pmbr_is_valid test
|
||||
---
|
||||
libparted/labels/gpt.c | 44 +++++++++++++-------------------------------
|
||||
1 files changed, 13 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
||||
index 84bdc12..e57b3a2 100644
|
||||
--- a/libparted/labels/gpt.c
|
||||
+++ b/libparted/labels/gpt.c
|
||||
@@ -465,6 +465,17 @@ gpt_probe (const PedDevice *dev)
|
||||
if (dev->length <= 1)
|
||||
return 0;
|
||||
|
||||
+ void *label;
|
||||
+ if (!ptt_read_sector (dev, 0, &label))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!_pmbr_is_valid ((const LegacyMBR_t *) label))
|
||||
+ {
|
||||
+ free (label);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ free (label);
|
||||
+
|
||||
void *pth_raw = ped_malloc (pth_get_size (dev));
|
||||
if (ped_device_read (dev, pth_raw, 1, GPT_HEADER_SECTORS)
|
||||
|| ped_device_read (dev, pth_raw, dev->length - 1, GPT_HEADER_SECTORS))
|
||||
@@ -472,40 +483,11 @@ gpt_probe (const PedDevice *dev)
|
||||
gpt = pth_new_from_raw (dev, pth_raw);
|
||||
if (gpt->Signature == PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE))
|
||||
gpt_sig_found = 1;
|
||||
+ pth_free (gpt);
|
||||
}
|
||||
-
|
||||
free (pth_raw);
|
||||
|
||||
- pth_free (gpt);
|
||||
-
|
||||
- if (!gpt_sig_found)
|
||||
- return 0;
|
||||
-
|
||||
- void *label;
|
||||
- if (!ptt_read_sector (dev, 0, &label))
|
||||
- return 0;
|
||||
-
|
||||
- int ok = 1;
|
||||
- if (!_pmbr_is_valid ((const LegacyMBR_t *) label))
|
||||
- {
|
||||
- int ex_status = ped_exception_throw
|
||||
- (PED_EXCEPTION_WARNING,
|
||||
- PED_EXCEPTION_YES_NO,
|
||||
- _("%s contains GPT signatures, indicating that it has "
|
||||
- "a GPT table. However, it does not have a valid "
|
||||
- "fake msdos partition table, as it should. Perhaps "
|
||||
- "it was corrupted -- possibly by a program that "
|
||||
- "doesn't understand GPT partition tables. Or "
|
||||
- "perhaps you deleted the GPT table, and are now "
|
||||
- "using an msdos partition table. Is this a GPT "
|
||||
- "partition table?"),
|
||||
- dev->path);
|
||||
- if (ex_status == PED_EXCEPTION_NO)
|
||||
- ok = 0;
|
||||
- }
|
||||
-
|
||||
- free (label);
|
||||
- return ok;
|
||||
+ return gpt_sig_found;
|
||||
}
|
||||
|
||||
static PedDisk *
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
From c17f0c2e68960969789427eca20ddab1b8e4fcc6 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Thu, 1 Nov 2012 16:22:42 -0700
|
||||
Subject: [PATCH] libparted: don't canonicalize /dev/md/ paths (#872361)
|
||||
|
||||
This is the same issue we have with /dev/mapper/ paths that was fixed in
|
||||
commit c1eb485b9fd8919e18f192d678bc52b0488e6ee0. When libparted
|
||||
is used to setup the device the symlink should be used to reference it,
|
||||
not the backing device name which could change.
|
||||
|
||||
* libparted/device.c (ped_device_get): Don't canonicalize names
|
||||
that start with "/dev/md/".
|
||||
---
|
||||
libparted/device.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libparted/device.c b/libparted/device.c
|
||||
index 738b320..cdcc117 100644
|
||||
--- a/libparted/device.c
|
||||
+++ b/libparted/device.c
|
||||
@@ -152,8 +152,11 @@ ped_device_get (const char* path)
|
||||
char* normal_path = NULL;
|
||||
|
||||
PED_ASSERT (path != NULL);
|
||||
- /* Don't canonicalize /dev/mapper paths, see tests/symlink.c */
|
||||
- if (strncmp (path, "/dev/mapper/", 12))
|
||||
+ /* Don't canonicalize /dev/mapper or /dev/md/ paths, see
|
||||
+ tests/symlink.c
|
||||
+ */
|
||||
+ if (strncmp (path, "/dev/mapper/", 12) &&
|
||||
+ strncmp (path, "/dev/md/", 8))
|
||||
normal_path = canonicalize_file_name (path);
|
||||
if (!normal_path)
|
||||
/* Well, maybe it is just that the file does not exist.
|
||||
--
|
||||
1.7.11.7
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
Subject: [PATCH] libparted: mklabel to support EAV DASD
|
||||
|
||||
From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
|
||||
Extended Address Volume (EAV) DASDs are ECKD DASDs with more than
|
||||
65520 cylinders. This patch adds support for mklabel to properly
|
||||
handle unformatted EAV DASDs.
|
||||
|
||||
Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
---
|
||||
include/parted/fdasd.h | 1
|
||||
libparted/labels/fdasd.c | 92 +++++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 90 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/include/parted/fdasd.h
|
||||
+++ b/include/parted/fdasd.h
|
||||
@@ -288,7 +288,6 @@ void fdasd_get_geometry (const PedDevice
|
||||
void fdasd_check_api_version (fdasd_anchor_t *anc, int fd);
|
||||
int fdasd_check_volume (fdasd_anchor_t *anc, int fd);
|
||||
int fdasd_write_labels (fdasd_anchor_t *anc, int fd);
|
||||
-int fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc);
|
||||
void fdasd_recreate_vtoc(fdasd_anchor_t *anc);
|
||||
partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
|
||||
unsigned int start, unsigned int stop);
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -581,6 +581,22 @@ fdasd_recreate_vtoc (fdasd_anchor_t *anc
|
||||
anc->vtoc_changed++;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * initialize the VOL1 volume label
|
||||
+ */
|
||||
+static void
|
||||
+fdasd_init_volume_label(fdasd_anchor_t *anc, int fd)
|
||||
+{
|
||||
+ volume_label_t *vlabel = anc->vlabel;
|
||||
+
|
||||
+ vtoc_volume_label_init(vlabel);
|
||||
+ vtoc_volume_label_set_key(vlabel, "VOL1");
|
||||
+ vtoc_volume_label_set_label(vlabel, "VOL1");
|
||||
+
|
||||
+ vtoc_set_cchhb(&vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* sets some important partition data
|
||||
* (like used, start_trk, end_trk, len_trk)
|
||||
@@ -769,6 +785,52 @@ fdasd_process_valid_vtoc (fdasd_anchor_t
|
||||
fdasd_update_partition_info (anc);
|
||||
}
|
||||
|
||||
+static void
|
||||
+fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc)
|
||||
+{
|
||||
+ PDEBUG
|
||||
+ anc->formatted_cylinders = anc->hw_cylinders;
|
||||
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||
+ - FIRST_USABLE_TRK;
|
||||
+ vtoc_init_format4_label(anc->f4, USABLE_PARTITIONS,
|
||||
+ anc->geo.cylinders, anc->formatted_cylinders,
|
||||
+ anc->geo.heads, anc->geo.sectors,
|
||||
+ anc->blksize, anc->dev_type);
|
||||
+
|
||||
+ vtoc_init_format5_label(anc->f5);
|
||||
+ vtoc_init_format7_label(anc->f7);
|
||||
+
|
||||
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose,
|
||||
+ FIRST_USABLE_TRK,
|
||||
+ anc->formatted_cylinders * anc->geo.heads - 1,
|
||||
+ anc->formatted_cylinders, anc->geo.heads);
|
||||
+
|
||||
+ vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * we have a invalid FMT4 DSCB and therefore we will re-create the VTOC
|
||||
+ */
|
||||
+static void
|
||||
+fdasd_process_invalid_vtoc(fdasd_anchor_t *anc)
|
||||
+{
|
||||
+ anc->formatted_cylinders = anc->hw_cylinders;
|
||||
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||
+ - FIRST_USABLE_TRK;
|
||||
+ vtoc_init_format4_label(anc->f4, USABLE_PARTITIONS,
|
||||
+ anc->geo.cylinders, anc->formatted_cylinders,
|
||||
+ anc->geo.heads, anc->geo.sectors,
|
||||
+ anc->blksize, anc->dev_type);
|
||||
+
|
||||
+ vtoc_init_format5_label(anc->f5);
|
||||
+ vtoc_init_format7_label(anc->f7);
|
||||
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose,
|
||||
+ FIRST_USABLE_TRK,
|
||||
+ anc->formatted_cylinders * anc->geo.heads - 1,
|
||||
+ anc->formatted_cylinders, anc->geo.heads);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
fdasd_valid_vtoc_pointer(fdasd_anchor_t *anc, unsigned long b, int fd)
|
||||
{
|
||||
@@ -781,6 +843,8 @@ fdasd_valid_vtoc_pointer(fdasd_anchor_t
|
||||
if (anc->f4->DS4IDFMT == 0xf4) {
|
||||
fdasd_process_valid_vtoc (anc, b, fd);
|
||||
return 0;
|
||||
+ } else {
|
||||
+ fdasd_process_invalid_vtoc(anc);
|
||||
}
|
||||
if (strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("LNX1",str,4),4) == 0 ||
|
||||
strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("CMS1",str,4),4) == 0)
|
||||
@@ -817,13 +881,37 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
||||
else
|
||||
return 0;
|
||||
} else {
|
||||
- return 1;
|
||||
+ fdasd_invalid_vtoc_pointer(anc);
|
||||
}
|
||||
} else if (strncmp (v->volkey, vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0 ||
|
||||
strncmp (v->volkey, vtoc_ebcdic_enc ("CMS1", str, 4), 4) == 0) {
|
||||
return 0;
|
||||
+ } else if (anc->FBA_layout == 1) {
|
||||
+ /* Some times LDL formatted disks does not
|
||||
+ contain any volume label */
|
||||
+ return 1;
|
||||
+ } else {
|
||||
+ /* didn't find VOL1 volume label */
|
||||
+ anc->formatted_cylinders = anc->hw_cylinders;
|
||||
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||
+ - FIRST_USABLE_TRK;
|
||||
+
|
||||
+ fdasd_init_volume_label(anc, fd);
|
||||
+
|
||||
+ vtoc_init_format4_label(anc->f4, USABLE_PARTITIONS,
|
||||
+ anc->geo.cylinders, anc->formatted_cylinders,
|
||||
+ anc->geo.heads, anc->geo.sectors,
|
||||
+ anc->blksize, anc->dev_type);
|
||||
+
|
||||
+ vtoc_init_format5_label(anc->f5);
|
||||
+ vtoc_init_format7_label(anc->f7);
|
||||
+
|
||||
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+',
|
||||
+ anc->verbose, FIRST_USABLE_TRK,
|
||||
+ anc->formatted_cylinders * anc->geo.heads - 1,
|
||||
+ anc->formatted_cylinders, anc->geo.heads);
|
||||
+ return 0;
|
||||
}
|
||||
-
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
Subject: [PATCH] libparted: mklabel to support EDEV DASD
|
||||
|
||||
From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
|
||||
Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
|
||||
which are layed out as a sequence of 512-byte sectors. This patch adds
|
||||
support for mklabel to properly handle FBA devices.
|
||||
|
||||
Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
|
||||
---
|
||||
libparted/labels/fdasd.c | 24 +++++++++++++-----------
|
||||
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -869,19 +869,21 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
||||
vtoc_read_volume_label (fd, anc->label_pos, v);
|
||||
|
||||
if (strncmp(v->vollbl, vtoc_ebcdic_enc ("VOL1", str, 4), 4) == 0) {
|
||||
- /* found VOL1 volume label */
|
||||
- b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize;
|
||||
+ if (anc->FBA_layout != 1 ) {
|
||||
+ /* found VOL1 volume label */
|
||||
+ b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize;
|
||||
|
||||
- if (b > 0) {
|
||||
- int rc;
|
||||
- rc = fdasd_valid_vtoc_pointer (anc, b, fd);
|
||||
+ if (b > 0) {
|
||||
+ int rc;
|
||||
+ rc = fdasd_valid_vtoc_pointer (anc, b, fd);
|
||||
|
||||
- if (rc < 0)
|
||||
- return 1;
|
||||
- else
|
||||
- return 0;
|
||||
- } else {
|
||||
- fdasd_invalid_vtoc_pointer(anc);
|
||||
+ if (rc < 0)
|
||||
+ return 1;
|
||||
+ else
|
||||
+ return 0;
|
||||
+ } else {
|
||||
+ fdasd_invalid_vtoc_pointer(anc);
|
||||
+ }
|
||||
}
|
||||
} else if (strncmp (v->volkey, vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0 ||
|
||||
strncmp (v->volkey, vtoc_ebcdic_enc ("CMS1", str, 4), 4) == 0) {
|
|
@ -0,0 +1,71 @@
|
|||
From e2b9f9051c8d9905b15af0f7fa79c85502370b25 Mon Sep 17 00:00:00 2001
|
||||
From: Brian C. Lane <bcl@redhat.com>
|
||||
Date: Fri, 3 Aug 2012 17:03:50 -0700
|
||||
Subject: [PATCH] libparted: preserve the uuid on dm partitions (#832145)
|
||||
|
||||
* libparted/arch/linux.c (_dm_add_partition): Set the uuid if there was
|
||||
one.
|
||||
---
|
||||
libparted/arch/linux.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 37ddb5f..2c410a0 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2803,6 +2803,8 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
{
|
||||
char* vol_name = NULL;
|
||||
const char* dev_name = NULL;
|
||||
+ char* vol_uuid = NULL;
|
||||
+ const char* dev_uuid = NULL;
|
||||
char* params = NULL;
|
||||
LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
|
||||
uint32_t cookie = 0;
|
||||
@@ -2820,6 +2822,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
goto err;
|
||||
|
||||
dev_name = dm_task_get_name (task);
|
||||
+ dev_uuid = dm_task_get_uuid (task);
|
||||
|
||||
if (isdigit (dev_name[strlen (dev_name) - 1])) {
|
||||
if ( ! (vol_name = zasprintf ("%sp%d", dev_name, part->num)))
|
||||
@@ -2827,6 +2830,10 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
} else if ( ! (vol_name = zasprintf ("%s%d", dev_name, part->num)))
|
||||
goto err;
|
||||
|
||||
+ if ( dev_uuid && (strlen(dev_uuid) > 0) \
|
||||
+ && ! (vol_uuid = zasprintf ("part%d-%s", part->num, dev_uuid)))
|
||||
+ goto err;
|
||||
+
|
||||
/* Caution: dm_task_destroy frees dev_name. */
|
||||
dm_task_destroy (task);
|
||||
task = NULL;
|
||||
@@ -2840,6 +2847,8 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
goto err;
|
||||
|
||||
dm_task_set_name (task, vol_name);
|
||||
+ if (vol_uuid)
|
||||
+ dm_task_set_uuid (task, vol_uuid);
|
||||
dm_task_add_target (task, 0, part->geom.length,
|
||||
"linear", params);
|
||||
if (!dm_task_set_cookie(task, &cookie, 0))
|
||||
@@ -2850,6 +2859,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
|
||||
dm_task_update_nodes();
|
||||
dm_task_destroy(task);
|
||||
free(params);
|
||||
+ free(vol_uuid);
|
||||
free(vol_name);
|
||||
return 1;
|
||||
} else {
|
||||
@@ -2861,6 +2871,7 @@ err:
|
||||
if (task)
|
||||
dm_task_destroy (task);
|
||||
free (params);
|
||||
+ free (vol_uuid);
|
||||
free (vol_name);
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.7.11.4
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 4ee2a7d03f6720c5f97eef93c4df4b9c52e79b5e Mon Sep 17 00:00:00 2001
|
||||
From: Brian C. Lane <bcl@redhat.com>
|
||||
Date: Tue, 4 Sep 2012 15:56:47 -0700
|
||||
Subject: [PATCH] libparted: reallocate buf after _disk_analyse_block_size
|
||||
call
|
||||
|
||||
The call to _disk_analyse_block_size may change the
|
||||
disk->dev->sector_size, if this happens buf may be too small for
|
||||
subsequent reads.
|
||||
|
||||
libparted/labels/mac.c (mac_read): reallocate buf
|
||||
---
|
||||
libparted/labels/mac.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
|
||||
index 1f59a1a..5fa8283 100644
|
||||
--- a/libparted/labels/mac.c
|
||||
+++ b/libparted/labels/mac.c
|
||||
@@ -759,6 +759,13 @@ mac_read (PedDisk* disk)
|
||||
mac_disk_data->block_size = raw_disk->block_size;
|
||||
}
|
||||
|
||||
+ /* re-allocate buf in case _disk_analyse_block_size changed
|
||||
+ * the sector_size */
|
||||
+ free (buf);
|
||||
+ buf = ped_malloc (disk->dev->sector_size);
|
||||
+ if (!buf)
|
||||
+ goto error;
|
||||
+
|
||||
for (num=1; num==1 || num <= last_part_entry_num; num++) {
|
||||
void *raw_part = buf;
|
||||
if (!ped_device_read (disk->dev, raw_part,
|
||||
--
|
||||
1.7.11.4
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
From 26fbffe8389e732be29225bd649adfdd5588b131 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 21 Mar 2012 15:34:20 -0700
|
||||
Subject: [PATCH] libparted: use largest_partnum in dm_reread_part_table
|
||||
(#803108)
|
||||
|
||||
DM devices can have more than 16 partitions, notify the kernel about
|
||||
all of them.
|
||||
|
||||
Resolves: rhbz#803108
|
||||
|
||||
* libparted/arch/linux.c (dm_reread_part_table): Use largest_partnum
|
||||
|
||||
fixup
|
||||
---
|
||||
libparted/arch/linux.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index 7dd664e..ed14f50 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -2516,14 +2516,13 @@ _dm_reread_part_table (PedDisk* disk)
|
||||
return 1;
|
||||
|
||||
int rc = 1;
|
||||
- int last = PED_MIN (largest_partnum, 16);
|
||||
int i;
|
||||
|
||||
sync();
|
||||
if (!_dm_remove_parts(disk->dev))
|
||||
rc = 0;
|
||||
|
||||
- for (i = 1; i <= last; i++) {
|
||||
+ for (i = 1; i <= largest_partnum; i++) {
|
||||
PedPartition* part;
|
||||
|
||||
part = ped_disk_get_partition (disk, i);
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
From 166491bd870df6877e04831c9da593e2f8e77ca8 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Thu, 19 Apr 2012 17:11:09 -0700
|
||||
Subject: [PATCH] tests: test creating 20 device-mapper partitions (#803108)
|
||||
|
||||
* tests/t6002-dm-many-partitions.sh: Make sure > 17 partitions appear in
|
||||
device mapper.
|
||||
---
|
||||
tests/Makefile.am | 1 +
|
||||
tests/t6002-dm-many-partitions.sh | 60 +++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 61 insertions(+), 0 deletions(-)
|
||||
create mode 100755 tests/t6002-dm-many-partitions.sh
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 1b37fd9..57771be 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -55,6 +55,7 @@ TESTS = \
|
||||
t5000-tags.sh \
|
||||
t6000-dm.sh \
|
||||
t6001-psep.sh \
|
||||
+ t6002-dm-many-partitions.sh \
|
||||
t6100-mdraid-partitions.sh \
|
||||
t7000-scripting.sh \
|
||||
t8000-loop.sh \
|
||||
diff --git a/tests/t6002-dm-many-partitions.sh b/tests/t6002-dm-many-partitions.sh
|
||||
new file mode 100755
|
||||
index 0000000..4d08e72
|
||||
--- /dev/null
|
||||
+++ b/tests/t6002-dm-many-partitions.sh
|
||||
@@ -0,0 +1,60 @@
|
||||
+#!/bin/sh
|
||||
+# device-mapper: create many partitions
|
||||
+# This would not create partitions > 16 when using device-mapper
|
||||
+
|
||||
+# Copyright (C) 2012 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_
|
||||
+(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
+
|
||||
+ss=$sector_size_
|
||||
+ns=300
|
||||
+n_partitions=20
|
||||
+start_sector=34
|
||||
+loop_file=loop-file-$$
|
||||
+dm_name=dm-test-$$
|
||||
+
|
||||
+cleanup_() {
|
||||
+ dmsetup remove $dm_name
|
||||
+ test -n "$dev" && losetup -d "$dev"
|
||||
+ rm -f $loop_file;
|
||||
+}
|
||||
+
|
||||
+# create a file large enough to hold a GPT partition table
|
||||
+dd if=/dev/null of=$loop_file bs=$ss seek=$ns || framework_failure
|
||||
+dev=$(losetup --show -f $loop_file) || framework_failure
|
||||
+dmsetup create $dm_name --table "0 $ns linear $dev 0" || framework_failure
|
||||
+
|
||||
+cmd=
|
||||
+for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
+ s=$((start_sector + i - 1))
|
||||
+ cmd="$cmd mkpart p$i ${s}s ${s}s"
|
||||
+done
|
||||
+parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+# Make sure all the partitions appeared under /dev/mapper/
|
||||
+for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
+ if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then
|
||||
+ fail=1
|
||||
+ break
|
||||
+ fi
|
||||
+ # remove the partitions as we go, otherwise cleanup won't work.
|
||||
+ dmsetup remove /dev/mapper/${dm_name}p$i
|
||||
+done
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From 17027da1eda39d20b2d6dca0a59ac4afc5409318 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Wed, 28 Aug 2013 08:47:26 -0700
|
||||
Subject: [PATCH 69/69] tests: Add btrfs and xfs to the fs probe test
|
||||
|
||||
* tests/tests/t1700-probe-fs.sh: Add btrfs and xfs
|
||||
---
|
||||
tests/t1700-probe-fs.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
|
||||
index 7ce53d0..0418e73 100755
|
||||
--- a/tests/t1700-probe-fs.sh
|
||||
+++ b/tests/t1700-probe-fs.sh
|
||||
@@ -22,7 +22,7 @@ require_512_byte_sector_size_
|
||||
dev=loop-file
|
||||
ss=$sector_size_
|
||||
|
||||
-for type in ext2 ext3 ext4 nilfs2; do
|
||||
+for type in ext2 ext3 ext4 btrfs xfs nilfs2; do
|
||||
|
||||
( mkfs.$type -V ) >/dev/null 2>&1 \
|
||||
|| { warn_ "$ME: no $type support"; continue; }
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
From cc96f793bb4fb088123a40fb9d802e7db1fdbffb Mon Sep 17 00:00:00 2001
|
||||
From: Brian C. Lane <bcl@redhat.com>
|
||||
Date: Tue, 7 Aug 2012 10:14:03 -0700
|
||||
Subject: [PATCH] tests: Make sure dm UUIDs are not erased
|
||||
|
||||
* tests/t6003-dm-uuid.sh: Make sure dm UUIDs are not erased
|
||||
---
|
||||
tests/Makefile.am | 1 +
|
||||
tests/t6003-dm-uuid.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 60 insertions(+), 0 deletions(-)
|
||||
create mode 100755 tests/t6003-dm-uuid.sh
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 57771be..98310f2 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -56,6 +56,7 @@ TESTS = \
|
||||
t6000-dm.sh \
|
||||
t6001-psep.sh \
|
||||
t6002-dm-many-partitions.sh \
|
||||
+ t6003-dm-uuid.sh \
|
||||
t6100-mdraid-partitions.sh \
|
||||
t7000-scripting.sh \
|
||||
t8000-loop.sh \
|
||||
diff --git a/tests/t6003-dm-uuid.sh b/tests/t6003-dm-uuid.sh
|
||||
new file mode 100755
|
||||
index 0000000..1751cb4
|
||||
--- /dev/null
|
||||
+++ b/tests/t6003-dm-uuid.sh
|
||||
@@ -0,0 +1,59 @@
|
||||
+#!/bin/sh
|
||||
+# device-mapper: preserve uuid
|
||||
+# The dm's partitions uuid would be removed when creating new partitions
|
||||
+
|
||||
+# Copyright (C) 2012 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_
|
||||
+(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
+
|
||||
+ss=$sector_size_
|
||||
+ns=300
|
||||
+n_partitions=3
|
||||
+start_sector=34
|
||||
+loop_file=loop-file-$$
|
||||
+dm_name=dm-test-$$
|
||||
+
|
||||
+cleanup_() {
|
||||
+ dmsetup remove $dm_name
|
||||
+ test -n "$dev" && losetup -d "$dev"
|
||||
+ rm -f $loop_file;
|
||||
+}
|
||||
+
|
||||
+# create a file large enough to hold a GPT partition table
|
||||
+dd if=/dev/null of=$loop_file bs=$ss seek=$ns || framework_failure
|
||||
+dev=$(losetup --show -f $loop_file) || framework_failure
|
||||
+dmsetup create $dm_name --table "0 $ns linear $dev 0" || framework_failure
|
||||
+dmsetup rename $dm_name --setuuid f139317b-f98a-45d7-ab3b-9b4e0a336872 || framework_failure
|
||||
+
|
||||
+cmd=
|
||||
+for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
+ s=$((start_sector + i - 1))
|
||||
+ cmd="$cmd mkpart p$i ${s}s ${s}s"
|
||||
+done
|
||||
+parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+# Make sure all the partitions have UUIDs
|
||||
+for ((i=1; i<=$n_partitions; i+=1)); do
|
||||
+ dmsetup info /dev/mapper/${dm_name}p$i | grep UUID || fail=1
|
||||
+
|
||||
+ # remove the partitions as we go, otherwise cleanup won't work.
|
||||
+ dmsetup remove /dev/mapper/${dm_name}p$i
|
||||
+done
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
From 98f1556d8a134f54d62ebdac27e9d16aa7884983 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 20 Mar 2012 17:17:10 -0700
|
||||
Subject: [PATCH 2/2] tests: add t0301-overwrite-gpt-pmbr.sh
|
||||
|
||||
Make sure parted checks the PMBR before the GPT partition table.
|
||||
|
||||
* NEWS: Update with new GPT behavior
|
||||
* tests/Makefile.am: Add new test
|
||||
* tests/overwrite-gpt-pmbr.sh: new test
|
||||
---
|
||||
NEWS | 7 +++++++
|
||||
1 files changed, 7 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index fe0fcdd..b0a0657 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,5 +1,12 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes in release 3.1-2 (2012-03-21) [Fedora]
|
||||
+
|
||||
+** Bug Fixes
|
||||
+
|
||||
+ libparted: Treat disks without a PMBR as msdos labeled disks
|
||||
+ even if they have GPT partition tables.
|
||||
+
|
||||
* Noteworthy changes in release 3.1 (2012-03-02) [stable]
|
||||
|
||||
** New features
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
From a1aa9eb26f357bb1a5111eb332594dfb7b39ace0 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 15 Oct 2012 17:27:18 -0700
|
||||
Subject: [PATCH 1/2] tests: cleanup losetup usage
|
||||
|
||||
The unsafe_losetup_ function was failing because losetup didn't
|
||||
recognize that the 'private' /dev/loopX devices were the same as
|
||||
/dev/loopX, it would fail even if one was in use. Switch to using
|
||||
losetup --show which is a cleaner solution.
|
||||
Also use sparse file for loop_setup to save space.
|
||||
---
|
||||
tests/lvm-utils.sh | 24 ++----------------------
|
||||
tests/t-lvm.sh | 24 ++----------------------
|
||||
tests/t6001-psep.sh | 8 ++------
|
||||
tests/t6003-dm-uuid.sh | 3 +--
|
||||
4 files changed, 7 insertions(+), 52 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm-utils.sh b/tests/lvm-utils.sh
|
||||
index 456d265..a204b08 100644
|
||||
--- a/tests/lvm-utils.sh
|
||||
+++ b/tests/lvm-utils.sh
|
||||
@@ -16,34 +16,14 @@ export LVM_SUPPRESS_FD_WARNINGS=1
|
||||
ME=$(basename "$0")
|
||||
warn() { echo >&2 "$ME: $@"; }
|
||||
|
||||
-unsafe_losetup_()
|
||||
-{
|
||||
- f=$1
|
||||
-
|
||||
- test -n "$G_dev_" \
|
||||
- || fail_ "Internal error: unsafe_losetup_ called before init_root_dir_"
|
||||
-
|
||||
- # Iterate through $G_dev_/loop{,/}{0,1,2,3,4,5,6,7,8,9}
|
||||
- for slash in '' /; do
|
||||
- for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
- dev=$G_dev_/loop$slash$i
|
||||
- losetup $dev > /dev/null 2>&1 && continue;
|
||||
- losetup "$dev" "$f" > /dev/null && { echo "$dev"; return 0; }
|
||||
- break
|
||||
- done
|
||||
- done
|
||||
-
|
||||
- return 1
|
||||
-}
|
||||
-
|
||||
loop_setup_()
|
||||
{
|
||||
file=$1
|
||||
- dd if=/dev/zero of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
|
||||
+ dd if=/dev/null of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
|
||||
|| { warn "loop_setup_ failed: Unable to create tmp file $file"; return 1; }
|
||||
|
||||
# NOTE: this requires a new enough version of losetup
|
||||
- dev=$(unsafe_losetup_ "$file") \
|
||||
+ dev=$(losetup --show -f "$file") 2>/dev/null \
|
||||
|| { warn "loop_setup_ failed: Unable to create loopback device"; return 1; }
|
||||
|
||||
echo "$dev"
|
||||
diff --git a/tests/t-lvm.sh b/tests/t-lvm.sh
|
||||
index b08f934..3c7657b 100644
|
||||
--- a/tests/t-lvm.sh
|
||||
+++ b/tests/t-lvm.sh
|
||||
@@ -16,34 +16,14 @@ export LVM_SUPPRESS_FD_WARNINGS=1
|
||||
ME=$(basename "$0")
|
||||
warn() { echo >&2 "$ME: $@"; }
|
||||
|
||||
-unsafe_losetup_()
|
||||
-{
|
||||
- f=$1
|
||||
-
|
||||
- test -n "$G_dev_" \
|
||||
- || error "Internal error: unsafe_losetup_ called before init_root_dir_"
|
||||
-
|
||||
- # Iterate through $G_dev_/loop{,/}{0,1,2,3,4,5,6,7,8,9}
|
||||
- for slash in '' /; do
|
||||
- for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
- dev=$G_dev_/loop$slash$i
|
||||
- losetup $dev > /dev/null 2>&1 && continue;
|
||||
- losetup "$dev" "$f" > /dev/null && { echo "$dev"; return 0; }
|
||||
- break
|
||||
- done
|
||||
- done
|
||||
-
|
||||
- return 1
|
||||
-}
|
||||
-
|
||||
loop_setup_()
|
||||
{
|
||||
file=$1
|
||||
- dd if=/dev/zero of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
|
||||
+ dd if=/dev/null of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
|
||||
|| { warn "loop_setup_ failed: Unable to create tmp file $file"; return 1; }
|
||||
|
||||
# NOTE: this requires a new enough version of losetup
|
||||
- dev=$(unsafe_losetup_ "$file" 2>/dev/null) \
|
||||
+ dev=$(losetup --show -f "$file") 2>/dev/null \
|
||||
|| { warn "loop_setup_ failed: Unable to create loopback device"; return 1; }
|
||||
|
||||
echo "$dev"
|
||||
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
|
||||
index 490c6d2..1859ac9 100644
|
||||
--- a/tests/t6001-psep.sh
|
||||
+++ b/tests/t6001-psep.sh
|
||||
@@ -44,14 +44,10 @@ cleanup_fn_() {
|
||||
# create a file of size N bytes
|
||||
N=10M
|
||||
|
||||
-# create the test file
|
||||
-f1=$(pwd)/1; dd if=/dev/null of=$f1 bs=1 seek=$N 2> /dev/null || fail=1
|
||||
-f2=$(pwd)/2; dd if=/dev/null of=$f2 bs=1 seek=$N 2> /dev/null || fail=1
|
||||
-
|
||||
-d1=$(loop_setup_ "$f1") \
|
||||
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
|
||||
|| skip_ "is this partition mounted with 'nodev'?"
|
||||
|
||||
-d2=$(loop_setup_ "$f2") \
|
||||
+f2=$(pwd)/2 ;d2=$(loop_setup_ "$f2") \
|
||||
|| skip_ "is this partition mounted with 'nodev'?"
|
||||
|
||||
dmsetup_cmd="0 `blockdev --getsz $d1` linear $d1 0"
|
||||
diff --git a/tests/t6003-dm-uuid.sh b/tests/t6003-dm-uuid.sh
|
||||
index 1751cb4..f58cb06 100755
|
||||
--- a/tests/t6003-dm-uuid.sh
|
||||
+++ b/tests/t6003-dm-uuid.sh
|
||||
@@ -36,8 +36,7 @@ cleanup_() {
|
||||
}
|
||||
|
||||
# create a file large enough to hold a GPT partition table
|
||||
-dd if=/dev/null of=$loop_file bs=$ss seek=$ns || framework_failure
|
||||
-dev=$(losetup --show -f $loop_file) || framework_failure
|
||||
+dev=$(loop_setup_ $loop_file) || framework_failure
|
||||
dmsetup create $dm_name --table "0 $ns linear $dev 0" || framework_failure
|
||||
dmsetup rename $dm_name --setuuid f139317b-f98a-45d7-ab3b-9b4e0a336872 || framework_failure
|
||||
|
||||
--
|
||||
1.7.11.4
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
From 7d4947fd094f1dda491473a57a9275971405684e Mon Sep 17 00:00:00 2001
|
||||
From: Fedora Ninjas <parted-owner@fedoraproject.org>
|
||||
Date: Wed, 17 Apr 2013 14:59:36 -0700
|
||||
Subject: [PATCH] tests: rewrite t6001 to use /dev/mapper
|
||||
|
||||
This test begain failing because using a private copy of /dev/mapper
|
||||
confuses the system. This fixes that and generally cleans up the test.
|
||||
|
||||
tests/t6001.sh: update to use /dev/mapper directly
|
||||
---
|
||||
tests/t6001-psep.sh | 43 ++++++++++++++++++-------------------------
|
||||
1 file changed, 18 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
|
||||
index 1859ac9..0c1ab99 100644
|
||||
--- a/tests/t6001-psep.sh
|
||||
+++ b/tests/t6001-psep.sh
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
+
|
||||
# ensure that parted names partitions on dm disks correctly
|
||||
|
||||
# Copyright (C) 2011-2012 Free Software Foundation, Inc.
|
||||
@@ -19,10 +20,7 @@
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||||
|
||||
require_root_
|
||||
-lvm_init_root_dir_
|
||||
-
|
||||
-test "x$ENABLE_DEVICE_MAPPER" = xyes \
|
||||
- || skip_ "no device-mapper support"
|
||||
+(dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed"
|
||||
|
||||
# Device maps names - should be random to not conflict with existing ones on
|
||||
# the system
|
||||
@@ -41,25 +39,19 @@ cleanup_fn_() {
|
||||
rm -f "$f1 $f2";
|
||||
}
|
||||
|
||||
-# create a file of size N bytes
|
||||
-N=10M
|
||||
+loop_file_1=loop-file-1-$$
|
||||
+loop_file_2=loop-file-2-$$
|
||||
|
||||
-f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
|
||||
- || skip_ "is this partition mounted with 'nodev'?"
|
||||
+d1=$(loop_setup_ $loop_file_1) || framework_failure
|
||||
+d1_size=$(blockdev --getsz $d1)
|
||||
+d2=$(loop_setup_ $loop_file_2) || framework_failure
|
||||
+d2_size=$(blockdev --getsz $d2)
|
||||
|
||||
-f2=$(pwd)/2 ;d2=$(loop_setup_ "$f2") \
|
||||
- || skip_ "is this partition mounted with 'nodev'?"
|
||||
-
|
||||
-dmsetup_cmd="0 `blockdev --getsz $d1` linear $d1 0"
|
||||
-# setup: create a mapping
|
||||
-echo "$dmsetup_cmd" | dmsetup create "$linear_" || fail=1
|
||||
-dev="$DM_DEV_DIR/mapper/$linear_"
|
||||
+dmsetup create $linear_ --table "0 $d1_size linear $d1 0" || framework_failure
|
||||
+dev="/dev/mapper/$linear_"
|
||||
|
||||
# Create msdos partition table
|
||||
-parted -s $dev mklabel msdos > out 2>&1 || fail=1
|
||||
-compare /dev/null out || fail=1
|
||||
-
|
||||
-parted -s $dev mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
+parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
#make sure device name is correct
|
||||
@@ -67,17 +59,18 @@ test -e ${dev}p1 || fail=1
|
||||
|
||||
#repeat on name not ending in a digit
|
||||
# setup: create a mapping
|
||||
-echo "$dmsetup_cmd" | dmsetup create "$linear2_" || fail=1
|
||||
-dev="$DM_DEV_DIR/mapper/$linear2_"
|
||||
+dmsetup create $linear2_ --table "0 $d2_size linear $d2 0" || framework_failure
|
||||
+dev="/dev/mapper/$linear2_"
|
||||
|
||||
# Create msdos partition table
|
||||
-parted -s $dev mklabel msdos > out 2>&1 || fail=1
|
||||
-compare /dev/null out || fail=1
|
||||
-
|
||||
-parted -s $dev mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
+parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
|
||||
#make sure device name is correct
|
||||
test -e ${dev}1 || fail=1
|
||||
|
||||
+if [ -n "$fail" ]; then
|
||||
+ ls /dev/mapper
|
||||
+fi
|
||||
+
|
||||
Exit $fail
|
||||
--
|
||||
1.8.1.4
|
||||
|
|
@ -0,0 +1,371 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
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
|
||||
TsT5hoBVIBulDJ13iotYt5qIhAlhASJs
|
||||
=Nb2k
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue