Accepting request 712877 from home:anicka:branches:Base:System
- port fixes for various bugs from upstream (bsc#1136245) - add: libparted-dasd-correct-the-offset-where-the-first-pa.patch 4126d02, correct the offset where the first partition begins. This patch implements libparted-dasd-do-not-use-first-tracks.patch - remove: libparted-dasd-do-not-use-first-tracks.patch - add: parted-fix-crash-due-to-improper-partition-number-in.patch 149f009, fix crash due to improper partition number input, changed call to strtol, use base 0 to fit our parted-type.patch - modify: parted-type.patch (removed ui.c part) - add: parted-check-the-name-of-partition-first-when-to-nam.patch d7a2ff1, check the name of partition first when to name a partition - add: libparted-dasd-add-test-cases-for-the-new-fdasd-func.patch c11f5c0, 571e078, add test cases for the new fdasd functions - add: libparted-dasd-add-an-exception-for-changing-DASD-LD.patch ee2c0c2, add an exception for changing DASD-LDL partition table - add: libpartd-dasd-improve-flag-processing-for-DASD-LDL.patch 1545d6d, improve flag processing for DASD-LDL - add: clean-the-disk-information-when-commands-fail-in-int.patch 5a61f15, clean the disk information when commands fail in interactive mode - add: parted-ui-remove-unneccesary-information-of-command.patch 0b7946a, remove unneccesary information of command line - add: parted-fix-wrong-error-label-jump-in-mkpart.patch af150f6, fix wrong error label jump in mkpart - refresh: libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch 4f25d54, unify vtoc handling for cdl/ldl - refresh: libparted-dasd-update-and-improve-fdasd-functions.patch db37c8c, update and improve fdasd functions - refresh: libparted-dasd-add-new-fdasd-functions.patch b9e1281, add new fdasd functions OBS-URL: https://build.opensuse.org/request/show/712877 OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=142
This commit is contained in:
parent
995757fbd9
commit
5b97712c80
83
clean-the-disk-information-when-commands-fail-in-int.patch
Normal file
83
clean-the-disk-information-when-commands-fail-in-int.patch
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
From 5a61f15b7003cba73e6517ac22204bafd9a3cb8e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 23 Dec 2016 06:53:38 +0100
|
||||||
|
Subject: [PATCH] clean the disk information when commands fail in interactive
|
||||||
|
mode.
|
||||||
|
|
||||||
|
parted always reads disk information to memory before any
|
||||||
|
operations. The disk that user operates is actually
|
||||||
|
a copy of real one in memory. When the information in memory
|
||||||
|
is changed, it will commit the memory to device to update the
|
||||||
|
disk information.
|
||||||
|
|
||||||
|
Once the disk information is read, parted will never re-read it
|
||||||
|
again unless another device is loaded or the device is re-read.
|
||||||
|
Above work has been done in commit 7eac058 (parted: don't reload
|
||||||
|
partition table on every command)
|
||||||
|
|
||||||
|
Each command of parted always commits the memory when it succeeds.
|
||||||
|
Then the disk information on device and in memory are the same.
|
||||||
|
But when it fails, they might be different. User will be confused
|
||||||
|
by this, and sometimes get undesired result with the contaminated
|
||||||
|
memory. This memory should be cleaned if some command fails.
|
||||||
|
Then the command followed will re-read the disk.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
parted/parted.c | 14 ++++++++++----
|
||||||
|
parted/ui.c | 8 +++++++-
|
||||||
|
2 files changed, 17 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
Index: parted-3.2/parted/parted.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/parted/parted.c
|
||||||
|
+++ parted-3.2/parted/parted.c
|
||||||
|
@@ -1501,8 +1501,12 @@ _rescue_add_partition (PedPartition* par
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- ped_partition_set_system (part, fs_type);
|
||||||
|
- ped_disk_commit (part->disk);
|
||||||
|
+ if (!ped_partition_set_system (part, fs_type))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (!ped_disk_commit (part->disk))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1727,8 +1731,10 @@ do_rm (PedDevice** dev, PedDisk** diskp)
|
||||||
|
if (!_partition_warn_busy (part, danger_if_busy))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
- ped_disk_delete_partition (*diskp, part);
|
||||||
|
- ped_disk_commit (*diskp);
|
||||||
|
+ if (!ped_disk_delete_partition (*diskp, part))
|
||||||
|
+ goto error;
|
||||||
|
+ if (!ped_disk_commit (*diskp))
|
||||||
|
+ goto error;
|
||||||
|
|
||||||
|
if ((*dev)->type != PED_DEVICE_FILE)
|
||||||
|
disk_is_modified = 1;
|
||||||
|
Index: parted-3.2/parted/ui.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/parted/ui.c
|
||||||
|
+++ parted-3.2/parted/ui.c
|
||||||
|
@@ -1614,8 +1614,14 @@ interactive_mode (PedDevice** dev, PedDi
|
||||||
|
cmd = command_get (commands, word);
|
||||||
|
free (word);
|
||||||
|
if (cmd) {
|
||||||
|
- if (!command_run (cmd, dev, disk))
|
||||||
|
+ if (!command_run (cmd, dev, disk)) {
|
||||||
|
command_line_flush ();
|
||||||
|
+
|
||||||
|
+ if (*disk) {
|
||||||
|
+ ped_disk_destroy (*disk);
|
||||||
|
+ *disk = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
} else
|
||||||
|
print_commands_help ();
|
||||||
|
}
|
44
libpartd-dasd-improve-flag-processing-for-DASD-LDL.patch
Normal file
44
libpartd-dasd-improve-flag-processing-for-DASD-LDL.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 1545d6d4db29fa20f0c611786a094521e8974d4a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 24 Mar 2017 03:11:12 +0100
|
||||||
|
Subject: [PATCH] libpartd/dasd: improve flag processing for DASD-LDL
|
||||||
|
|
||||||
|
DASD-LDL does not support flag now, so all the flags are
|
||||||
|
unavailable to it.
|
||||||
|
|
||||||
|
Signed-off-by: Andre Wild <wild@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
libparted/labels/dasd.c | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
Index: parted-3.2/libparted/labels/dasd.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/libparted/labels/dasd.c
|
||||||
|
+++ parted-3.2/libparted/labels/dasd.c
|
||||||
|
@@ -788,10 +788,24 @@ dasd_partition_get_flag (const PedPartit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * The DASD-LDL does not support flags now.
|
||||||
|
+ * So just return 0.
|
||||||
|
+*/
|
||||||
|
static int
|
||||||
|
dasd_partition_is_flag_available (const PedPartition* part,
|
||||||
|
PedPartitionFlag flag)
|
||||||
|
{
|
||||||
|
+ DasdDiskSpecific* disk_specific;
|
||||||
|
+ PED_ASSERT (part != NULL);
|
||||||
|
+ PED_ASSERT (part->disk != NULL);
|
||||||
|
+ PED_ASSERT (part->disk->disk_specific != NULL);
|
||||||
|
+
|
||||||
|
+ disk_specific = part->disk->disk_specific;
|
||||||
|
+
|
||||||
|
+ if (disk_specific->format_type == 1)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
switch (flag) {
|
||||||
|
case PED_PARTITION_SWAP:
|
||||||
|
return 1;
|
35
libparted-dasd-add-an-exception-for-changing-DASD-LD.patch
Normal file
35
libparted-dasd-add-an-exception-for-changing-DASD-LD.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From ee2c0c20fb215af43b12195e8cd645cc1a0bd96e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 24 Mar 2017 11:20:09 +0100
|
||||||
|
Subject: [PATCH] libparted/dasd: add an exception for changing DASD-LDL
|
||||||
|
partition table
|
||||||
|
|
||||||
|
The partition table of DASD-LDL device with the dasd disk label
|
||||||
|
should not be changed according to its character in Linux.
|
||||||
|
When the user tries to modify the partition table, an exception
|
||||||
|
will be raised to inform user of this character.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
libparted/labels/dasd.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: parted-3.2/libparted/labels/dasd.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/libparted/labels/dasd.c
|
||||||
|
+++ parted-3.2/libparted/labels/dasd.c
|
||||||
|
@@ -617,8 +617,12 @@ dasd_write (const PedDisk* disk)
|
||||||
|
PDEBUG;
|
||||||
|
|
||||||
|
/* If not formated in CDL, don't write anything. */
|
||||||
|
- if (disk_specific->format_type == 1)
|
||||||
|
+ if (disk_specific->format_type == 1) {
|
||||||
|
+ ped_exception_throw (PED_EXCEPTION_ERROR,
|
||||||
|
+ PED_EXCEPTION_CANCEL,
|
||||||
|
+ _("The partition table of DASD-LDL device cannot be changed.\n"));
|
||||||
|
return 1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Ensure the device is open RW */
|
||||||
|
char dummy[10]; /* to avoid assertion in ped_device_write */
|
@ -1,9 +1,7 @@
|
|||||||
|
From b9e12819ecef30087753b967bebc9809120593a6 Mon Sep 17 00:00:00 2001
|
||||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
Date: Wed, 26 Oct 2016 04:22:48 +0200
|
Date: Wed, 26 Oct 2016 04:22:48 +0200
|
||||||
Subject: libparted/dasd: add new fdasd functions
|
Subject: [PATCH] libparted/dasd: add new fdasd functions
|
||||||
References: fate#321531
|
|
||||||
Patch-mainline: v3.3
|
|
||||||
Git-commit: b9e12819ecef30087753b967bebc9809120593a6
|
|
||||||
|
|
||||||
Introduce a set of new functions from the fdasd utility of the s390-tools
|
Introduce a set of new functions from the fdasd utility of the s390-tools
|
||||||
to keep the code base in parted and s390-tools in sync.
|
to keep the code base in parted and s390-tools in sync.
|
||||||
@ -17,15 +15,16 @@ These new functions are:
|
|||||||
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|
||||||
---
|
---
|
||||||
include/parted/fdasd.in.h | 4 ++
|
include/parted/fdasd.in.h | 4 ++
|
||||||
libparted/labels/fdasd.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++
|
libparted/labels/fdasd.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
2 files changed, 127 insertions(+)
|
2 files changed, 127 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/parted/fdasd.in.h b/include/parted/fdasd.in.h
|
||||||
|
index 09a35a0..9e5d7d1 100644
|
||||||
--- a/include/parted/fdasd.in.h
|
--- a/include/parted/fdasd.in.h
|
||||||
+++ b/include/parted/fdasd.in.h
|
+++ b/include/parted/fdasd.in.h
|
||||||
@@ -293,5 +293,9 @@ void fdasd_recreate_vtoc(fdasd_anchor_t
|
@@ -293,5 +293,9 @@ void fdasd_recreate_vtoc(fdasd_anchor_t *anc);
|
||||||
partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
|
partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
|
||||||
unsigned int start, unsigned int stop);
|
unsigned int start, unsigned int stop);
|
||||||
int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ;
|
int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ;
|
||||||
@ -35,9 +34,11 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
+void fdasd_reuse_vtoc(fdasd_anchor_t *anc);
|
+void fdasd_reuse_vtoc(fdasd_anchor_t *anc);
|
||||||
|
|
||||||
#endif /* FDASD_H */
|
#endif /* FDASD_H */
|
||||||
|
diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
|
||||||
|
index e5df5cf..713ed6b 100644
|
||||||
--- a/libparted/labels/fdasd.c
|
--- a/libparted/labels/fdasd.c
|
||||||
+++ b/libparted/labels/fdasd.c
|
+++ b/libparted/labels/fdasd.c
|
||||||
@@ -1320,4 +1320,127 @@ fdasd_add_partition (fdasd_anchor_t *anc
|
@@ -1320,4 +1320,127 @@ fdasd_add_partition (fdasd_anchor_t *anc, unsigned int start,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,3 +166,6 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* vim:set tabstop=4 shiftwidth=4 softtabstop=4: */
|
/* vim:set tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
282
libparted-dasd-add-test-cases-for-the-new-fdasd-func.patch
Normal file
282
libparted-dasd-add-test-cases-for-the-new-fdasd-func.patch
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
From c11f5c005270d24bc3905ab3b743e96fc1a9a507 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Thu, 20 Apr 2017 10:20:07 +0200
|
||||||
|
Subject: [PATCH] libparted/dasd: add test cases for the new fdasd functions
|
||||||
|
|
||||||
|
The test case uses a temporary file in libparted/tests under
|
||||||
|
Check framwork.It can be issued by "make check" in the test dir.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
libparted/tests/t4000-volser.sh | 20 +++++
|
||||||
|
libparted/tests/volser.c | 188 ++++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 208 insertions(+)
|
||||||
|
create mode 100755 libparted/tests/t4000-volser.sh
|
||||||
|
create mode 100644 libparted/tests/volser.c
|
||||||
|
|
||||||
|
diff --git a/libparted/tests/t4000-volser.sh b/libparted/tests/t4000-volser.sh
|
||||||
|
new file mode 100755
|
||||||
|
index 0000000..89688ba
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/libparted/tests/t4000-volser.sh
|
||||||
|
@@ -0,0 +1,20 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+
|
||||||
|
+# 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/>.
|
||||||
|
+
|
||||||
|
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
|
||||||
|
+
|
||||||
|
+volser || fail=1
|
||||||
|
+
|
||||||
|
+Exit $fail
|
||||||
|
diff --git a/libparted/tests/volser.c b/libparted/tests/volser.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..9063821
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/libparted/tests/volser.c
|
||||||
|
@@ -0,0 +1,188 @@
|
||||||
|
+/*
|
||||||
|
+ * Author: Wang Dong <dongdwdw@cn.ibm.com>
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <config.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+#include <check.h>
|
||||||
|
+
|
||||||
|
+#include <parted/vtoc.h>
|
||||||
|
+#include <parted/device.h>
|
||||||
|
+#include <parted/fdasd.h>
|
||||||
|
+#include <parted/vtoc.h>
|
||||||
|
+#include "../arch/linux.h"
|
||||||
|
+#include "common.h"
|
||||||
|
+#include "progname.h"
|
||||||
|
+
|
||||||
|
+/* set dasd first */
|
||||||
|
+static char vol_devno[7] = {0};
|
||||||
|
+static char *tmp_disk;
|
||||||
|
+static int fd;
|
||||||
|
+
|
||||||
|
+static PedDisk *disk;
|
||||||
|
+static struct fdasd_anchor anc;
|
||||||
|
+static fdasd_anchor_t *anchor = &anc;
|
||||||
|
+static LinuxSpecific *arch_specific;
|
||||||
|
+
|
||||||
|
+/* set the enviroment */
|
||||||
|
+static void set_test (void)
|
||||||
|
+{
|
||||||
|
+ PedDevice *dev;
|
||||||
|
+ PedDiskType *type;
|
||||||
|
+ type = ped_disk_type_get ("dasd");
|
||||||
|
+
|
||||||
|
+ tmp_disk = _create_disk (20*1024*1024);
|
||||||
|
+ fail_if (tmp_disk == NULL, "Failed to create temporary disk");
|
||||||
|
+ dev = ped_device_get (tmp_disk);
|
||||||
|
+ if (dev == NULL)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ disk = _create_disk_label (dev, type);
|
||||||
|
+ if (!ped_device_open (disk->dev))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ fdasd_initialize_anchor (anchor);
|
||||||
|
+ arch_specific = LINUX_SPECIFIC (disk->dev);
|
||||||
|
+ fd = arch_specific->fd;
|
||||||
|
+ if (!fdasd_get_geometry (dev, anchor, fd))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ fdasd_check_volume (anchor, fd);
|
||||||
|
+ sprintf (vol_devno, "0X%04x", anchor->devno);
|
||||||
|
+ ck_assert (strlen (vol_devno) == VOLSER_LENGTH);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void free_test (void)
|
||||||
|
+{
|
||||||
|
+ ped_device_close (disk->dev);
|
||||||
|
+ ped_device_destroy (disk->dev);
|
||||||
|
+ unlink (tmp_disk);
|
||||||
|
+ free (tmp_disk);
|
||||||
|
+ fdasd_cleanup (anchor);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Test with default volser */
|
||||||
|
+START_TEST (test_get_volser)
|
||||||
|
+{
|
||||||
|
+ char volser[7] = {0};
|
||||||
|
+ fdasd_change_volser (anchor, vol_devno);
|
||||||
|
+ fdasd_write_labels (anchor, fd);
|
||||||
|
+
|
||||||
|
+ fdasd_get_volser (anchor, volser, fd);
|
||||||
|
+ ck_assert (!strcmp (volser, vol_devno));
|
||||||
|
+}
|
||||||
|
+END_TEST
|
||||||
|
+
|
||||||
|
+START_TEST (test_check_volser)
|
||||||
|
+{
|
||||||
|
+ char vol[7] = {0};
|
||||||
|
+ char vol_long[] = "abcdefg";
|
||||||
|
+ char vol_short[] = "ab_c ";
|
||||||
|
+ char vol_null[] = " ";
|
||||||
|
+ char *vol_input = NULL;
|
||||||
|
+
|
||||||
|
+ vol_input = vol_long;
|
||||||
|
+ fdasd_check_volser (vol_input, anchor->devno);
|
||||||
|
+ ck_assert(!strcmp (vol_input, "ABCDEF"));
|
||||||
|
+
|
||||||
|
+ vol_input = vol_short;
|
||||||
|
+ fdasd_check_volser (vol_input, anchor->devno);
|
||||||
|
+ ck_assert (!strcmp (vol_input, "ABC"));
|
||||||
|
+
|
||||||
|
+ vol_input = vol_null;
|
||||||
|
+ fdasd_check_volser (vol_input, anchor->devno);
|
||||||
|
+ ck_assert (!strcmp (vol_input, vol_devno));
|
||||||
|
+}
|
||||||
|
+END_TEST
|
||||||
|
+
|
||||||
|
+START_TEST (test_change_volser)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ char vol[] = "000000";
|
||||||
|
+ char volser[7] = {0};
|
||||||
|
+
|
||||||
|
+ fdasd_change_volser (anchor, vol);
|
||||||
|
+ fdasd_write_labels (anchor, fd);
|
||||||
|
+
|
||||||
|
+ fdasd_get_volser (anchor, volser, fd);
|
||||||
|
+ ck_assert (!strcmp (volser, vol));
|
||||||
|
+}
|
||||||
|
+END_TEST
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * fdsad_recreate_vtoc recreate the VTOC with existing one.
|
||||||
|
+ * So the partition information should be not changed after recreating
|
||||||
|
+ * VTOC.
|
||||||
|
+*/
|
||||||
|
+START_TEST (test_reuse_vtoc)
|
||||||
|
+{
|
||||||
|
+ ds5ext_t before;
|
||||||
|
+ ds5ext_t after;
|
||||||
|
+
|
||||||
|
+ memcpy (&before, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
|
||||||
|
+
|
||||||
|
+ if (anchor->fspace_trk) {
|
||||||
|
+ fdasd_reuse_vtoc (anchor);
|
||||||
|
+ memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
|
||||||
|
+ if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
|
||||||
|
+ ck_abort ();
|
||||||
|
+ } else {
|
||||||
|
+ fdasd_reuse_vtoc (anchor);
|
||||||
|
+ memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
|
||||||
|
+ if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
|
||||||
|
+ ck_abort ();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+END_TEST
|
||||||
|
+
|
||||||
|
+int main (int argc, char **argv)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ set_program_name (argv[0]);
|
||||||
|
+
|
||||||
|
+#if defined __s390__ || defined __s390x__
|
||||||
|
+
|
||||||
|
+ int number_failed = 0;
|
||||||
|
+
|
||||||
|
+ Suite *suite = suite_create ("Volser");
|
||||||
|
+
|
||||||
|
+ TCase *tcase_get = tcase_create ("Get");
|
||||||
|
+ TCase *tcase_check = tcase_create ("Check");
|
||||||
|
+ TCase *tcase_change = tcase_create ("Change");
|
||||||
|
+ TCase *tcase_vtoc = tcase_create ("Vtoc");
|
||||||
|
+
|
||||||
|
+ ped_exception_set_handler (_test_exception_handler);
|
||||||
|
+
|
||||||
|
+ tcase_add_checked_fixture (tcase_check, set_test, free_test);
|
||||||
|
+ tcase_add_test (tcase_check, test_check_volser);
|
||||||
|
+ tcase_set_timeout (tcase_check, 0);
|
||||||
|
+ suite_add_tcase (suite, tcase_check);
|
||||||
|
+
|
||||||
|
+ tcase_add_checked_fixture (tcase_change, set_test, free_test);
|
||||||
|
+ tcase_add_test (tcase_change, test_change_volser);
|
||||||
|
+ tcase_set_timeout (tcase_change, 0);
|
||||||
|
+ suite_add_tcase (suite, tcase_change);
|
||||||
|
+
|
||||||
|
+ tcase_add_checked_fixture (tcase_get, set_test, free_test);
|
||||||
|
+ tcase_add_test (tcase_get, test_get_volser);
|
||||||
|
+ tcase_set_timeout (tcase_get, 0);
|
||||||
|
+ suite_add_tcase (suite, tcase_get);
|
||||||
|
+
|
||||||
|
+ tcase_add_checked_fixture (tcase_vtoc, set_test, free_test);
|
||||||
|
+ tcase_add_test (tcase_vtoc, test_reuse_vtoc);
|
||||||
|
+ tcase_set_timeout (tcase_vtoc, 0);
|
||||||
|
+ suite_add_tcase (suite, tcase_vtoc);
|
||||||
|
+
|
||||||
|
+ SRunner *srunner = srunner_create (suite);
|
||||||
|
+ /* When to debug, uncomment this line */
|
||||||
|
+ /* srunner_set_fork_status (srunner, CK_NOFORK); */
|
||||||
|
+
|
||||||
|
+ srunner_run_all (srunner, CK_VERBOSE);
|
||||||
|
+
|
||||||
|
+ number_failed = srunner_ntests_failed (srunner);
|
||||||
|
+ srunner_free (srunner);
|
||||||
|
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
From 571e078406b59e8dcf02db3e8fe28d8eb4d2cef0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Wed, 26 Oct 2016 04:22:49 +0200
|
||||||
|
Subject: [PATCH] libparted/dasd: add test cases for the new fdasd functions
|
||||||
|
|
||||||
|
The test case uses a temporary file in libparted/tests under
|
||||||
|
Check framwork. It can be issued by "make check" in the test dir.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||||
|
---
|
||||||
|
libparted/tests/Makefile.am | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
|
||||||
|
index c7c10a9..9689fb3 100644
|
||||||
|
--- a/libparted/tests/Makefile.am
|
||||||
|
+++ b/libparted/tests/Makefile.am
|
||||||
|
@@ -3,9 +3,9 @@
|
||||||
|
#
|
||||||
|
# This file may be modified and/or distributed without restriction.
|
||||||
|
|
||||||
|
-TESTS = t1000-label.sh t2000-disk.sh t2100-zerolen.sh t3000-symlink.sh
|
||||||
|
+TESTS = t1000-label.sh t2000-disk.sh t2100-zerolen.sh t3000-symlink.sh t4000-volser.sh
|
||||||
|
EXTRA_DIST = $(TESTS)
|
||||||
|
-check_PROGRAMS = label disk zerolen symlink
|
||||||
|
+check_PROGRAMS = label disk zerolen symlink volser
|
||||||
|
AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
|
||||||
|
|
||||||
|
LDADD = \
|
||||||
|
@@ -23,6 +23,7 @@ label_SOURCES = common.h common.c label.c
|
||||||
|
disk_SOURCES = common.h common.c disk.c
|
||||||
|
zerolen_SOURCES = common.h common.c zerolen.c
|
||||||
|
symlink_SOURCES = common.h common.c symlink.c
|
||||||
|
+volser_SOURCES = common.h common.c volser.c
|
||||||
|
|
||||||
|
# Arrange to symlink to tests/init.sh.
|
||||||
|
CLEANFILES = init.sh
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
53
libparted-dasd-correct-the-offset-where-the-first-pa.patch
Normal file
53
libparted-dasd-correct-the-offset-where-the-first-pa.patch
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
From 4126d0292c75cf7d50a2f4e9d485a52b5beafccc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Tue, 14 Jun 2016 12:19:40 +0200
|
||||||
|
Subject: [PATCH] libparted/dasd: correct the offset where the first partition
|
||||||
|
begins
|
||||||
|
|
||||||
|
The start point of first partition must start at least from the third
|
||||||
|
track of DASD, due to the existence of metadata in the first two track.
|
||||||
|
The previous constraint just sets all the device to be partitioned.
|
||||||
|
So when the start point of the first partition start before the third
|
||||||
|
track, (For example if it starts from.0) parted will exit abruptly.
|
||||||
|
And this kind of job must be done with constraint explicitly.
|
||||||
|
|
||||||
|
Then the constraint is modified to exclude the first two tracks and
|
||||||
|
to make the first partition start from the third track by default.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Reviewed-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||||
|
---
|
||||||
|
libparted/labels/dasd.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
|
||||||
|
index f79a867..4e68512 100644
|
||||||
|
--- a/libparted/labels/dasd.c
|
||||||
|
+++ b/libparted/labels/dasd.c
|
||||||
|
@@ -829,6 +829,7 @@ _primary_constraint (PedDisk* disk)
|
||||||
|
PedSector sector_size;
|
||||||
|
LinuxSpecific* arch_specific;
|
||||||
|
DasdDiskSpecific* disk_specific;
|
||||||
|
+ PedSector start;
|
||||||
|
|
||||||
|
PDEBUG;
|
||||||
|
|
||||||
|
@@ -842,7 +843,12 @@ _primary_constraint (PedDisk* disk)
|
||||||
|
if (!ped_alignment_init (&end_align, -1,
|
||||||
|
disk->dev->hw_geom.sectors * sector_size))
|
||||||
|
return NULL;
|
||||||
|
- if (!ped_geometry_init (&max_geom, disk->dev, 0, disk->dev->length))
|
||||||
|
+
|
||||||
|
+ start = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors
|
||||||
|
+ * (long long) arch_specific->real_sector_size
|
||||||
|
+ / (long long) disk->dev->sector_size);
|
||||||
|
+
|
||||||
|
+ if (!ped_geometry_init (&max_geom, disk->dev, start, disk->dev->length))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return ped_constraint_new(&start_align, &end_align, &max_geom,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
From: Petr Uzel <petr.uzel@suse.cz>
|
|
||||||
Subject: libparted: dasd: Do not use first tracks
|
|
||||||
Patch-mainline: v3.3, solved a bit differently in 4126d0292c75
|
|
||||||
---
|
|
||||||
libparted/labels/dasd.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: parted-3.2/libparted/labels/dasd.c
|
|
||||||
===================================================================
|
|
||||||
--- parted-3.2.orig/libparted/labels/dasd.c
|
|
||||||
+++ parted-3.2/libparted/labels/dasd.c
|
|
||||||
@@ -844,7 +844,8 @@ _primary_constraint (PedDisk* disk)
|
|
||||||
if (!ped_alignment_init (&end_align, -1,
|
|
||||||
disk->dev->hw_geom.sectors * sector_size))
|
|
||||||
return NULL;
|
|
||||||
- if (!ped_geometry_init (&max_geom, disk->dev, 0, disk->dev->length))
|
|
||||||
+ if (!ped_geometry_init (&max_geom, disk->dev, 2 * disk->dev->hw_geom.sectors * sector_size,
|
|
||||||
+ disk->dev->length - 2 * disk->dev->hw_geom.sectors * sector_size))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return ped_constraint_new(&start_align, &end_align, &max_geom,
|
|
@ -1,9 +1,7 @@
|
|||||||
|
From 4f25d54d4d2bd6ae12d56b5a97ed2b7f60f753e9 Mon Sep 17 00:00:00 2001
|
||||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
Date: Wed, 26 Oct 2016 04:22:46 +0200
|
Date: Wed, 26 Oct 2016 04:22:46 +0200
|
||||||
Subject: libparted/dasd: unify vtoc handling for cdl/ldl
|
Subject: [PATCH] libparted/dasd: unify vtoc handling for cdl/ldl
|
||||||
References: fate#321531
|
|
||||||
Patch-mainline: v3.3
|
|
||||||
Git-commit: 4f25d54d4d2bd6ae12d56b5a97ed2b7f60f753e9
|
|
||||||
|
|
||||||
Merge volume label cdl and ldl. It is convenient to manipulate
|
Merge volume label cdl and ldl. It is convenient to manipulate
|
||||||
the same structure. Also remove unused arguments in the functions.
|
the same structure. Also remove unused arguments in the functions.
|
||||||
@ -11,13 +9,14 @@ the same structure. Also remove unused arguments in the functions.
|
|||||||
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|
||||||
---
|
---
|
||||||
include/parted/vtoc.in.h | 34 +++++++++++++++++++---------------
|
include/parted/vtoc.in.h | 34 +++++++++++++++++++---------------
|
||||||
libparted/labels/dasd.c | 8 +++-----
|
libparted/labels/dasd.c | 8 +++-----
|
||||||
libparted/labels/vtoc.c | 38 +++++++++++++++++---------------------
|
libparted/labels/vtoc.c | 38 +++++++++++++++++---------------------
|
||||||
3 files changed, 39 insertions(+), 41 deletions(-)
|
3 files changed, 39 insertions(+), 41 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/parted/vtoc.in.h b/include/parted/vtoc.in.h
|
||||||
|
index 499c2d3..b9da23a 100644
|
||||||
--- a/include/parted/vtoc.in.h
|
--- a/include/parted/vtoc.in.h
|
||||||
+++ b/include/parted/vtoc.in.h
|
+++ b/include/parted/vtoc.in.h
|
||||||
@@ -62,7 +62,6 @@ typedef struct cchh cchh_t;
|
@@ -62,7 +62,6 @@ typedef struct cchh cchh_t;
|
||||||
@ -28,7 +27,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
typedef struct extent extent_t;
|
typedef struct extent extent_t;
|
||||||
typedef struct dev_const dev_const_t;
|
typedef struct dev_const dev_const_t;
|
||||||
typedef struct format1_label format1_label_t;
|
typedef struct format1_label format1_label_t;
|
||||||
@@ -94,6 +93,19 @@ struct __attribute__ ((packed)) labeldat
|
@@ -94,6 +93,19 @@ struct __attribute__ ((packed)) labeldate {
|
||||||
u_int16_t day;
|
u_int16_t day;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
struct __attribute__ ((packed)) volume_label {
|
struct __attribute__ ((packed)) volume_label {
|
||||||
char volkey[4]; /* volume key = volume label */
|
char volkey[4]; /* volume key = volume label */
|
||||||
char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */
|
char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */
|
||||||
@@ -107,15 +119,8 @@ struct __attribute__ ((packed)) volume_l
|
@@ -107,15 +119,8 @@ struct __attribute__ ((packed)) volume_label {
|
||||||
char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */
|
char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */
|
||||||
char res2[4]; /* reserved */
|
char res2[4]; /* reserved */
|
||||||
char lvtoc[14]; /* owner code for LVTOC */
|
char lvtoc[14]; /* owner code for LVTOC */
|
||||||
@ -66,7 +65,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in
|
u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in
|
||||||
EBCDIC) */
|
EBCDIC) */
|
||||||
};
|
};
|
||||||
@@ -335,11 +340,10 @@ void vtoc_write_label (int fd, unsigned
|
@@ -335,11 +340,10 @@ void vtoc_write_label (int fd, unsigned long position,
|
||||||
format7_label_t const *f7,
|
format7_label_t const *f7,
|
||||||
format9_label_t const *f9);
|
format9_label_t const *f9);
|
||||||
|
|
||||||
@ -79,7 +78,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
unsigned int compat_cylinders,
|
unsigned int compat_cylinders,
|
||||||
unsigned int real_cylinders,
|
unsigned int real_cylinders,
|
||||||
unsigned int tracks,
|
unsigned int tracks,
|
||||||
@@ -352,11 +356,11 @@ void vtoc_update_format4_label (format4_
|
@@ -352,11 +356,11 @@ void vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1,
|
||||||
|
|
||||||
void vtoc_init_format5_label (format5_label_t *f5);
|
void vtoc_init_format5_label (format5_label_t *f5);
|
||||||
|
|
||||||
@ -93,7 +92,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
int trk, u_int16_t a, u_int16_t b,
|
int trk, u_int16_t a, u_int16_t b,
|
||||||
u_int8_t c);
|
u_int8_t c);
|
||||||
|
|
||||||
@@ -368,7 +372,7 @@ void vtoc_update_format7_label_add (form
|
@@ -368,7 +372,7 @@ void vtoc_update_format7_label_add (format7_label_t *f7, int verbose,
|
||||||
void vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
|
void vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
|
||||||
u_int32_t a, u_int32_t b);
|
u_int32_t a, u_int32_t b);
|
||||||
|
|
||||||
@ -102,9 +101,11 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
extent_t *part_extent, format1_label_t *f1);
|
extent_t *part_extent, format1_label_t *f1);
|
||||||
|
|
||||||
void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8);
|
void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8);
|
||||||
|
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
|
||||||
|
index 4e68512..7594e96 100644
|
||||||
--- a/libparted/labels/dasd.c
|
--- a/libparted/labels/dasd.c
|
||||||
+++ b/libparted/labels/dasd.c
|
+++ b/libparted/labels/dasd.c
|
||||||
@@ -345,13 +345,12 @@ dasd_read (PedDisk* disk)
|
@@ -330,13 +330,12 @@ dasd_read (PedDisk* disk)
|
||||||
DasdPartitionData* dasd_data;
|
DasdPartitionData* dasd_data;
|
||||||
|
|
||||||
union vollabel {
|
union vollabel {
|
||||||
@ -120,7 +121,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
int partition_start_block;
|
int partition_start_block;
|
||||||
|
|
||||||
disk_specific->format_type = 1;
|
disk_specific->format_type = 1;
|
||||||
@@ -375,8 +374,7 @@ dasd_read (PedDisk* disk)
|
@@ -360,8 +359,7 @@ dasd_read (PedDisk* disk)
|
||||||
* (long long) cms_ptr->disk_offset;
|
* (long long) cms_ptr->disk_offset;
|
||||||
|
|
||||||
if (is_ldl)
|
if (is_ldl)
|
||||||
@ -130,6 +131,8 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
end = (long long) arch_specific->real_sector_size
|
end = (long long) arch_specific->real_sector_size
|
||||||
/ (long long) disk->dev->sector_size
|
/ (long long) disk->dev->sector_size
|
||||||
* (long long) ldl_ptr->formatted_blocks - 1;
|
* (long long) ldl_ptr->formatted_blocks - 1;
|
||||||
|
diff --git a/libparted/labels/vtoc.c b/libparted/labels/vtoc.c
|
||||||
|
index fdfa94f..d47b791 100644
|
||||||
--- a/libparted/labels/vtoc.c
|
--- a/libparted/labels/vtoc.c
|
||||||
+++ b/libparted/labels/vtoc.c
|
+++ b/libparted/labels/vtoc.c
|
||||||
@@ -150,7 +150,7 @@ enum failure {
|
@@ -150,7 +150,7 @@ enum failure {
|
||||||
@ -150,7 +153,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
vtoc_ebcdic_enc(buffer, buffer, sizeof *vlabel);
|
vtoc_ebcdic_enc(buffer, buffer, sizeof *vlabel);
|
||||||
memcpy(vlabel, buffer, sizeof *vlabel);
|
memcpy(vlabel, buffer, sizeof *vlabel);
|
||||||
}
|
}
|
||||||
@@ -348,8 +348,8 @@ vtoc_read_volume_label (int f, unsigned
|
@@ -348,8 +348,8 @@ vtoc_read_volume_label (int f, unsigned long vlabel_start,
|
||||||
typedef union vollabel vollabel_t;
|
typedef union vollabel vollabel_t;
|
||||||
|
|
||||||
union __attribute__((packed)) vollabel {
|
union __attribute__((packed)) vollabel {
|
||||||
@ -160,7 +163,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
cms_volume_label_t cms;
|
cms_volume_label_t cms;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -373,9 +373,7 @@ vtoc_read_volume_label (int f, unsigned
|
@@ -373,9 +373,7 @@ vtoc_read_volume_label (int f, unsigned long vlabel_start,
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = read(f, vlabel, sizeof(volume_label_t));
|
rc = read(f, vlabel, sizeof(volume_label_t));
|
||||||
@ -171,7 +174,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
vtoc_error(unable_to_read, "vtoc_read_volume_label",
|
vtoc_error(unable_to_read, "vtoc_read_volume_label",
|
||||||
_("Could not read volume label."));
|
_("Could not read volume label."));
|
||||||
return 1;
|
return 1;
|
||||||
@@ -427,10 +425,8 @@ vtoc_write_volume_label (int f, unsigned
|
@@ -427,10 +425,8 @@ vtoc_write_volume_label (int f, unsigned long vlabel_start,
|
||||||
vtoc_error(unable_to_seek, "vtoc_write_volume_label",
|
vtoc_error(unable_to_seek, "vtoc_write_volume_label",
|
||||||
_("Could not write volume label."));
|
_("Could not write volume label."));
|
||||||
|
|
||||||
@ -184,7 +187,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
vtoc_error(unable_to_write, "vtoc_write_volume_label",
|
vtoc_error(unable_to_write, "vtoc_write_volume_label",
|
||||||
_("Could not write volume label."));
|
_("Could not write volume label."));
|
||||||
|
|
||||||
@@ -632,7 +628,7 @@ vtoc_write_label (int f, unsigned long p
|
@@ -632,7 +628,7 @@ vtoc_write_label (int f, unsigned long position,
|
||||||
* initializes a format4 label
|
* initializes a format4 label
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -193,7 +196,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
unsigned int compat_cylinders,
|
unsigned int compat_cylinders,
|
||||||
unsigned int real_cylinders, unsigned int tracks,
|
unsigned int real_cylinders, unsigned int tracks,
|
||||||
unsigned int blocks, unsigned int blksize,
|
unsigned int blocks, unsigned int blksize,
|
||||||
@@ -740,7 +736,7 @@ vtoc_init_format7_label (format7_label_t
|
@@ -740,7 +736,7 @@ vtoc_init_format7_label (format7_label_t *f7)
|
||||||
* format1 or format 8 label, all but the field DS1FMTID
|
* format1 or format 8 label, all but the field DS1FMTID
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -202,7 +205,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
extent_t *part_extent, format1_label_t *f1)
|
extent_t *part_extent, format1_label_t *f1)
|
||||||
{
|
{
|
||||||
PDEBUG
|
PDEBUG
|
||||||
@@ -794,18 +790,18 @@ vtoc_init_format_1_8_label (char *volid,
|
@@ -794,18 +790,18 @@ vtoc_init_format_1_8_label (char *volid, unsigned int blksize,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -225,7 +228,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
f8->DS1FMTID = 0xf8;
|
f8->DS1FMTID = 0xf8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -886,7 +882,7 @@ vtoc_reorganize_FMT5_extents (format5_la
|
@@ -886,7 +882,7 @@ vtoc_reorganize_FMT5_extents (format5_label_t *f5)
|
||||||
* add a free space extent description to the VTOC FMT5 DSCB
|
* add a free space extent description to the VTOC FMT5 DSCB
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -234,7 +237,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
||||||
{
|
{
|
||||||
PDEBUG
|
PDEBUG
|
||||||
@@ -974,7 +970,7 @@ vtoc_update_format5_label_add (format5_l
|
@@ -974,7 +970,7 @@ vtoc_update_format5_label_add (format5_label_t *f5, int verbose, int cyl,
|
||||||
* remove a free space extent description from the VTOC FMT5 DSCB
|
* remove a free space extent description from the VTOC FMT5 DSCB
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -243,7 +246,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
||||||
{
|
{
|
||||||
PDEBUG
|
PDEBUG
|
||||||
@@ -1054,7 +1050,7 @@ vtoc_update_format5_label_del (format5_l
|
@@ -1054,7 +1050,7 @@ vtoc_update_format5_label_del (format5_label_t *f5, int verbose, int cyl,
|
||||||
ext->ft = (a - ext->t) % trk;
|
ext->ft = (a - ext->t) % trk;
|
||||||
|
|
||||||
vtoc_update_format5_label_add(f5, verbose,
|
vtoc_update_format5_label_add(f5, verbose,
|
||||||
@ -252,7 +255,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
puts ("FMT5 del extent: 2 pieces");
|
puts ("FMT5 del extent: 2 pieces");
|
||||||
@@ -1322,9 +1318,9 @@ vtoc_set_freespace(format4_label_t *f4,
|
@@ -1322,9 +1318,9 @@ vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5,
|
||||||
z = (u_int8_t) ((stop - start + 1) % trk);
|
z = (u_int8_t) ((stop - start + 1) % trk);
|
||||||
|
|
||||||
if (ch == '+')
|
if (ch == '+')
|
||||||
@ -264,3 +267,6 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
else
|
else
|
||||||
puts ("BUG: syntax error in vtoc_set_freespace call");
|
puts ("BUG: syntax error in vtoc_set_freespace call");
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
|
From db37c8c017ebef8f241420dda071940957d4bbe5 Mon Sep 17 00:00:00 2001
|
||||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
Date: Wed, 26 Oct 2016 04:22:47 +0200
|
Date: Wed, 26 Oct 2016 04:22:47 +0200
|
||||||
Subject: libparted/dasd: update and improve fdasd functions
|
Subject: [PATCH] libparted/dasd: update and improve fdasd functions
|
||||||
References: fate#321531
|
|
||||||
Patch-mainline: v3.3
|
|
||||||
Git-commit: db37c8c017ebef8f241420dda071940957d4bbe5
|
|
||||||
|
|
||||||
Update the fdasd_anchor_t data structure and the fdasd_cleanup()
|
Update the fdasd_anchor_t data structure and the fdasd_cleanup()
|
||||||
function. Also correct vtoc_changed and vlabel_changed accounting
|
function. Also correct vtoc_changed and vlabel_changed accounting
|
||||||
@ -13,12 +11,13 @@ Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
|||||||
Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
|
||||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|
||||||
---
|
---
|
||||||
include/parted/fdasd.in.h | 14 +++++-------
|
include/parted/fdasd.in.h | 14 +++++-------
|
||||||
libparted/labels/fdasd.c | 56 ++++++++++++++++++++++++-----------------------
|
libparted/labels/fdasd.c | 56 ++++++++++++++++++++++++-----------------------
|
||||||
2 files changed, 35 insertions(+), 35 deletions(-)
|
2 files changed, 35 insertions(+), 35 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/parted/fdasd.in.h b/include/parted/fdasd.in.h
|
||||||
|
index 4e351c4..09a35a0 100644
|
||||||
--- a/include/parted/fdasd.in.h
|
--- a/include/parted/fdasd.in.h
|
||||||
+++ b/include/parted/fdasd.in.h
|
+++ b/include/parted/fdasd.in.h
|
||||||
@@ -186,6 +186,7 @@ typedef struct format_data_t {
|
@@ -186,6 +186,7 @@ typedef struct format_data_t {
|
||||||
@ -68,6 +67,8 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
};
|
};
|
||||||
|
|
||||||
void fdasd_cleanup (fdasd_anchor_t *anchor);
|
void fdasd_cleanup (fdasd_anchor_t *anchor);
|
||||||
|
diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
|
||||||
|
index 968b332..e5df5cf 100644
|
||||||
--- a/libparted/labels/fdasd.c
|
--- a/libparted/labels/fdasd.c
|
||||||
+++ b/libparted/labels/fdasd.c
|
+++ b/libparted/labels/fdasd.c
|
||||||
@@ -106,28 +106,26 @@ fdasd_cleanup (fdasd_anchor_t *anchor)
|
@@ -106,28 +106,26 @@ fdasd_cleanup (fdasd_anchor_t *anchor)
|
||||||
@ -115,7 +116,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,6 +188,9 @@ fdasd_error (fdasd_anchor_t *anc, enum f
|
@@ -190,6 +188,9 @@ fdasd_error (fdasd_anchor_t *anc, enum fdasd_failure why, char const *str)
|
||||||
_("Device verification failed"),
|
_("Device verification failed"),
|
||||||
_("The specified device is not a valid DASD device"));
|
_("The specified device is not a valid DASD device"));
|
||||||
break;
|
break;
|
||||||
@ -125,7 +126,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
default:
|
default:
|
||||||
sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str);
|
sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str);
|
||||||
}
|
}
|
||||||
@@ -287,7 +288,7 @@ fdasd_write_vtoc_labels (fdasd_anchor_t
|
@@ -287,7 +288,7 @@ fdasd_write_vtoc_labels (fdasd_anchor_t * anc, int fd)
|
||||||
PDEBUG
|
PDEBUG
|
||||||
partition_info_t *p;
|
partition_info_t *p;
|
||||||
unsigned long b, maxblk;
|
unsigned long b, maxblk;
|
||||||
@ -134,7 +135,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
int i = 0, k = 0;
|
int i = 0, k = 0;
|
||||||
cchhb_t f9addr;
|
cchhb_t f9addr;
|
||||||
format1_label_t emptyf1;
|
format1_label_t emptyf1;
|
||||||
@@ -519,7 +520,6 @@ fdasd_recreate_vtoc (fdasd_anchor_t *anc
|
@@ -519,7 +520,6 @@ fdasd_recreate_vtoc (fdasd_anchor_t *anc)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
vtoc_init_format4_label(anc->f4,
|
vtoc_init_format4_label(anc->f4,
|
||||||
@ -142,7 +143,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
anc->geo.cylinders,
|
anc->geo.cylinders,
|
||||||
anc->formatted_cylinders,
|
anc->formatted_cylinders,
|
||||||
anc->geo.heads,
|
anc->geo.heads,
|
||||||
@@ -767,7 +767,7 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_
|
@@ -767,7 +767,7 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc)
|
||||||
anc->formatted_cylinders = anc->hw_cylinders;
|
anc->formatted_cylinders = anc->hw_cylinders;
|
||||||
anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||||
- FIRST_USABLE_TRK;
|
- FIRST_USABLE_TRK;
|
||||||
@ -151,7 +152,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
anc->geo.cylinders, anc->formatted_cylinders,
|
anc->geo.cylinders, anc->formatted_cylinders,
|
||||||
anc->geo.heads, anc->geo.sectors,
|
anc->geo.heads, anc->geo.sectors,
|
||||||
anc->blksize, anc->dev_type);
|
anc->blksize, anc->dev_type);
|
||||||
@@ -781,6 +781,8 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_
|
@@ -781,6 +781,8 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc)
|
||||||
anc->formatted_cylinders, anc->geo.heads);
|
anc->formatted_cylinders, anc->geo.heads);
|
||||||
|
|
||||||
vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
||||||
@ -160,7 +161,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -792,7 +794,7 @@ fdasd_process_invalid_vtoc(fdasd_anchor_
|
@@ -792,7 +794,7 @@ fdasd_process_invalid_vtoc(fdasd_anchor_t *anc)
|
||||||
anc->formatted_cylinders = anc->hw_cylinders;
|
anc->formatted_cylinders = anc->hw_cylinders;
|
||||||
anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
|
||||||
- FIRST_USABLE_TRK;
|
- FIRST_USABLE_TRK;
|
||||||
@ -169,7 +170,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
anc->geo.cylinders, anc->formatted_cylinders,
|
anc->geo.cylinders, anc->formatted_cylinders,
|
||||||
anc->geo.heads, anc->geo.sectors,
|
anc->geo.heads, anc->geo.sectors,
|
||||||
anc->blksize, anc->dev_type);
|
anc->blksize, anc->dev_type);
|
||||||
@@ -803,6 +805,8 @@ fdasd_process_invalid_vtoc(fdasd_anchor_
|
@@ -803,6 +805,8 @@ fdasd_process_invalid_vtoc(fdasd_anchor_t *anc)
|
||||||
FIRST_USABLE_TRK,
|
FIRST_USABLE_TRK,
|
||||||
anc->formatted_cylinders * anc->geo.heads - 1,
|
anc->formatted_cylinders * anc->geo.heads - 1,
|
||||||
anc->formatted_cylinders, anc->geo.heads);
|
anc->formatted_cylinders, anc->geo.heads);
|
||||||
@ -178,7 +179,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -875,7 +879,7 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
@@ -875,7 +879,7 @@ fdasd_check_volume (fdasd_anchor_t *anc, int fd)
|
||||||
|
|
||||||
fdasd_init_volume_label(anc, fd);
|
fdasd_init_volume_label(anc, fd);
|
||||||
|
|
||||||
@ -187,7 +188,7 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
anc->geo.cylinders, anc->formatted_cylinders,
|
anc->geo.cylinders, anc->formatted_cylinders,
|
||||||
anc->geo.heads, anc->geo.sectors,
|
anc->geo.heads, anc->geo.sectors,
|
||||||
anc->blksize, anc->dev_type);
|
anc->blksize, anc->dev_type);
|
||||||
@@ -1286,12 +1290,10 @@ fdasd_add_partition (fdasd_anchor_t *anc
|
@@ -1286,12 +1290,10 @@ fdasd_add_partition (fdasd_anchor_t *anc, unsigned int start,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (anc->formatted_cylinders > LV_COMPAT_CYL) {
|
if (anc->formatted_cylinders > LV_COMPAT_CYL) {
|
||||||
@ -202,3 +203,6 @@ Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
PDEBUG;
|
PDEBUG;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
||||||
|
40
parted-check-the-name-of-partition-first-when-to-nam.patch
Normal file
40
parted-check-the-name-of-partition-first-when-to-nam.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From d7a2ff17b15842bf9a3de65ca1ba577bdf568e79 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 24 Mar 2017 03:11:08 +0100
|
||||||
|
Subject: [PATCH] parted: check the name of partition first when to name a
|
||||||
|
partition
|
||||||
|
|
||||||
|
The previous function works well for the labels supporting naming
|
||||||
|
partition, but not for these which don't. If the disk label does not
|
||||||
|
support partition naming, two exceptions will be raised. Even after the first
|
||||||
|
error indicates it does not support name, parted yet asks user for
|
||||||
|
name in iteractive mode.
|
||||||
|
|
||||||
|
First check if the disk label supports partition naming and if it
|
||||||
|
does, it will continue; otherwise, it will stop and raise an
|
||||||
|
exception.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
parted/parted.c | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
Index: parted-3.2/parted/parted.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/parted/parted.c
|
||||||
|
+++ parted-3.2/parted/parted.c
|
||||||
|
@@ -930,6 +930,13 @@ do_name (PedDevice** dev, PedDisk** disk
|
||||||
|
if (!diskp)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
+ if (!ped_disk_type_check_feature((*diskp)->type, PED_DISK_TYPE_PARTITION_NAME)) {
|
||||||
|
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
|
||||||
|
+ _("%s disk labels do not support partition name."),
|
||||||
|
+ (*diskp)->type->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
|
||||||
|
goto error;
|
||||||
|
|
93
parted-fix-crash-due-to-improper-partition-number-in.patch
Normal file
93
parted-fix-crash-due-to-improper-partition-number-in.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
From 149f009c3b4ab6bac8059b48142a1c3f698c8e53 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 23 Dec 2016 06:53:36 +0100
|
||||||
|
Subject: [PATCH] parted: fix crash due to improper partition number input
|
||||||
|
|
||||||
|
When the user makes a new partition, if parted fails to add the
|
||||||
|
partition to disk, it jumps to wrong error label. In this
|
||||||
|
situation, this new partition actually is not a node in disk
|
||||||
|
data structure. But in the wrong error label, it pretends this
|
||||||
|
is a node and removes it as a list node, leading to other
|
||||||
|
partition in this disk deleted. This might lead to a memory leak.
|
||||||
|
Because if there are other partitions, it just removes them from
|
||||||
|
list without releasing the resource. And this also leads to different
|
||||||
|
disk information between memory and device. This is confusing.
|
||||||
|
|
||||||
|
But when the new partition is added to disk successfully and if
|
||||||
|
any operations followed fail, this partition should be removed from
|
||||||
|
disk and destroyed.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
parted/ui.c | 26 ++++++++++++++++++++++----
|
||||||
|
1 file changed, 22 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/parted/ui.c b/parted/ui.c
|
||||||
|
index 505b8ac..5d76c20 100644
|
||||||
|
--- a/parted/ui.c
|
||||||
|
+++ b/parted/ui.c
|
||||||
|
@@ -29,6 +29,8 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <assert.h>
|
||||||
|
+#include <limits.h>
|
||||||
|
+#include <errno.h>
|
||||||
|
|
||||||
|
#include "command.h"
|
||||||
|
#include "strlist.h"
|
||||||
|
@@ -909,16 +911,30 @@ command_line_get_integer (const char* prompt, int* value)
|
||||||
|
{
|
||||||
|
char def_str [10];
|
||||||
|
char* input;
|
||||||
|
- int valid;
|
||||||
|
+ long ret;
|
||||||
|
|
||||||
|
snprintf (def_str, 10, "%d", *value);
|
||||||
|
input = command_line_get_word (prompt, *value ? def_str : NULL,
|
||||||
|
NULL, 1);
|
||||||
|
if (!input)
|
||||||
|
return 0;
|
||||||
|
- valid = sscanf (input, "%d", value);
|
||||||
|
+
|
||||||
|
+ errno = 0;
|
||||||
|
+ ret = strtol (input, (char**) NULL, 0);
|
||||||
|
+ if (errno)
|
||||||
|
+ goto error;
|
||||||
|
+
|
||||||
|
+ if ((ret > INT_MAX) || (ret < INT_MIN))
|
||||||
|
+ goto error;
|
||||||
|
+ else
|
||||||
|
+ *value = (int) ret;
|
||||||
|
+
|
||||||
|
free (input);
|
||||||
|
- return valid;
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+error:
|
||||||
|
+ free (input);
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
@@ -1029,6 +1045,7 @@ command_line_get_partition (const char* prompt, PedDisk* disk,
|
||||||
|
PedPartition** value)
|
||||||
|
{
|
||||||
|
PedPartition* part;
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
/* Flawed logic, doesn't seem to work?!
|
||||||
|
check = ped_disk_next_partition (disk, part);
|
||||||
|
@@ -1045,7 +1062,8 @@ command_line_get_partition (const char* prompt, PedDisk* disk,
|
||||||
|
*/
|
||||||
|
int num = (*value) ? (*value)->num : 0;
|
||||||
|
|
||||||
|
- if (!command_line_get_integer (prompt, &num)) {
|
||||||
|
+ ret = command_line_get_integer (prompt, &num);
|
||||||
|
+ if ((!ret) || (num < 0)) {
|
||||||
|
ped_exception_throw (PED_EXCEPTION_ERROR,
|
||||||
|
PED_EXCEPTION_CANCEL,
|
||||||
|
_("Expecting a partition number."));
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
66
parted-fix-wrong-error-label-jump-in-mkpart.patch
Normal file
66
parted-fix-wrong-error-label-jump-in-mkpart.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From af150f6764a08eae4b4cf448c392259c067a1523 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 23 Dec 2016 06:53:37 +0100
|
||||||
|
Subject: [PATCH] parted: fix wrong error label jump in mkpart
|
||||||
|
|
||||||
|
When the user makes a new partition, if parted fails to add the
|
||||||
|
partition to disk, it jumps to wrong error label. In this
|
||||||
|
situation, this new partition actually is not a node in disk
|
||||||
|
data structure. But in the wrong error label, it pretends this
|
||||||
|
is a node and removes it as a list node, leading to other
|
||||||
|
partition in this disk deleted. This might lead to a memory leak.
|
||||||
|
Because if there are other partitions, it just removes them from
|
||||||
|
list without releasing the resource. And this also leads to different
|
||||||
|
disk information between memory and device. This is confusing.
|
||||||
|
|
||||||
|
But when the new partition is added to disk successfully and if
|
||||||
|
any operations followed fail, this partition should be removed from
|
||||||
|
disk and destroyed.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
parted/parted.c | 9 +++++----
|
||||||
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
Index: parted-3.2/parted/parted.c
|
||||||
|
===================================================================
|
||||||
|
--- parted-3.2.orig/parted/parted.c
|
||||||
|
+++ parted-3.2/parted/parted.c
|
||||||
|
@@ -796,7 +796,7 @@ do_mkpart (PedDevice** dev, PedDisk** di
|
||||||
|
ped_constraint_destroy (constraint_any);
|
||||||
|
|
||||||
|
if (!added_ok)
|
||||||
|
- goto error_remove_part;
|
||||||
|
+ goto error_destroy_simple_constraints;
|
||||||
|
|
||||||
|
if (!ped_geometry_test_sector_inside(range_start, part->geom.start) ||
|
||||||
|
!ped_geometry_test_sector_inside(range_end, part->geom.end)) {
|
||||||
|
@@ -865,7 +865,7 @@ do_mkpart (PedDevice** dev, PedDisk** di
|
||||||
|
free (part_name); /* avoid double-free upon failure */
|
||||||
|
part_name = NULL;
|
||||||
|
if (!ped_partition_set_system (part, fs_type))
|
||||||
|
- goto error;
|
||||||
|
+ goto error_remove_part;
|
||||||
|
if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
|
||||||
|
ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
|
||||||
|
if (ped_partition_is_flag_available (part, PED_PARTITION_SWAP) &&
|
||||||
|
@@ -881,7 +881,7 @@ do_mkpart (PedDevice** dev, PedDisk** di
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ped_disk_commit (disk))
|
||||||
|
- goto error;
|
||||||
|
+ goto error_remove_part;
|
||||||
|
|
||||||
|
/* clean up */
|
||||||
|
if (range_start != NULL)
|
||||||
|
@@ -904,7 +904,8 @@ error_remove_part:
|
||||||
|
error_destroy_simple_constraints:
|
||||||
|
ped_partition_destroy (part);
|
||||||
|
error:
|
||||||
|
- free (part_name);
|
||||||
|
+ if (part_name)
|
||||||
|
+ free (part_name);
|
||||||
|
if (range_start != NULL)
|
||||||
|
ped_geometry_destroy (range_start);
|
||||||
|
if (range_end != NULL)
|
@ -162,17 +162,3 @@ Index: parted-3.2/parted/parted.c
|
|||||||
|
|
||||||
if (!ped_partition_set_flag (part, flag, state))
|
if (!ped_partition_set_flag (part, flag, state))
|
||||||
goto error;
|
goto error;
|
||||||
Index: parted-3.2/parted/ui.c
|
|
||||||
===================================================================
|
|
||||||
--- parted-3.2.orig/parted/ui.c
|
|
||||||
+++ parted-3.2/parted/ui.c
|
|
||||||
@@ -913,6 +913,9 @@ command_line_get_integer (const char* pr
|
|
||||||
NULL, 1);
|
|
||||||
if (!input)
|
|
||||||
return 0;
|
|
||||||
+ if (strstr(input, "0x") == input)
|
|
||||||
+ valid = sscanf (input, "%x", value);
|
|
||||||
+ else
|
|
||||||
valid = sscanf (input, "%d", value);
|
|
||||||
free (input);
|
|
||||||
return valid;
|
|
||||||
|
41
parted-ui-remove-unneccesary-information-of-command.patch
Normal file
41
parted-ui-remove-unneccesary-information-of-command.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
From 0b7946a095f307e427b81795cbc96028ee179b91 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Date: Fri, 24 Mar 2017 03:11:10 +0100
|
||||||
|
Subject: [PATCH] parted/ui: remove unneccesary information of command line
|
||||||
|
|
||||||
|
When some command fails, the information still exists in
|
||||||
|
command_line buffer. When in command mode or interactive mode,
|
||||||
|
if an interactive exception prompts, the remained information
|
||||||
|
will be processed as option from user. This will raise some other
|
||||||
|
information or even unexpected results. So before getting option
|
||||||
|
input from user, clean the command line buffer.
|
||||||
|
|
||||||
|
Example: When the disk label is invalid and user tries to make
|
||||||
|
new partition on the device with command like,
|
||||||
|
mkpart 0 50%. Then parted will raise an exception
|
||||||
|
telling an invalid disk label found and whether to correct it.
|
||||||
|
But at this time 0 as the input of mkpart will be
|
||||||
|
considered as the option input for the exception(yes/no).
|
||||||
|
So one more exception will raised with error information.
|
||||||
|
|
||||||
|
Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||||
|
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||||
|
---
|
||||||
|
parted/ui.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/parted/ui.c b/parted/ui.c
|
||||||
|
index af0539c..752860b 100644
|
||||||
|
--- a/parted/ui.c
|
||||||
|
+++ b/parted/ui.c
|
||||||
|
@@ -1288,6 +1288,7 @@ command_line_get_ex_opt (const char* prompt, PedExceptionOption options)
|
||||||
|
PedExceptionOption opt;
|
||||||
|
char* opt_name;
|
||||||
|
|
||||||
|
+ command_line_flush ();
|
||||||
|
for (opt = option_get_next (options, 0); opt;
|
||||||
|
opt = option_get_next (options, opt)) {
|
||||||
|
options_strlist = str_list_append_unique (options_strlist,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,3 +1,37 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 1 14:14:36 UTC 2019 - Anna Maresova <anicka@suse.com>
|
||||||
|
|
||||||
|
- port fixes for various bugs from upstream (bsc#1136245)
|
||||||
|
- add: libparted-dasd-correct-the-offset-where-the-first-pa.patch
|
||||||
|
4126d02, correct the offset where the first partition begins.
|
||||||
|
This patch implements libparted-dasd-do-not-use-first-tracks.patch
|
||||||
|
- remove: libparted-dasd-do-not-use-first-tracks.patch
|
||||||
|
- add: parted-fix-crash-due-to-improper-partition-number-in.patch
|
||||||
|
149f009, fix crash due to improper partition number input,
|
||||||
|
changed call to strtol, use base 0 to fit our parted-type.patch
|
||||||
|
- modify: parted-type.patch (removed ui.c part)
|
||||||
|
- add: parted-check-the-name-of-partition-first-when-to-nam.patch
|
||||||
|
d7a2ff1, check the name of partition first when to name a partition
|
||||||
|
- add: libparted-dasd-add-test-cases-for-the-new-fdasd-func.patch
|
||||||
|
c11f5c0, 571e078, add test cases for the new fdasd functions
|
||||||
|
- add: libparted-dasd-add-an-exception-for-changing-DASD-LD.patch
|
||||||
|
ee2c0c2, add an exception for changing DASD-LDL partition table
|
||||||
|
- add: libpartd-dasd-improve-flag-processing-for-DASD-LDL.patch
|
||||||
|
1545d6d, improve flag processing for DASD-LDL
|
||||||
|
- add: clean-the-disk-information-when-commands-fail-in-int.patch
|
||||||
|
5a61f15, clean the disk information when commands fail in
|
||||||
|
interactive mode
|
||||||
|
- add: parted-ui-remove-unneccesary-information-of-command.patch
|
||||||
|
0b7946a, remove unneccesary information of command line
|
||||||
|
- add: parted-fix-wrong-error-label-jump-in-mkpart.patch
|
||||||
|
af150f6, fix wrong error label jump in mkpart
|
||||||
|
- refresh: libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch
|
||||||
|
4f25d54, unify vtoc handling for cdl/ldl
|
||||||
|
- refresh: libparted-dasd-update-and-improve-fdasd-functions.patch
|
||||||
|
db37c8c, update and improve fdasd functions
|
||||||
|
- refresh: libparted-dasd-add-new-fdasd-functions.patch
|
||||||
|
b9e1281, add new fdasd functions
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Aug 1 14:49:47 UTC 2018 - sparschauer@suse.de
|
Wed Aug 1 14:49:47 UTC 2018 - sparschauer@suse.de
|
||||||
|
|
||||||
|
27
parted.spec
27
parted.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package parted
|
# spec file for package parted
|
||||||
#
|
#
|
||||||
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -12,7 +12,7 @@
|
|||||||
# license that conforms to the Open Source Definition (Version 1.9)
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
# published by the Open Source Initiative.
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
@ -40,7 +40,6 @@ Patch13: more-reliable-informing-the-kernel.patch
|
|||||||
Patch17: dummy-bootcode-only-for-x86.patch
|
Patch17: dummy-bootcode-only-for-x86.patch
|
||||||
Patch18: parted-type.patch
|
Patch18: parted-type.patch
|
||||||
Patch19: parted-mac.patch
|
Patch19: parted-mac.patch
|
||||||
Patch20: libparted-dasd-do-not-use-first-tracks.patch
|
|
||||||
Patch21: libparted-use-BLKRRPART-for-DASD.patch.patch
|
Patch21: libparted-use-BLKRRPART-for-DASD.patch.patch
|
||||||
Patch22: libparted-allow-bigger-snap-radius-if-cylinders-are-used.patch
|
Patch22: libparted-allow-bigger-snap-radius-if-cylinders-are-used.patch
|
||||||
Patch23: libparted-make-BLKRRPART-more-robust.patch
|
Patch23: libparted-make-BLKRRPART-more-robust.patch
|
||||||
@ -88,6 +87,18 @@ Patch59: parted-fix-resizepart-and-rm-command.patch
|
|||||||
Patch60: libparted-use-BLKRRPART-only-when-needed.patch
|
Patch60: libparted-use-BLKRRPART-only-when-needed.patch
|
||||||
Patch61: libparted-canonicalize-dev-md-paths.patch
|
Patch61: libparted-canonicalize-dev-md-paths.patch
|
||||||
Patch62: libparted-sysmacros.patch
|
Patch62: libparted-sysmacros.patch
|
||||||
|
|
||||||
|
# bsc#1136245
|
||||||
|
Patch63: libparted-dasd-correct-the-offset-where-the-first-pa.patch
|
||||||
|
Patch64: parted-fix-crash-due-to-improper-partition-number-in.patch
|
||||||
|
Patch65: parted-fix-wrong-error-label-jump-in-mkpart.patch
|
||||||
|
Patch66: clean-the-disk-information-when-commands-fail-in-int.patch
|
||||||
|
Patch67: parted-check-the-name-of-partition-first-when-to-nam.patch
|
||||||
|
Patch68: parted-ui-remove-unneccesary-information-of-command.patch
|
||||||
|
Patch69: libpartd-dasd-improve-flag-processing-for-DASD-LDL.patch
|
||||||
|
Patch70: libparted-dasd-add-an-exception-for-changing-DASD-LD.patch
|
||||||
|
Patch71: libparted-dasd-add-test-cases-for-the-new-fdasd-func.patch
|
||||||
|
|
||||||
# Fatresize
|
# Fatresize
|
||||||
Patch100: parted-fatresize-autoconf.patch
|
Patch100: parted-fatresize-autoconf.patch
|
||||||
Patch101: fatresize-fix-getting-dev-name.patch
|
Patch101: fatresize-fix-getting-dev-name.patch
|
||||||
@ -161,7 +172,6 @@ to develop applications that require these.
|
|||||||
%patch17 -p1
|
%patch17 -p1
|
||||||
%patch18 -p1
|
%patch18 -p1
|
||||||
%patch19 -p1
|
%patch19 -p1
|
||||||
%patch20 -p1
|
|
||||||
%patch21 -p1
|
%patch21 -p1
|
||||||
%patch22 -p1
|
%patch22 -p1
|
||||||
%patch23 -p1
|
%patch23 -p1
|
||||||
@ -203,6 +213,15 @@ to develop applications that require these.
|
|||||||
%patch60 -p1
|
%patch60 -p1
|
||||||
%patch61 -p1
|
%patch61 -p1
|
||||||
%patch62 -p1
|
%patch62 -p1
|
||||||
|
%patch63 -p1
|
||||||
|
%patch64 -p1
|
||||||
|
%patch65 -p1
|
||||||
|
%patch66 -p1
|
||||||
|
%patch67 -p1
|
||||||
|
%patch68 -p1
|
||||||
|
%patch69 -p1
|
||||||
|
%patch70 -p1
|
||||||
|
%patch71 -p1
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
%patch150 -p1
|
%patch150 -p1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user