Subject: bug#15349: [PATCH 10/19] libparted: mklabel to support EDEV DASD

From: "Brian C. Lane" <[email-masked]>
Date: Wed, 11 Sep 2013 12:25:00 -0700

From: Nageswara R Sastry <[email-masked]>

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 <[email-masked]>
---
 libparted/labels/fdasd.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
index 7de5f34..1f87937 100644
--- a/libparted/labels/fdasd.c
+++ b/libparted/labels/fdasd.c
@@ -870,19 +870,21 @@ fdasd_check_volume (fdasd_anchor_t *anc, int fd)
 	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 (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 (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 (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) {
-- 
1.8.3.1