array.major_version, array.minor_version);
if (st && st->sb)
- st->ss->export_super(st);
+ st->ss->export_detail_super(st);
goto out;
}
#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)
{
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;
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);
.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.
}
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) {
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);
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,
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;
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=");
#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,
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;
}
}
-static void export_super1(struct supertype *st)
+static void export_detail_super1(struct supertype *st)
{
struct mdp_superblock_1 *sb = st->sb;
int i;
#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,