Kay Sievers: add --export option to --examine

Martin F. Krafft madduck at alioth.debian.org
Wed Jun 25 15:42:30 UTC 2008


Module: mdadm
Branch: build
Commit: 0d726f17e191094665a5f2af8c2564dedb990502
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=0d726f17e191094665a5f2af8c2564dedb990502

Author: Kay Sievers <kay.sievers at vrfy.org>
Date:   Tue May  6 10:02:38 2008 +1000

add --export option to --examine

From: Kay Sievers <kay.sievers at vrfy.org>

Cc: David Zeuthen <david at fubar.dk>
Signed-off-by: Kay Sievers <kay.sievers at vrfy.org>

---

 Detail.c  |    2 +-
 Examine.c |    5 ++++-
 mdadm.8   |    4 +++-
 mdadm.c   |    4 +++-
 mdadm.h   |    7 ++++---
 super0.c  |   24 ++++++++++++++++++++++--
 super1.c  |   39 +++++++++++++++++++++++++++++++++++++--
 7 files changed, 74 insertions(+), 11 deletions(-)

diff --git a/Detail.c b/Detail.c
index 6199d26..2fb59a3 100644
--- a/Detail.c
+++ b/Detail.c
@@ -142,7 +142,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
 			       array.major_version, array.minor_version);
 
 		if (st && st->sb)
-			st->ss->export_super(st);
+			st->ss->export_detail_super(st);
 		goto out;
 	}
 
diff --git a/Examine.c b/Examine.c
index 276e0fa..5de9202 100644
--- a/Examine.c
+++ b/Examine.c
@@ -35,7 +35,7 @@
 #endif
 #include	"md_u.h"
 #include	"md_p.h"
-int Examine(mddev_dev_t devlist, int brief, int scan,
+int Examine(mddev_dev_t devlist, int brief, int export, int scan,
 	    int SparcAdjust, struct supertype *forcest,
 	    char *homehost)
 {
@@ -102,6 +102,7 @@ int Examine(mddev_dev_t devlist, int brief, int scan,
 			st->ss->update_super(st, NULL, "sparc2.2",
 					     devlist->devname, 0, 0, NULL);
 		/* Ok, its good enough to try, though the checksum could be wrong */
+
 		if (brief) {
 			struct array *ap;
 			char *d;
@@ -126,6 +127,8 @@ int Examine(mddev_dev_t devlist, int brief, int scan,
 				ap->spares++;
 			d = dl_strdup(devlist->devname);
 			dl_add(ap->devs, d);
+		} else if (export) {
+			st->ss->export_examine_super(st);
 		} else {
 			printf("%s:\n",devlist->devname);
 			st->ss->examine_super(st, homehost);
diff --git a/mdadm.8 b/mdadm.8
index 01ec981..d3cecb8 100644
--- a/mdadm.8
+++ b/mdadm.8
@@ -946,7 +946,9 @@ Print detail of one or more md devices.
 .TP
 .BR \-Y ", " \-\-export
 When used with
-.BR \-\-detail ,
+.B \-\-detail
+or
+.BR \-\-examine ,
 output will be formatted as
 .B key=value
 pairs for easy import into the environment.
diff --git a/mdadm.c b/mdadm.c
index f2a7bcd..ccd0933 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1202,7 +1202,9 @@ int main(int argc, char *argv[])
 			}
 			if (brief && verbose)
 				brief = 2;
-			rv = Examine(devlist, scan?(verbose>1?0:verbose+1):brief, scan, SparcAdjust, ss, homehost);
+			rv = Examine(devlist, scan?(verbose>1?0:verbose+1):brief,
+				     export, scan,
+				     SparcAdjust, ss, homehost);
 		} else {
 			if (devlist == NULL) {
 				if (devmode=='D' && scan) {
diff --git a/mdadm.h b/mdadm.h
index 0d73c17..5c18d15 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -330,9 +330,10 @@ extern char *map_dev(int major, int minor, int create);
 extern struct superswitch {
 	void (*examine_super)(struct supertype *st, char *homehost);
 	void (*brief_examine_super)(struct supertype *st);
+	void (*export_examine_super)(struct supertype *st);
 	void (*detail_super)(struct supertype *st, char *homehost);
-	void (*export_super)(struct supertype *st);
 	void (*brief_detail_super)(struct supertype *st);
+	void (*export_detail_super)(struct supertype *st);
 	void (*uuid_from_super)(struct supertype *st, int uuid[4]);
 	void (*getinfo_super)(struct supertype *st, struct mdinfo *info);
 	int (*match_home)(struct supertype *st, char *homehost);
@@ -451,8 +452,8 @@ extern int Create(struct supertype *st, char *mddev, int mdfd,
 
 extern int Detail(char *dev, int brief, int export, int test, char *homehost);
 extern int Query(char *dev);
-extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust,
-		   struct supertype *forcest, char *homehost);
+extern int Examine(mddev_dev_t devlist, int brief, int export, int scan,
+		   int SparcAdjust, struct supertype *forcest, char *homehost);
 extern int Monitor(mddev_dev_t devlist,
 		   char *mailaddr, char *alert_cmd,
 		   int period, int daemonise, int scan, int oneshot,
diff --git a/super0.c b/super0.c
index b1ad47a..2476d77 100644
--- a/super0.c
+++ b/super0.c
@@ -252,6 +252,25 @@ static void brief_examine_super0(struct supertype *st)
 	printf("\n");
 }
 
+static void export_examine_super0(struct supertype *st)
+{
+	mdp_super_t *sb = st->sb;
+
+	printf("MD_LEVEL=%s\n", map_num(pers, sb->level));
+	printf("MD_DEVICES=%d\n", sb->raid_disks);
+	if (sb->minor_version >= 90)
+		printf("MD_UUID=%08x:%08x:%08x:%08x\n",
+		       sb->set_uuid0, sb->set_uuid1,
+		       sb->set_uuid2, sb->set_uuid3);
+	else
+		printf("MD_UUID=%08x\n", sb->set_uuid0);
+	printf("MD_UPDATE_TIME=%llu\n",
+	       __le64_to_cpu(sb->ctime) & 0xFFFFFFFFFFULL);
+	printf("MD_EVENTS=%llu\n",
+	       ((unsigned long long)sb->events_hi << 32)
+	       + sb->events_lo);
+}
+
 static void detail_super0(struct supertype *st, char *homehost)
 {
 	mdp_super_t *sb = st->sb;
@@ -283,7 +302,7 @@ static void brief_detail_super0(struct supertype *st)
 		printf("%08x", sb->set_uuid0);
 }
 
-static void export_super0(struct supertype *st)
+static void export_detail_super0(struct supertype *st)
 {
 	mdp_super_t *sb = st->sb;
 	printf("MD_UUID=");
@@ -974,9 +993,10 @@ struct superswitch super0 = {
 #ifndef MDASSEMBLE
 	.examine_super = examine_super0,
 	.brief_examine_super = brief_examine_super0,
+	.export_examine_super = export_examine_super0,
 	.detail_super = detail_super0,
 	.brief_detail_super = brief_detail_super0,
-	.export_super = export_super0,
+	.export_detail_super = export_detail_super0,
 #endif
 	.match_home = match_home0,
 	.uuid_from_super = uuid_from_super0,
diff --git a/super1.c b/super1.c
index 7ea6958..fe915f8 100644
--- a/super1.c
+++ b/super1.c
@@ -375,6 +375,40 @@ static void brief_examine_super1(struct supertype *st)
 	printf("\n");
 }
 
+static void export_examine_super1(struct supertype *st)
+{
+	struct mdp_superblock_1 *sb = st->sb;
+	int i;
+	int len = 32;
+
+	printf("MD_LEVEL=%s\n", map_num(pers, __le32_to_cpu(sb->level)));
+	printf("MD_DEVICES=%d\n", __le32_to_cpu(sb->raid_disks));
+	for (i=0; i<32; i++)
+		if (sb->set_name[i] == '\n' ||
+		    sb->set_name[i] == '\0') {
+			len = i;
+			break;
+		}
+	if (len)
+		printf("MD_NAME=%.*s\n", len, sb->set_name);
+	printf("MD_UUID=");
+	for (i=0; i<16; i++) {
+		if ((i&3)==0 && i != 0) printf(":");
+		printf("%02x", sb->set_uuid[i]);
+	}
+	printf("\n");
+	printf("MD_UPDATE_TIME=%llu\n",
+	       __le64_to_cpu(sb->utime) & 0xFFFFFFFFFFULL);
+	printf("MD_DEV_UUID=");
+	for (i=0; i<16; i++) {
+		if ((i&3)==0 && i != 0) printf(":");
+		printf("%02x", sb->device_uuid[i]);
+	}
+	printf("\n");
+	printf("MD_EVENTS=%llu\n",
+	       (unsigned long long)__le64_to_cpu(sb->events));
+}
+
 static void detail_super1(struct supertype *st, char *homehost)
 {
 	struct mdp_superblock_1 *sb = st->sb;
@@ -408,7 +442,7 @@ static void brief_detail_super1(struct supertype *st)
 	}
 }
 
-static void export_super1(struct supertype *st)
+static void export_detail_super1(struct supertype *st)
 {
 	struct mdp_superblock_1 *sb = st->sb;
 	int i;
@@ -1386,9 +1420,10 @@ struct superswitch super1 = {
 #ifndef MDASSEMBLE
 	.examine_super = examine_super1,
 	.brief_examine_super = brief_examine_super1,
+	.export_examine_super = export_examine_super1,
 	.detail_super = detail_super1,
 	.brief_detail_super = brief_detail_super1,
-	.export_super = export_super1,
+	.export_detail_super = export_detail_super1,
 #endif
 	.match_home = match_home1,
 	.uuid_from_super = uuid_from_super1,




More information about the pkg-mdadm-commits mailing list