Blob Blame History Raw
Subject: [PATCH] libparted: mklabel to support EDEV DASD

From: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>

Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
which are layed out as a sequence of 512-byte sectors. This patch adds
support for mklabel to properly handle FBA devices.

Signed-off-by: Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
---
 libparted/labels/fdasd.c |   24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

--- a/libparted/labels/fdasd.c
+++ b/libparted/labels/fdasd.c
@@ -869,19 +869,21 @@ fdasd_check_volume (fdasd_anchor_t *anc,
 	vtoc_read_volume_label (fd, anc->label_pos, v);
 
 	if (strncmp(v->vollbl, vtoc_ebcdic_enc ("VOL1", str, 4), 4) == 0) {
-		/* found VOL1 volume label */
-		b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize;
+		if (anc->FBA_layout != 1 ) {
+			/* found VOL1 volume label */
+			b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize;
 
-		if (b > 0) {
-			int rc;
-			rc = fdasd_valid_vtoc_pointer (anc, b, fd);
+			if (b > 0) {
+				int rc;
+				rc = fdasd_valid_vtoc_pointer (anc, b, fd);
 
-			if (rc < 0)
-				return 1;
-			else
-				return 0;
-		} else {
-			fdasd_invalid_vtoc_pointer(anc);
+				if (rc < 0)
+					return 1;
+				else
+					return 0;
+			} else {
+				fdasd_invalid_vtoc_pointer(anc);
+			}
 		}
 	} else if (strncmp (v->volkey, vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0 ||
 	           strncmp (v->volkey, vtoc_ebcdic_enc ("CMS1", str, 4), 4) == 0) {