]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
add --export option to --examine
authorKay Sievers <kay.sievers@vrfy.org>
Tue, 6 May 2008 00:02:38 +0000 (10:02 +1000)
committerNeil Brown <neilb@suse.de>
Tue, 6 May 2008 00:02:38 +0000 (10:02 +1000)
From: Kay Sievers <kay.sievers@vrfy.org>

Cc: David Zeuthen <david@fubar.dk>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Detail.c
Examine.c
mdadm.8
mdadm.c
mdadm.h
super0.c
super1.c

index 6199d26fc5617793794776f1987cdbd000e7c99a..2fb59a3229a8bd7686428f901abe44a75aca12e8 100644 (file)
--- 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;
        }
 
index 276e0fa9610e33877e5f8e134ca9a400f4df994e..5de92028acd4c0bf971a859203bd363ca371ddae 100644 (file)
--- 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 01ec981323151d1f887bc6e974b734639cee0ae7..d3cecb8bcd5af73b4633366846c1bc9ec678434b 100644 (file)
--- 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 f2a7bcd53d3ec8da5ce13f13bc8b81640974f4b8..ccd09333a4fa6396d6ea6f27b5acbb49a058e7ab 100644 (file)
--- 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 0d73c172330ffd2e35dd437db2309f457022645e..5c18d15e594b84fb47c0d003e82fa5590ddbc4d4 100644 (file)
--- 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,
index b1ad47af2a2a0d19175424bea239ea63b49b5452..2476d7715998b524eaf474602b2e9b242be4225b 100644 (file)
--- 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,
index 7ea6958ad846475e421ef6e1762db9e141cf50ae..fe915f8d921ca498d02eef3a9cf92dfaedec8f22 100644 (file)
--- 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,