- dasd: enhance device probing
- fdasd: geometry handling updated from upstream s390-tools
This commit is contained in:
parent
7f6b65822f
commit
b965023a70
281
0021-fdasd-geometry-handling-updated-from-upstream-s390-t.patch
Normal file
281
0021-fdasd-geometry-handling-updated-from-upstream-s390-t.patch
Normal file
@ -0,0 +1,281 @@
|
||||
From 4d480d980a9b69b432b8d60df3c4397ba8cdc965 Mon Sep 17 00:00:00 2001
|
||||
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||||
Date: Thu, 17 Sep 2015 15:33:28 +0200
|
||||
Subject: [PATCH 21/22] fdasd: geometry handling updated from upstream
|
||||
s390-tools
|
||||
|
||||
Remove the necessity for DASD-specific ioctls for partition handling.
|
||||
This allows to correctly handle DASD-backed virtio block devices.
|
||||
|
||||
Note that this is necessary because virtio is just the transport.
|
||||
A DASD, even if provided via virtio, still has it's unique
|
||||
characteristics, which means that only traditional DASD partition
|
||||
table formats can be used (no MBR, GPT, or similar).
|
||||
|
||||
Use bzero for initialization to make sure all struct members are
|
||||
properly cleared. Also changed partition list handling code to be
|
||||
more similar to upstream s390-tools fdasd.
|
||||
|
||||
Further, enhanced error handling capabilities by providing a
|
||||
return code by fdasd_get_geometry.
|
||||
|
||||
Code is largely backported from s390-tools project.
|
||||
|
||||
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||||
Acked-by: Stefan Haberland <stefan.haberland@de.ibm.com>
|
||||
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||
---
|
||||
include/parted/fdasd.in.h | 4 +-
|
||||
libparted/labels/fdasd.c | 166 ++++++++++++++++++++++++++++++++--------------
|
||||
2 files changed, 119 insertions(+), 51 deletions(-)
|
||||
|
||||
diff --git a/include/parted/fdasd.in.h b/include/parted/fdasd.in.h
|
||||
index 6f6a7e0..4e351c4 100644
|
||||
--- a/include/parted/fdasd.in.h
|
||||
+++ b/include/parted/fdasd.in.h
|
||||
@@ -190,6 +190,8 @@ typedef struct format_data_t {
|
||||
#define BLKRRPART _IO(0x12,95)
|
||||
/* get block device sector size */
|
||||
#define BLKSSZGET _IO(0x12,104)
|
||||
+/* device size in bytes (u64 *arg)*/
|
||||
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
|
||||
/* get device geometry */
|
||||
#define HDIO_GETGEO 0x0301
|
||||
|
||||
@@ -285,7 +287,7 @@ enum fdasd_failure {
|
||||
|
||||
void fdasd_cleanup (fdasd_anchor_t *anchor);
|
||||
void fdasd_initialize_anchor (fdasd_anchor_t * anc);
|
||||
-void fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int fd);
|
||||
+int fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int fd);
|
||||
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);
|
||||
diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
|
||||
index 1f87937..7e6a77a 100644
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -210,27 +210,7 @@ fdasd_initialize_anchor (fdasd_anchor_t * anc)
|
||||
partition_info_t *p = NULL;
|
||||
partition_info_t *q = NULL;
|
||||
|
||||
- anc->devno = 0;
|
||||
- anc->dev_type = 0;
|
||||
- anc->used_partitions = 0;
|
||||
-
|
||||
- anc->silent = 0;
|
||||
- anc->verbose = 0;
|
||||
- anc->big_disk = 0;
|
||||
- anc->volid_specified = 0;
|
||||
- anc->config_specified = 0;
|
||||
- anc->auto_partition = 0;
|
||||
- anc->devname_specified = 0;
|
||||
- anc->print_table = 0;
|
||||
-
|
||||
- anc->option_reuse = 0;
|
||||
- anc->option_recreate = 0;
|
||||
-
|
||||
- anc->vlabel_changed = 0;
|
||||
- anc->vtoc_changed = 0;
|
||||
- anc->blksize = 0;
|
||||
- anc->fspace_trk = 0;
|
||||
- anc->label_pos = 0;
|
||||
+ bzero(anc, sizeof(fdasd_anchor_t));
|
||||
|
||||
for (i=0; i<USABLE_PARTITIONS; i++)
|
||||
setpos(anc, i, -1);
|
||||
@@ -272,24 +252,18 @@ fdasd_initialize_anchor (fdasd_anchor_t * anc)
|
||||
if (p == NULL)
|
||||
fdasd_error(anc, malloc_failed,
|
||||
_("No room for partition info."));
|
||||
- p->used = 0x00;
|
||||
- p->len_trk = 0;
|
||||
- p->start_trk = 0;
|
||||
- p->fspace_trk = 0;
|
||||
- p->type = 0;
|
||||
+ bzero(p, sizeof(partition_info_t));
|
||||
|
||||
/* add p to double pointered list */
|
||||
if (i == 1) {
|
||||
- anc->first = p;
|
||||
- p->prev = NULL;
|
||||
+ anc->first = p;
|
||||
} else if (i == USABLE_PARTITIONS) {
|
||||
- anc->last = p;
|
||||
- p->next = NULL;
|
||||
+ anc->last = p;
|
||||
p->prev = q;
|
||||
q->next = p;
|
||||
} else {
|
||||
- p->prev = q;
|
||||
- q->next = p;
|
||||
+ p->prev = q;
|
||||
+ q->next = p;
|
||||
}
|
||||
|
||||
p->f1 = malloc(sizeof(format1_label_t));
|
||||
@@ -947,15 +921,77 @@ fdasd_check_api_version (fdasd_anchor_t *anc, int f)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * The following two functions match those in the DASD ECKD device driver.
|
||||
+ * They are used to compute how many records of a given size can be stored
|
||||
+ * in one track.
|
||||
+ */
|
||||
+static unsigned int ceil_quot(unsigned int d1, unsigned int d2)
|
||||
+{
|
||||
+ return (d1 + (d2 - 1)) / d2;
|
||||
+}
|
||||
+
|
||||
+/* kl: key length, dl: data length */
|
||||
+static unsigned int recs_per_track(unsigned short dev_type, unsigned int kl,
|
||||
+ unsigned int dl)
|
||||
+{
|
||||
+ unsigned int dn, kn;
|
||||
+
|
||||
+ switch (dev_type) {
|
||||
+ case DASD_3380_TYPE:
|
||||
+ if (kl)
|
||||
+ return 1499 / (15 + 7 + ceil_quot(kl + 12, 32) +
|
||||
+ ceil_quot(dl + 12, 32));
|
||||
+ else
|
||||
+ return 1499 / (15 + ceil_quot(dl + 12, 32));
|
||||
+ case DASD_3390_TYPE:
|
||||
+ dn = ceil_quot(dl + 6, 232) + 1;
|
||||
+ if (kl) {
|
||||
+ kn = ceil_quot(kl + 6, 232) + 1;
|
||||
+ return 1729 / (10 + 9 + ceil_quot(kl + 6 * kn, 34) +
|
||||
+ 9 + ceil_quot(dl + 6 * dn, 34));
|
||||
+ } else
|
||||
+ return 1729 / (10 + 9 + ceil_quot(dl + 6 * dn, 34));
|
||||
+ case DASD_9345_TYPE:
|
||||
+ dn = ceil_quot(dl + 6, 232) + 1;
|
||||
+ if (kl) {
|
||||
+ kn = ceil_quot(kl + 6, 232) + 1;
|
||||
+ return 1420 / (18 + 7 + ceil_quot(kl + 6 * kn, 34) +
|
||||
+ ceil_quot(dl + 6 * dn, 34));
|
||||
+ } else
|
||||
+ return 1420 / (18 + 7 + ceil_quot(dl + 6 * dn, 34));
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Verify that number of tracks (heads) per cylinder and number of
|
||||
+ * sectors per track match the expected values for a given device type
|
||||
+ * and block size.
|
||||
+ * Returns 1 for a valid match and 0 otherwise.
|
||||
+ */
|
||||
+static int fdasd_verify_geometry(unsigned short dev_type, int blksize,
|
||||
+ struct fdasd_hd_geometry *geometry)
|
||||
+{
|
||||
+ unsigned int expected_sectors;
|
||||
+ if (geometry->heads != 15)
|
||||
+ return 0;
|
||||
+ expected_sectors = recs_per_track(dev_type, 0, blksize);
|
||||
+ if (geometry->sectors == expected_sectors)
|
||||
+ return 1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* reads dasd geometry data
|
||||
*/
|
||||
-void
|
||||
+int
|
||||
fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int f)
|
||||
{
|
||||
PDEBUG
|
||||
int blksize = 0;
|
||||
dasd_information_t dasd_info;
|
||||
struct dasd_eckd_characteristics *characteristics;
|
||||
+ unsigned long long size_in_bytes;
|
||||
|
||||
/* We can't get geometry from a regular file,
|
||||
so simulate something usable, for the sake of testing. */
|
||||
@@ -979,6 +1015,12 @@ fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int f)
|
||||
anc->geo.heads;
|
||||
anc->is_file = 1;
|
||||
} else {
|
||||
+ if (ioctl(f, BLKGETSIZE64, &size_in_bytes) != 0) {
|
||||
+ fdasd_error(anc, unable_to_ioctl,
|
||||
+ _("Could not retrieve disk size."));
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
if (ioctl(f, HDIO_GETGEO, &anc->geo) != 0)
|
||||
fdasd_error(anc, unable_to_ioctl,
|
||||
_("Could not retrieve disk geometry information."));
|
||||
@@ -988,27 +1030,51 @@ fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int f)
|
||||
_("Could not retrieve blocksize information."));
|
||||
|
||||
/* get disk type */
|
||||
- if (ioctl(f, BIODASDINFO, &dasd_info) != 0)
|
||||
- fdasd_error(anc, unable_to_ioctl,
|
||||
- _("Could not retrieve disk information."));
|
||||
-
|
||||
- characteristics = (struct dasd_eckd_characteristics *)
|
||||
- &dasd_info.characteristics;
|
||||
- if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
||||
- characteristics->long_no_cyl)
|
||||
- anc->hw_cylinders = characteristics->long_no_cyl;
|
||||
- else
|
||||
- anc->hw_cylinders = characteristics->no_cyl;
|
||||
+ if (ioctl(f, BIODASDINFO, &dasd_info) != 0) {
|
||||
+ /* verify that the geometry matches a 3390 DASD */
|
||||
+ if (!fdasd_verify_geometry(DASD_3390_TYPE, blksize,
|
||||
+ &anc->geo)) {
|
||||
+ fdasd_error(anc, wrong_disk_type,
|
||||
+ _("Disk geometry does not match a " \
|
||||
+ "DASD device of type 3390."));
|
||||
+ goto error;
|
||||
+ }
|
||||
+ anc->dev_type = DASD_3390_TYPE;
|
||||
+ anc->hw_cylinders =
|
||||
+ size_in_bytes / (blksize * anc->geo.heads * anc->geo.sectors);
|
||||
+ /* The VOL1 label on a CDL formatted ECKD DASD is in block 2
|
||||
+ * It will be verified later, if this position actually holds a
|
||||
+ * valid label record.
|
||||
+ */
|
||||
+ anc->label_pos = 2 * blksize;
|
||||
+ /* A devno 0 is actually a valid devno, which could exist
|
||||
+ * in the system. Since we use this number only to create
|
||||
+ * a default volume serial, there is no serious conflict.
|
||||
+ */
|
||||
+ anc->devno = 0;
|
||||
+ } else {
|
||||
+ characteristics = (struct dasd_eckd_characteristics *)
|
||||
+ &dasd_info.characteristics;
|
||||
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
||||
+ characteristics->long_no_cyl)
|
||||
+ anc->hw_cylinders = characteristics->long_no_cyl;
|
||||
+ else
|
||||
+ anc->hw_cylinders = characteristics->no_cyl;
|
||||
+ anc->dev_type = dasd_info.dev_type;
|
||||
+ anc->label_pos = dasd_info.label_block * blksize;
|
||||
+ anc->devno = dasd_info.devno;
|
||||
+ anc->label_block = dasd_info.label_block;
|
||||
+ anc->FBA_layout = dasd_info.FBA_layout;
|
||||
+ }
|
||||
|
||||
anc->is_file = 0;
|
||||
}
|
||||
|
||||
- anc->dev_type = dasd_info.dev_type;
|
||||
- anc->blksize = blksize;
|
||||
- anc->label_pos = dasd_info.label_block * blksize;
|
||||
- anc->devno = dasd_info.devno;
|
||||
- anc->label_block = dasd_info.label_block;
|
||||
- anc->FBA_layout = dasd_info.FBA_layout;
|
||||
+ anc->blksize = blksize;
|
||||
+ return 1;
|
||||
+
|
||||
+ error:
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.4.3
|
||||
|
238
0022-dasd-enhance-device-probing.patch
Normal file
238
0022-dasd-enhance-device-probing.patch
Normal file
@ -0,0 +1,238 @@
|
||||
From 834713b5aee1edc004f863231dd489ee3a79f536 Mon Sep 17 00:00:00 2001
|
||||
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||||
Date: Thu, 17 Sep 2015 15:33:29 +0200
|
||||
Subject: [PATCH 22/22] dasd: enhance device probing
|
||||
|
||||
Probe for all device/transport types as every block device
|
||||
could be a DASD on s390.
|
||||
|
||||
Since the calculation of the minimum and optimum alignment
|
||||
is different between DASDs and common fixed block disks
|
||||
we need a means other than dev->type == PED_DEVICE_DASD.
|
||||
For that purpose a static function _ped_device_like_dasd()
|
||||
offering a DASD detection heuristic has been added to
|
||||
arch/linux.c.
|
||||
|
||||
By always providing arch-specific alignment functions the
|
||||
need for DASD-specific code could be removed from device.c.
|
||||
|
||||
Observe fdasd_get_geometry return code for proper error
|
||||
handling.
|
||||
|
||||
Remove the obsolete API check as we no longer require the
|
||||
DASD-specific IOCTLs.
|
||||
|
||||
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||||
Acked-by: Stefan Haberland <stefan.haberland@de.ibm.com>
|
||||
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||
---
|
||||
libparted/arch/linux.c | 85 ++++++++++++++++++++++++++++++++++++++++---------
|
||||
libparted/device.c | 14 +++-----
|
||||
libparted/labels/dasd.c | 18 +++++------
|
||||
3 files changed, 82 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
|
||||
index adc368d..9344ceb 100644
|
||||
--- a/libparted/arch/linux.c
|
||||
+++ b/libparted/arch/linux.c
|
||||
@@ -785,9 +785,13 @@ _device_set_sector_size (PedDevice* dev)
|
||||
#endif
|
||||
|
||||
#if defined __s390__ || defined __s390x__
|
||||
+ /* The real_sector_size is currently needed for DASD layouts,
|
||||
+ * so we set it unconditionally. In the long run it should
|
||||
+ * be considered to use the dev->phys_sector_size in label/dasd.c.
|
||||
+ */
|
||||
+ arch_specific->real_sector_size = dev->sector_size;
|
||||
/* Return PED_SECTOR_SIZE_DEFAULT for DASDs. */
|
||||
if (dev->type == PED_DEVICE_DASD) {
|
||||
- arch_specific->real_sector_size = dev->sector_size;
|
||||
dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
|
||||
}
|
||||
#endif
|
||||
@@ -3167,19 +3171,72 @@ linux_disk_commit (PedDisk* disk)
|
||||
{
|
||||
if (disk->dev->type != PED_DEVICE_FILE) {
|
||||
|
||||
- /* We now require BLKPG support. If this assertion fails,
|
||||
- please write to the mailing list describing your system.
|
||||
- Assuming it's never triggered, ...
|
||||
- FIXME: remove this assertion in 2012. */
|
||||
- assert (_have_blkpg ());
|
||||
+ /* We now require BLKPG support. If this assertion fails,
|
||||
+ please write to the mailing list describing your system.
|
||||
+ Assuming it's never triggered, ...
|
||||
+ FIXME: remove this assertion in 2012. */
|
||||
+ assert (_have_blkpg ());
|
||||
|
||||
- if (!_disk_sync_part_table (disk))
|
||||
- return 0;
|
||||
+ if (!_disk_sync_part_table (disk))
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
+#if defined __s390__ || defined __s390x__
|
||||
+/**
|
||||
+ * Check whether this device could be a DASD
|
||||
+ *
|
||||
+ * The device probing yields PED_DEVICE_DASD for native DASD transport
|
||||
+ * If the block device uses a different transport (e.g. virtio)
|
||||
+ * a simplified heuristic (assuming a model 3390 with 4K sectors)
|
||||
+ * is applied (only) on s390x systems for this check.
|
||||
+ *
|
||||
+ * \return 1 if the geometry indicates this could be a DASD
|
||||
+ * and 0 otherwise
|
||||
+ */
|
||||
+static int
|
||||
+_ped_device_like_dasd(const PedDevice *dev)
|
||||
+{
|
||||
+ return (dev->type == PED_DEVICE_DASD)
|
||||
+ || (dev->hw_geom.heads == 15
|
||||
+ && dev->hw_geom.sectors == 12
|
||||
+ && (dev->hw_geom.cylinders
|
||||
+ * dev->hw_geom.heads
|
||||
+ * dev->hw_geom.sectors
|
||||
+ * dev->phys_sector_size
|
||||
+ == dev->length * dev->sector_size));
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
+static PedAlignment*
|
||||
+s390_get_minimum_alignment(const PedDevice *dev)
|
||||
+{
|
||||
+#if USE_BLKID
|
||||
+ return linux_get_minimum_alignment(dev);
|
||||
+#else
|
||||
+ return ped_alignment_new(0,
|
||||
+ dev->phys_sector_size
|
||||
+ / dev->sector_size);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+static PedAlignment*
|
||||
+s390_get_optimum_alignment(const PedDevice *dev)
|
||||
+{
|
||||
+ /* DASD needs to use minimum alignment */
|
||||
+ if (_ped_device_like_dasd(dev))
|
||||
+ return s390_get_minimum_alignment(dev);
|
||||
+#if USE_BLKID
|
||||
+ return linux_get_optimum_alignment(dev);
|
||||
+#else
|
||||
+ return NULL;
|
||||
+#endif
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
#if USE_BLKID
|
||||
static PedAlignment*
|
||||
linux_get_minimum_alignment(const PedDevice *dev)
|
||||
@@ -3220,15 +3277,10 @@ linux_get_optimum_alignment(const PedDevice *dev)
|
||||
&& PED_DEFAULT_ALIGNMENT % optimal_io == 0)
|
||||
|| (!optimal_io && minimum_io
|
||||
&& PED_DEFAULT_ALIGNMENT % minimum_io == 0)
|
||||
- ) {
|
||||
- /* DASD needs to use minimum alignment */
|
||||
- if (dev->type == PED_DEVICE_DASD)
|
||||
- return linux_get_minimum_alignment(dev);
|
||||
-
|
||||
+ )
|
||||
return ped_alignment_new(
|
||||
blkid_topology_get_alignment_offset(tp) / dev->sector_size,
|
||||
PED_DEFAULT_ALIGNMENT / dev->sector_size);
|
||||
- }
|
||||
|
||||
/* If optimal_io_size is 0 and we don't meet the other criteria
|
||||
for using the device.c default, return the minimum alignment. */
|
||||
@@ -3255,7 +3307,10 @@ static PedDeviceArchOps linux_dev_ops = {
|
||||
sync: linux_sync,
|
||||
sync_fast: linux_sync_fast,
|
||||
probe_all: linux_probe_all,
|
||||
-#if USE_BLKID
|
||||
+#if defined __s390__ || defined __s390x__
|
||||
+ get_minimum_alignment: s390_get_minimum_alignment,
|
||||
+ get_optimum_alignment: s390_get_optimum_alignment,
|
||||
+#elif USE_BLKID
|
||||
get_minimum_alignment: linux_get_minimum_alignment,
|
||||
get_optimum_alignment: linux_get_optimum_alignment,
|
||||
#endif
|
||||
diff --git a/libparted/device.c b/libparted/device.c
|
||||
index cdcc117..36fecd2 100644
|
||||
--- a/libparted/device.c
|
||||
+++ b/libparted/device.c
|
||||
@@ -550,16 +550,10 @@ ped_device_get_optimum_alignment(const PedDevice *dev)
|
||||
/* If the arch specific code could not give as an alignment
|
||||
return a default value based on the type of device. */
|
||||
if (align == NULL) {
|
||||
- switch (dev->type) {
|
||||
- case PED_DEVICE_DASD:
|
||||
- align = ped_device_get_minimum_alignment(dev);
|
||||
- break;
|
||||
- default:
|
||||
- /* Align to a grain of 1MiB (like vista / win7) */
|
||||
- align = ped_alignment_new(0,
|
||||
- (PED_DEFAULT_ALIGNMENT
|
||||
- / dev->sector_size));
|
||||
- }
|
||||
+ /* Align to a grain of 1MiB (like vista / win7) */
|
||||
+ align = ped_alignment_new(0,
|
||||
+ (PED_DEFAULT_ALIGNMENT
|
||||
+ / dev->sector_size));
|
||||
}
|
||||
|
||||
return align;
|
||||
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
|
||||
index fa9414f..bb32d66 100644
|
||||
--- a/libparted/labels/dasd.c
|
||||
+++ b/libparted/labels/dasd.c
|
||||
@@ -214,19 +214,13 @@ dasd_probe (const PedDevice *dev)
|
||||
|
||||
PED_ASSERT(dev != NULL);
|
||||
|
||||
- if (!(dev->type == PED_DEVICE_DASD
|
||||
- || dev->type == PED_DEVICE_VIODASD
|
||||
- || dev->type == PED_DEVICE_FILE))
|
||||
- return 0;
|
||||
-
|
||||
arch_specific = LINUX_SPECIFIC(dev);
|
||||
|
||||
/* add partition test here */
|
||||
fdasd_initialize_anchor(&anchor);
|
||||
|
||||
- fdasd_get_geometry(dev, &anchor, arch_specific->fd);
|
||||
-
|
||||
- fdasd_check_api_version(&anchor, arch_specific->fd);
|
||||
+ if (fdasd_get_geometry(dev, &anchor, arch_specific->fd) == 0)
|
||||
+ goto error_cleanup;
|
||||
|
||||
/* Labels are required on CDL formatted DASDs. */
|
||||
if (fdasd_check_volume(&anchor, arch_specific->fd) &&
|
||||
@@ -276,7 +270,9 @@ dasd_read (PedDisk* disk)
|
||||
|
||||
fdasd_initialize_anchor(&anchor);
|
||||
|
||||
- fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd);
|
||||
+ if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0)
|
||||
+ goto error_close_dev;
|
||||
+
|
||||
disk_specific->label_block = anchor.label_block;
|
||||
|
||||
if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE)
|
||||
@@ -630,7 +626,9 @@ dasd_write (const PedDisk* disk)
|
||||
|
||||
/* initialize the anchor */
|
||||
fdasd_initialize_anchor(&anchor);
|
||||
- fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd);
|
||||
+ if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0)
|
||||
+ goto error;
|
||||
+
|
||||
fdasd_check_volume(&anchor, arch_specific->fd);
|
||||
memcpy(anchor.vlabel, &disk_specific->vlabel, sizeof(volume_label_t));
|
||||
anchor.vlabel_changed++;
|
||||
--
|
||||
2.4.3
|
||||
|
@ -4,7 +4,7 @@
|
||||
Summary: The GNU disk partition manipulation program
|
||||
Name: parted
|
||||
Version: 3.2
|
||||
Release: 11%{?dist}
|
||||
Release: 12%{?dist}
|
||||
License: GPLv3+
|
||||
Group: Applications/System
|
||||
URL: http://www.gnu.org/software/parted
|
||||
@ -34,7 +34,8 @@ Patch0017: 0017-libparted-Fix-possible-memory-leaks.patch
|
||||
Patch0018: 0018-libparted-Stop-converting-.-in-sys-path-to.patch
|
||||
Patch0019: 0019-libparted-Use-read-only-when-probing-devices-on-linu.patch
|
||||
Patch0020: 0020-tests-Use-wait_for_dev_to_-functions.patch
|
||||
|
||||
Patch0021: 0021-fdasd-geometry-handling-updated-from-upstream-s390-t.patch
|
||||
Patch0022: 0022-dasd-enhance-device-probing.patch
|
||||
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: e2fsprogs-devel
|
||||
@ -177,6 +178,10 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Oct 27 2015 Brian C. Lane <bcl@redhat.com> 3.2-12
|
||||
- dasd: enhance device probing
|
||||
- fdasd: geometry handling updated from upstream s390-tools
|
||||
|
||||
* Fri Aug 07 2015 Brian C. Lane <bcl@redhat.com> 3.2-11
|
||||
- tests: Fix patch 0012 test for extended partition length
|
||||
- UI: Avoid memory leaks
|
||||
|
Loading…
Reference in New Issue
Block a user