forked from pool/parted
Accepting request 492572 from home:sparschauer:branches:Base:System
Use latest fdasd/vtoc code base from s390-tools (fate#321531) OBS-URL: https://build.opensuse.org/request/show/492572 OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=125
This commit is contained in:
parent
5568719e10
commit
ef69beac35
167
libparted-dasd-add-new-fdasd-functions.patch
Normal file
167
libparted-dasd-add-new-fdasd-functions.patch
Normal file
@ -0,0 +1,167 @@
|
||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||
Date: Wed, 26 Oct 2016 04:22:48 +0200
|
||||
Subject: 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
|
||||
to keep the code base in parted and s390-tools in sync.
|
||||
|
||||
These new functions are:
|
||||
fdasd_check_volser(): validate the volser input
|
||||
fdasd_get_volser(): get volume serial (volser)
|
||||
fdasd_change_volser(): change volser with string
|
||||
fdasd_reuse_vtoc(): re-create vtoc labels based on the existing vtoc
|
||||
|
||||
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>
|
||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
||||
---
|
||||
include/parted/fdasd.in.h | 4 ++
|
||||
libparted/labels/fdasd.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 127 insertions(+)
|
||||
|
||||
--- a/include/parted/fdasd.in.h
|
||||
+++ b/include/parted/fdasd.in.h
|
||||
@@ -291,5 +291,9 @@ void fdasd_recreate_vtoc(fdasd_anchor_t
|
||||
partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
|
||||
unsigned int start, unsigned int stop);
|
||||
int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ;
|
||||
+void fdasd_check_volser(char *volser, int devno);
|
||||
+int fdasd_get_volser(fdasd_anchor_t *anc, char *volser, int fd);
|
||||
+void fdasd_change_volser(fdasd_anchor_t *anc, char *str);
|
||||
+void fdasd_reuse_vtoc(fdasd_anchor_t *anc);
|
||||
|
||||
#endif /* FDASD_H */
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -1247,4 +1247,127 @@ fdasd_add_partition (fdasd_anchor_t *anc
|
||||
return p;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Check for valid volume serial characters (max. 6) - remove invalid.
|
||||
+ * If volser is empty, fill with default volser.
|
||||
+ */
|
||||
+void fdasd_check_volser (char *volser, int devno)
|
||||
+{
|
||||
+ int from, to;
|
||||
+
|
||||
+ for (from = 0, to = 0; volser[from] && from < VOLSER_LENGTH; from++) {
|
||||
+
|
||||
+ if ((volser[from] >= 0x23 &&
|
||||
+ volser[from] <= 0x25) ||
|
||||
+ (volser[from] >= 0x30 &&
|
||||
+ volser[from] <= 0x39) ||
|
||||
+ (volser[from] >= 0x40 &&
|
||||
+ volser[from] <= 0x5a) ||
|
||||
+ (volser[from] >= 0x61 &&
|
||||
+ volser[from] <= 0x7a))
|
||||
+ volser[to++] = toupper(volser[from]);
|
||||
+ }
|
||||
+
|
||||
+ volser[to] = 0x00;
|
||||
+
|
||||
+ if (volser[0] == 0x00)
|
||||
+ sprintf(volser, "0X%04x", devno);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * get volser from vtoc
|
||||
+ */
|
||||
+int fdasd_get_volser (fdasd_anchor_t *anc, char *volser, int fd)
|
||||
+{
|
||||
+ volume_label_t vlabel;
|
||||
+
|
||||
+ vtoc_read_volume_label(fd, anc->label_pos, &vlabel);
|
||||
+ vtoc_volume_label_get_volser(&vlabel, volser);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* Changes the volume serial (menu option)
|
||||
+ *
|
||||
+ */
|
||||
+void fdasd_change_volser (fdasd_anchor_t *anc, char *str)
|
||||
+{
|
||||
+ fdasd_check_volser(str, anc->devno);
|
||||
+ vtoc_volume_label_set_volser(anc->vlabel, str);
|
||||
+
|
||||
+ vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
||||
+ anc->vlabel_changed++;
|
||||
+ anc->vtoc_changed++;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * re-create all VTOC labels, but use the partition information
|
||||
+ * from existing VTOC
|
||||
+ */
|
||||
+void fdasd_reuse_vtoc (fdasd_anchor_t *anc)
|
||||
+{
|
||||
+ partition_info_t *part_info = anc->first;
|
||||
+ struct fdasd_hd_geometry geo = anc->geo;
|
||||
+ format1_label_t f1;
|
||||
+ format4_label_t f4;
|
||||
+ format5_label_t f5;
|
||||
+ format7_label_t f7;
|
||||
+
|
||||
+ vtoc_init_format4_label(&f4, geo.cylinders, anc->formatted_cylinders,
|
||||
+ geo.heads, geo.sectors,
|
||||
+ anc->blksize, anc->dev_type);
|
||||
+
|
||||
+ /* reuse some FMT4 values */
|
||||
+ f4.DS4HPCHR = anc->f4->DS4HPCHR;
|
||||
+ f4.DS4DSREC = anc->f4->DS4DSREC;
|
||||
+
|
||||
+ /* re-initialize both free-space labels */
|
||||
+ vtoc_init_format5_label(&f5);
|
||||
+ vtoc_init_format7_label(&f7);
|
||||
+
|
||||
+ if (anc->fspace_trk > 0)
|
||||
+ vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose,
|
||||
+ FIRST_USABLE_TRK,
|
||||
+ FIRST_USABLE_TRK + anc->fspace_trk - 1,
|
||||
+ anc->formatted_cylinders, geo.heads);
|
||||
+
|
||||
+ while (part_info != NULL) {
|
||||
+ if (part_info->used != 0x01) {
|
||||
+ part_info = part_info->next;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (anc->formatted_cylinders > LV_COMPAT_CYL)
|
||||
+ vtoc_init_format8_label(anc->blksize,
|
||||
+ &part_info->f1->DS1EXT1, &f1);
|
||||
+ else
|
||||
+ vtoc_init_format1_label(anc->blksize,
|
||||
+ &part_info->f1->DS1EXT1, &f1);
|
||||
+
|
||||
+
|
||||
+ strncpy(f1.DS1DSNAM, part_info->f1->DS1DSNAM, 44);
|
||||
+ strncpy((char *)f1.DS1DSSN, (char *)part_info->f1->DS1DSSN, 6);
|
||||
+ f1.DS1CREDT = part_info->f1->DS1CREDT;
|
||||
+
|
||||
+ memcpy(part_info->f1, &f1, sizeof(format1_label_t));
|
||||
+
|
||||
+ if (part_info->fspace_trk > 0)
|
||||
+ vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose,
|
||||
+ part_info->end_trk + 1,
|
||||
+ part_info->end_trk +
|
||||
+ part_info->fspace_trk,
|
||||
+ anc->formatted_cylinders, geo.heads);
|
||||
+
|
||||
+ part_info = part_info->next;
|
||||
+ }
|
||||
+
|
||||
+ /* over-write old labels with new ones */
|
||||
+ memcpy(anc->f4, &f4, sizeof(format4_label_t));
|
||||
+ memcpy(anc->f5, &f5, sizeof(format5_label_t));
|
||||
+ memcpy(anc->f7, &f7, sizeof(format7_label_t));
|
||||
+
|
||||
+ anc->vtoc_changed++;
|
||||
+
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
/* vim:set tabstop=4 shiftwidth=4 softtabstop=4: */
|
266
libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch
Normal file
266
libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch
Normal file
@ -0,0 +1,266 @@
|
||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||
Date: Wed, 26 Oct 2016 04:22:46 +0200
|
||||
Subject: 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
|
||||
the same structure. Also remove unused arguments in the functions.
|
||||
|
||||
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>
|
||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
||||
---
|
||||
include/parted/vtoc.in.h | 34 +++++++++++++++++++---------------
|
||||
libparted/labels/dasd.c | 8 +++-----
|
||||
libparted/labels/vtoc.c | 38 +++++++++++++++++---------------------
|
||||
3 files changed, 39 insertions(+), 41 deletions(-)
|
||||
|
||||
--- a/include/parted/vtoc.in.h
|
||||
+++ b/include/parted/vtoc.in.h
|
||||
@@ -62,7 +62,6 @@ typedef struct cchh cchh_t;
|
||||
typedef struct labeldate labeldate_t;
|
||||
typedef struct volume_label volume_label_t;
|
||||
typedef struct cms_volume_label cms_volume_label_t;
|
||||
-typedef struct ldl_volume_label ldl_volume_label_t;
|
||||
typedef struct extent extent_t;
|
||||
typedef struct dev_const dev_const_t;
|
||||
typedef struct format1_label format1_label_t;
|
||||
@@ -94,6 +93,19 @@ struct __attribute__ ((packed)) labeldat
|
||||
u_int16_t day;
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * The following structure is a merger of the cdl and ldl volume label.
|
||||
+ * On an ldl disk there is no key information, so when reading an
|
||||
+ * ldl label from disk, the data should be copied at the address of vollbl.
|
||||
+ * On the other side, the field ldl_version is reserved in a cdl record
|
||||
+ * and the field formatted_blocks exists only for ldl labels. So when
|
||||
+ * reading a cdl label from disk, the formatted_blocks field will contain
|
||||
+ * arbitrary data.
|
||||
+ * This layout may be a bit awkward, but the advantage of having the
|
||||
+ * same label type for both disk layout types is bigger than the effort
|
||||
+ * for taking a bit of extra care at the fringes.
|
||||
+ */
|
||||
+
|
||||
struct __attribute__ ((packed)) volume_label {
|
||||
char volkey[4]; /* volume key = volume label */
|
||||
char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */
|
||||
@@ -107,15 +119,8 @@ struct __attribute__ ((packed)) volume_l
|
||||
char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */
|
||||
char res2[4]; /* reserved */
|
||||
char lvtoc[14]; /* owner code for LVTOC */
|
||||
- char res3[29]; /* reserved */
|
||||
- char fudge[4]; /* filler to match length of ldl label */
|
||||
-};
|
||||
-
|
||||
-struct __attribute__ ((packed)) ldl_volume_label {
|
||||
- char vollbl[4]; /* Label identifier ("LNX1" in EBCDIC) */
|
||||
- char volid[6]; /* Volume identifier */
|
||||
- char res3[69]; /* Reserved field */
|
||||
- char ldl_version[1]; /* Version number, valid for ldl format */
|
||||
+ char res3[28]; /* reserved */
|
||||
+ char ldl_version; /* version number, valid for ldl format */
|
||||
u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in
|
||||
EBCDIC) */
|
||||
};
|
||||
@@ -335,11 +340,10 @@ void vtoc_write_label (int fd, unsigned
|
||||
format7_label_t const *f7,
|
||||
format9_label_t const *f9);
|
||||
|
||||
-void vtoc_init_format1_label (char *volid, unsigned int blksize,
|
||||
+void vtoc_init_format1_label (unsigned int blksize,
|
||||
extent_t *part_extent, format1_label_t *f1);
|
||||
|
||||
void vtoc_init_format4_label (format4_label_t *f4lbl,
|
||||
- unsigned int usable_partitions,
|
||||
unsigned int compat_cylinders,
|
||||
unsigned int real_cylinders,
|
||||
unsigned int tracks,
|
||||
@@ -352,11 +356,11 @@ void vtoc_update_format4_label (format4_
|
||||
|
||||
void vtoc_init_format5_label (format5_label_t *f5);
|
||||
|
||||
-void vtoc_update_format5_label_add (format5_label_t *f5, int verbose, int cyl,
|
||||
+void vtoc_update_format5_label_add (format5_label_t *f5, int verbose,
|
||||
int trk, u_int16_t a, u_int16_t b,
|
||||
u_int8_t c);
|
||||
|
||||
-void vtoc_update_format5_label_del (format5_label_t *f5, int verbose, int cyl,
|
||||
+void vtoc_update_format5_label_del (format5_label_t *f5, int verbose,
|
||||
int trk, u_int16_t a, u_int16_t b,
|
||||
u_int8_t c);
|
||||
|
||||
@@ -368,7 +372,7 @@ void vtoc_update_format7_label_add (form
|
||||
void vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
|
||||
u_int32_t a, u_int32_t b);
|
||||
|
||||
-void vtoc_init_format8_label (char *volid, unsigned int blksize,
|
||||
+void vtoc_init_format8_label (unsigned int blksize,
|
||||
extent_t *part_extent, format1_label_t *f1);
|
||||
|
||||
void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8);
|
||||
--- a/libparted/labels/dasd.c
|
||||
+++ b/libparted/labels/dasd.c
|
||||
@@ -345,13 +345,12 @@ dasd_read (PedDisk* disk)
|
||||
DasdPartitionData* dasd_data;
|
||||
|
||||
union vollabel {
|
||||
- volume_label_t unused;
|
||||
- ldl_volume_label_t ldl;
|
||||
+ volume_label_t ldl;
|
||||
cms_volume_label_t cms;
|
||||
};
|
||||
union vollabel *cms_ptr1 = (union vollabel *) anchor.vlabel;
|
||||
cms_volume_label_t *cms_ptr = &cms_ptr1->cms;
|
||||
- ldl_volume_label_t *ldl_ptr = &cms_ptr1->ldl;
|
||||
+ volume_label_t *ldl_ptr = &cms_ptr1->ldl;
|
||||
int partition_start_block;
|
||||
|
||||
disk_specific->format_type = 1;
|
||||
@@ -375,8 +374,7 @@ dasd_read (PedDisk* disk)
|
||||
* (long long) cms_ptr->disk_offset;
|
||||
|
||||
if (is_ldl)
|
||||
- if (strncmp(ldl_ptr->ldl_version,
|
||||
- vtoc_ebcdic_enc("2", str, 1), 1) >= 0)
|
||||
+ if (ldl_ptr->ldl_version >= 0xf2)
|
||||
end = (long long) arch_specific->real_sector_size
|
||||
/ (long long) disk->dev->sector_size
|
||||
* (long long) ldl_ptr->formatted_blocks - 1;
|
||||
--- a/libparted/labels/vtoc.c
|
||||
+++ b/libparted/labels/vtoc.c
|
||||
@@ -150,7 +150,7 @@ enum failure {
|
||||
unable_to_read
|
||||
};
|
||||
|
||||
-static char buffer[89];
|
||||
+static char buffer[93];
|
||||
|
||||
static void
|
||||
vtoc_error (enum failure why, char const *s1, char const *s2)
|
||||
@@ -329,7 +329,7 @@ void
|
||||
vtoc_volume_label_init (volume_label_t *vlabel)
|
||||
{
|
||||
PDEBUG
|
||||
- sprintf(buffer, "%88s", " ");
|
||||
+ sprintf(buffer, "%92s", " ");
|
||||
vtoc_ebcdic_enc(buffer, buffer, sizeof *vlabel);
|
||||
memcpy(vlabel, buffer, sizeof *vlabel);
|
||||
}
|
||||
@@ -348,8 +348,8 @@ vtoc_read_volume_label (int f, unsigned
|
||||
typedef union vollabel vollabel_t;
|
||||
|
||||
union __attribute__((packed)) vollabel {
|
||||
+ /* cdl and ldl have the same data struct */
|
||||
volume_label_t cdl;
|
||||
- ldl_volume_label_t ldl;
|
||||
cms_volume_label_t cms;
|
||||
};
|
||||
|
||||
@@ -373,9 +373,7 @@ vtoc_read_volume_label (int f, unsigned
|
||||
}
|
||||
|
||||
rc = read(f, vlabel, sizeof(volume_label_t));
|
||||
- if (rc != sizeof(volume_label_t) &&
|
||||
- /* For CDL we ask to read 88 bytes, but only get 84 */
|
||||
- rc != sizeof(volume_label_t) - 4) {
|
||||
+ if (rc != sizeof(volume_label_t)) {
|
||||
vtoc_error(unable_to_read, "vtoc_read_volume_label",
|
||||
_("Could not read volume label."));
|
||||
return 1;
|
||||
@@ -427,10 +425,8 @@ vtoc_write_volume_label (int f, unsigned
|
||||
vtoc_error(unable_to_seek, "vtoc_write_volume_label",
|
||||
_("Could not write volume label."));
|
||||
|
||||
- rc = write(f, vlabel, sizeof(volume_label_t) - 4);
|
||||
- /* Subtract 4 to leave off the "fudge" variable when writing.
|
||||
- We only write CDL volume labels, never LDL or CMS. */
|
||||
- if (rc != sizeof(volume_label_t) - 4)
|
||||
+ rc = write(f, vlabel, sizeof(volume_label_t));
|
||||
+ if (rc != sizeof(volume_label_t))
|
||||
vtoc_error(unable_to_write, "vtoc_write_volume_label",
|
||||
_("Could not write volume label."));
|
||||
|
||||
@@ -632,7 +628,7 @@ vtoc_write_label (int f, unsigned long p
|
||||
* initializes a format4 label
|
||||
*/
|
||||
void
|
||||
-vtoc_init_format4_label (format4_label_t *f4, unsigned int usable_partitions,
|
||||
+vtoc_init_format4_label (format4_label_t *f4,
|
||||
unsigned int compat_cylinders,
|
||||
unsigned int real_cylinders, unsigned int tracks,
|
||||
unsigned int blocks, unsigned int blksize,
|
||||
@@ -740,7 +736,7 @@ vtoc_init_format7_label (format7_label_t
|
||||
* format1 or format 8 label, all but the field DS1FMTID
|
||||
*/
|
||||
void
|
||||
-vtoc_init_format_1_8_label (char *volid, unsigned int blksize,
|
||||
+vtoc_init_format_1_8_label (unsigned int blksize,
|
||||
extent_t *part_extent, format1_label_t *f1)
|
||||
{
|
||||
PDEBUG
|
||||
@@ -794,18 +790,18 @@ vtoc_init_format_1_8_label (char *volid,
|
||||
}
|
||||
|
||||
void
|
||||
-vtoc_init_format1_label (char *volid, unsigned int blksize,
|
||||
+vtoc_init_format1_label (unsigned int blksize,
|
||||
extent_t *part_extent, format1_label_t *f1)
|
||||
{
|
||||
- vtoc_init_format_1_8_label(volid, blksize, part_extent, f1);
|
||||
+ vtoc_init_format_1_8_label(blksize, part_extent, f1);
|
||||
f1->DS1FMTID = 0xf1;
|
||||
}
|
||||
|
||||
void
|
||||
-vtoc_init_format8_label (char *volid, unsigned int blksize,
|
||||
+vtoc_init_format8_label (unsigned int blksize,
|
||||
extent_t *part_extent, format1_label_t *f8)
|
||||
{
|
||||
- vtoc_init_format_1_8_label(volid, blksize, part_extent, f8);
|
||||
+ vtoc_init_format_1_8_label(blksize, part_extent, f8);
|
||||
f8->DS1FMTID = 0xf8;
|
||||
}
|
||||
|
||||
@@ -886,7 +882,7 @@ vtoc_reorganize_FMT5_extents (format5_la
|
||||
* add a free space extent description to the VTOC FMT5 DSCB
|
||||
*/
|
||||
void
|
||||
-vtoc_update_format5_label_add (format5_label_t *f5, int verbose, int cyl,
|
||||
+vtoc_update_format5_label_add (format5_label_t *f5, int verbose,
|
||||
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
||||
{
|
||||
PDEBUG
|
||||
@@ -974,7 +970,7 @@ vtoc_update_format5_label_add (format5_l
|
||||
* remove a free space extent description from the VTOC FMT5 DSCB
|
||||
*/
|
||||
void
|
||||
-vtoc_update_format5_label_del (format5_label_t *f5, int verbose, int cyl,
|
||||
+vtoc_update_format5_label_del (format5_label_t *f5, int verbose,
|
||||
int trk, u_int16_t a, u_int16_t b, u_int8_t c)
|
||||
{
|
||||
PDEBUG
|
||||
@@ -1054,7 +1050,7 @@ vtoc_update_format5_label_del (format5_l
|
||||
ext->ft = (a - ext->t) % trk;
|
||||
|
||||
vtoc_update_format5_label_add(f5, verbose,
|
||||
- cyl, trk, x, y, z);
|
||||
+ trk, x, y, z);
|
||||
|
||||
if (verbose)
|
||||
puts ("FMT5 del extent: 2 pieces");
|
||||
@@ -1322,9 +1318,9 @@ vtoc_set_freespace(format4_label_t *f4,
|
||||
z = (u_int8_t) ((stop - start + 1) % trk);
|
||||
|
||||
if (ch == '+')
|
||||
- vtoc_update_format5_label_add(f5, verbose, cyl, trk, x, y, z);
|
||||
+ vtoc_update_format5_label_add(f5, verbose, trk, x, y, z);
|
||||
else if (ch == '-')
|
||||
- vtoc_update_format5_label_del(f5, verbose, cyl, trk, x, y, z);
|
||||
+ vtoc_update_format5_label_del(f5, verbose, trk, x, y, z);
|
||||
else
|
||||
puts ("BUG: syntax error in vtoc_set_freespace call");
|
||||
|
204
libparted-dasd-update-and-improve-fdasd-functions.patch
Normal file
204
libparted-dasd-update-and-improve-fdasd-functions.patch
Normal file
@ -0,0 +1,204 @@
|
||||
From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||
Date: Wed, 26 Oct 2016 04:22:47 +0200
|
||||
Subject: 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()
|
||||
function. Also correct vtoc_changed and vlabel_changed accounting
|
||||
because they are important to rewrite vtoc to save the changes.
|
||||
|
||||
Wang Dong <dongdwdw@linux.vnet.ibm.com>
|
||||
Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
|
||||
|
||||
Signed-off-by: Brian C. Lane <bcl@redhat.com>
|
||||
Acked-by: Sebastian Parschauer <sparschauer@suse.de>
|
||||
---
|
||||
include/parted/fdasd.in.h | 14 +++++-------
|
||||
libparted/labels/fdasd.c | 56 ++++++++++++++++++++++++-----------------------
|
||||
2 files changed, 35 insertions(+), 35 deletions(-)
|
||||
|
||||
--- a/include/parted/fdasd.in.h
|
||||
+++ b/include/parted/fdasd.in.h
|
||||
@@ -186,6 +186,7 @@ typedef struct format_data_t {
|
||||
/*****************************************************************************
|
||||
* SECTION: Further IOCTL Definitions (see fs.h) *
|
||||
*****************************************************************************/
|
||||
+#define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */
|
||||
/* re-read partition table */
|
||||
#define BLKRRPART _IO(0x12,95)
|
||||
/* get block device sector size */
|
||||
@@ -196,15 +197,14 @@ typedef struct format_data_t {
|
||||
/*****************************************************************************
|
||||
* SECTION: FDASD internal types *
|
||||
*****************************************************************************/
|
||||
+#define PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
|
||||
+#define USABLE_PARTITIONS ((1 << DASD_PARTN_BITS) - 1)
|
||||
|
||||
#define DASD_MIN_API_VERSION 0
|
||||
|
||||
#define DEFAULT_FDASD_CONF "/etc/fdasd.conf" /* default config file */
|
||||
|
||||
-#define PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
|
||||
-#define USABLE_PARTITIONS ((1 << DASD_PARTN_BITS) - 1)
|
||||
-
|
||||
-#define FDASD_VERSION "1.05"
|
||||
+#define FDASD_VERSION "1.32.0"
|
||||
#define DEVICE "device"
|
||||
#define DISC "disc"
|
||||
#define PART "part"
|
||||
@@ -231,9 +231,6 @@ typedef struct config_data {
|
||||
typedef struct fdasd_anchor {
|
||||
int vlabel_changed;
|
||||
int vtoc_changed;
|
||||
- int devname_specified;
|
||||
- int volid_specified;
|
||||
- int config_specified;
|
||||
int auto_partition;
|
||||
int print_table;
|
||||
int big_disk;
|
||||
@@ -280,7 +277,8 @@ enum fdasd_failure {
|
||||
vlabel_corrupted,
|
||||
dsname_corrupted,
|
||||
malloc_failed,
|
||||
- device_verification_failed
|
||||
+ device_verification_failed,
|
||||
+ volser_not_found
|
||||
};
|
||||
|
||||
void fdasd_cleanup (fdasd_anchor_t *anchor);
|
||||
--- a/libparted/labels/fdasd.c
|
||||
+++ b/libparted/labels/fdasd.c
|
||||
@@ -106,28 +106,26 @@ fdasd_cleanup (fdasd_anchor_t *anchor)
|
||||
{
|
||||
PDEBUG
|
||||
int i;
|
||||
- partition_info_t *p, *q;
|
||||
+ partition_info_t *part_info, *next;
|
||||
|
||||
if (anchor == NULL)
|
||||
return;
|
||||
|
||||
- free(anchor->f4);
|
||||
- free(anchor->f5);
|
||||
- free(anchor->f7);
|
||||
- free(anchor->f9);
|
||||
- free(anchor->vlabel);
|
||||
-
|
||||
- p = anchor->first;
|
||||
- if (p == NULL)
|
||||
- return;
|
||||
-
|
||||
- for (i=1; i <= USABLE_PARTITIONS; i++) {
|
||||
- if (p == NULL)
|
||||
- return;
|
||||
- q = p->next;
|
||||
- free(p->f1);
|
||||
- free(p);
|
||||
- p = q;
|
||||
+ if (anchor->f4 != NULL)
|
||||
+ free(anchor->f4);
|
||||
+ if (anchor->f5 != NULL)
|
||||
+ free(anchor->f5);
|
||||
+ if (anchor->f7 != NULL)
|
||||
+ free(anchor->f7);
|
||||
+ if (anchor->vlabel != NULL)
|
||||
+ free(anchor->vlabel);
|
||||
+
|
||||
+ part_info = anchor->first;
|
||||
+ for (i = 1; i <= USABLE_PARTITIONS && part_info != NULL; i++) {
|
||||
+ next = part_info->next;
|
||||
+ free(part_info->f1);
|
||||
+ free(part_info);
|
||||
+ part_info = next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +188,9 @@ fdasd_error (fdasd_anchor_t *anc, enum f
|
||||
_("Device verification failed"),
|
||||
_("The specified device is not a valid DASD device"));
|
||||
break;
|
||||
+ case volser_not_found:
|
||||
+ sprintf(error, "fdasd: %s -- %s\n", _("VOLSER not found on device"), str);
|
||||
+ break;
|
||||
default:
|
||||
sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str);
|
||||
}
|
||||
@@ -313,7 +314,7 @@ fdasd_write_vtoc_labels (fdasd_anchor_t
|
||||
PDEBUG
|
||||
partition_info_t *p;
|
||||
unsigned long b, maxblk;
|
||||
- char dsno[6], s1[7], s2[45], *c1, *c2, *ch;
|
||||
+ char dsno[6], s1[VOLSER_LENGTH + 1], s2[45], *c1, *c2, *ch;
|
||||
int i = 0, k = 0;
|
||||
cchhb_t f9addr;
|
||||
format1_label_t emptyf1;
|
||||
@@ -545,7 +546,6 @@ fdasd_recreate_vtoc (fdasd_anchor_t *anc
|
||||
int i;
|
||||
|
||||
vtoc_init_format4_label(anc->f4,
|
||||
- USABLE_PARTITIONS,
|
||||
anc->geo.cylinders,
|
||||
anc->formatted_cylinders,
|
||||
anc->geo.heads,
|
||||
@@ -793,7 +793,7 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_
|
||||
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,
|
||||
+ vtoc_init_format4_label(anc->f4,
|
||||
anc->geo.cylinders, anc->formatted_cylinders,
|
||||
anc->geo.heads, anc->geo.sectors,
|
||||
anc->blksize, anc->dev_type);
|
||||
@@ -807,6 +807,8 @@ fdasd_invalid_vtoc_pointer(fdasd_anchor_
|
||||
anc->formatted_cylinders, anc->geo.heads);
|
||||
|
||||
vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
|
||||
+ anc->vtoc_changed++;
|
||||
+ anc->vlabel_changed++;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -818,7 +820,7 @@ fdasd_process_invalid_vtoc(fdasd_anchor_
|
||||
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,
|
||||
+ vtoc_init_format4_label(anc->f4,
|
||||
anc->geo.cylinders, anc->formatted_cylinders,
|
||||
anc->geo.heads, anc->geo.sectors,
|
||||
anc->blksize, anc->dev_type);
|
||||
@@ -829,6 +831,8 @@ fdasd_process_invalid_vtoc(fdasd_anchor_
|
||||
FIRST_USABLE_TRK,
|
||||
anc->formatted_cylinders * anc->geo.heads - 1,
|
||||
anc->formatted_cylinders, anc->geo.heads);
|
||||
+
|
||||
+ anc->vtoc_changed++;
|
||||
}
|
||||
|
||||
|
||||
@@ -901,7 +905,7 @@ fdasd_check_volume (fdasd_anchor_t *anc,
|
||||
|
||||
fdasd_init_volume_label(anc, fd);
|
||||
|
||||
- vtoc_init_format4_label(anc->f4, USABLE_PARTITIONS,
|
||||
+ vtoc_init_format4_label(anc->f4,
|
||||
anc->geo.cylinders, anc->formatted_cylinders,
|
||||
anc->geo.heads, anc->geo.sectors,
|
||||
anc->blksize, anc->dev_type);
|
||||
@@ -1213,12 +1217,10 @@ fdasd_add_partition (fdasd_anchor_t *anc
|
||||
return 0;
|
||||
|
||||
if (anc->formatted_cylinders > LV_COMPAT_CYL) {
|
||||
- vtoc_init_format8_label(anc->vlabel->volid, anc->blksize, &ext,
|
||||
- p->f1);
|
||||
+ vtoc_init_format8_label(anc->blksize, &ext, p->f1);
|
||||
} else {
|
||||
PDEBUG;
|
||||
- vtoc_init_format1_label(anc->vlabel->volid, anc->blksize, &ext,
|
||||
- p->f1);
|
||||
+ vtoc_init_format1_label(anc->blksize, &ext, p->f1);
|
||||
}
|
||||
|
||||
PDEBUG;
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue May 2 10:45:37 CEST 2017 - sparschauer@suse.de
|
||||
|
||||
- Use latest fdasd/vtoc code base from s390-tools (fate#321531)
|
||||
- add: libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch
|
||||
- add: libparted-dasd-update-and-improve-fdasd-functions.patch
|
||||
- add: libparted-dasd-add-new-fdasd-functions.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Apr 27 17:37:19 CEST 2017 - sparschauer@suse.de
|
||||
|
||||
|
@ -63,6 +63,10 @@ Patch34: parted-implement-wipesignatures-option.patch
|
||||
Patch35: libparted-Add-support-for-NVMe-devices.patch
|
||||
Patch36: libparted-fix-nvme-partition-naming.patch
|
||||
Patch37: libparted-dont-warn-if-no-HDIO_GET_IDENTITY.patch
|
||||
# fate#321531
|
||||
Patch38: libparted-dasd-unify-vtoc-handling-for-cdl-ldl.patch
|
||||
Patch39: libparted-dasd-update-and-improve-fdasd-functions.patch
|
||||
Patch40: libparted-dasd-add-new-fdasd-functions.patch
|
||||
Patch100: parted-fatresize-autoconf.patch
|
||||
BuildRequires: check-devel
|
||||
BuildRequires: device-mapper-devel >= 1.02.33
|
||||
@ -143,6 +147,9 @@ to develop applications that require these.
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
%patch40 -p1
|
||||
%patch100 -p1
|
||||
|
||||
%build
|
||||
|
Loading…
x
Reference in New Issue
Block a user