config: Don't require an array to have a device name.
i.e. in mdadm.conf you can have a line like ARRAY uuid=whatever and it will use auto-name-generation to give a name to the array at assemble-time. The is different from blind auto-assembly in that the array will be treated as 'local'.
This commit is contained in:
parent
215bb3f776
commit
fe056d1fb0
|
@ -154,7 +154,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
if (array_list->uuid_set &&
|
if (array_list->uuid_set &&
|
||||||
same_uuid(array_list->uuid, info.uuid, st->ss->swapuuid)
|
same_uuid(array_list->uuid, info.uuid, st->ss->swapuuid)
|
||||||
== 0) {
|
== 0) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2 && array_list->devname)
|
||||||
fprintf(stderr, Name
|
fprintf(stderr, Name
|
||||||
": UUID differs from %s.\n",
|
": UUID differs from %s.\n",
|
||||||
array_list->devname);
|
array_list->devname);
|
||||||
|
@ -162,7 +162,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
}
|
}
|
||||||
if (array_list->name[0] &&
|
if (array_list->name[0] &&
|
||||||
strcasecmp(array_list->name, info.name) != 0) {
|
strcasecmp(array_list->name, info.name) != 0) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2 && array_list->devname)
|
||||||
fprintf(stderr, Name
|
fprintf(stderr, Name
|
||||||
": Name differs from %s.\n",
|
": Name differs from %s.\n",
|
||||||
array_list->devname);
|
array_list->devname);
|
||||||
|
@ -170,7 +170,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
}
|
}
|
||||||
if (array_list->devices &&
|
if (array_list->devices &&
|
||||||
!match_oneof(array_list->devices, devname)) {
|
!match_oneof(array_list->devices, devname)) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2 && array_list->devname)
|
||||||
fprintf(stderr, Name
|
fprintf(stderr, Name
|
||||||
": Not a listed device for %s.\n",
|
": Not a listed device for %s.\n",
|
||||||
array_list->devname);
|
array_list->devname);
|
||||||
|
@ -178,7 +178,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
}
|
}
|
||||||
if (array_list->super_minor != UnSet &&
|
if (array_list->super_minor != UnSet &&
|
||||||
array_list->super_minor != info.array.md_minor) {
|
array_list->super_minor != info.array.md_minor) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2 && array_list->devname)
|
||||||
fprintf(stderr, Name
|
fprintf(stderr, Name
|
||||||
": Different super-minor to %s.\n",
|
": Different super-minor to %s.\n",
|
||||||
array_list->devname);
|
array_list->devname);
|
||||||
|
@ -188,7 +188,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
!array_list->name[0] &&
|
!array_list->name[0] &&
|
||||||
!array_list->devices &&
|
!array_list->devices &&
|
||||||
array_list->super_minor == UnSet) {
|
array_list->super_minor == UnSet) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2 && array_list->devname)
|
||||||
fprintf(stderr, Name
|
fprintf(stderr, Name
|
||||||
": %s doesn't have any identifying information.\n",
|
": %s doesn't have any identifying information.\n",
|
||||||
array_list->devname);
|
array_list->devname);
|
||||||
|
@ -197,10 +197,15 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
/* FIXME, should I check raid_disks and level too?? */
|
/* FIXME, should I check raid_disks and level too?? */
|
||||||
|
|
||||||
if (match) {
|
if (match) {
|
||||||
if (verbose >= 0)
|
if (verbose >= 0) {
|
||||||
fprintf(stderr, Name
|
if (match->devname && array_list->devname)
|
||||||
|
fprintf(stderr, Name
|
||||||
": we match both %s and %s - cannot decide which to use.\n",
|
": we match both %s and %s - cannot decide which to use.\n",
|
||||||
match->devname, array_list->devname);
|
match->devname, array_list->devname);
|
||||||
|
else
|
||||||
|
fprintf(stderr, Name
|
||||||
|
": multiple lines in mdadm.conf match\n");
|
||||||
|
}
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
match = array_list;
|
match = array_list;
|
||||||
|
@ -656,7 +661,8 @@ int IncrementalScan(int verbose)
|
||||||
}
|
}
|
||||||
/* Ok, we can try this one. Maybe it needs a bitmap */
|
/* Ok, we can try this one. Maybe it needs a bitmap */
|
||||||
for (mddev = devs ; mddev ; mddev = mddev->next)
|
for (mddev = devs ; mddev ; mddev = mddev->next)
|
||||||
if (strcmp(mddev->devname, me->path) == 0)
|
if (mddev->devname
|
||||||
|
&& strcmp(mddev->devname, me->path) == 0)
|
||||||
break;
|
break;
|
||||||
if (mddev && mddev->bitmap_file) {
|
if (mddev && mddev->bitmap_file) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -165,7 +165,10 @@ int Monitor(mddev_dev_t devlist,
|
||||||
if (devlist == NULL) {
|
if (devlist == NULL) {
|
||||||
mddev_ident_t mdlist = conf_get_ident(NULL);
|
mddev_ident_t mdlist = conf_get_ident(NULL);
|
||||||
for (; mdlist; mdlist=mdlist->next) {
|
for (; mdlist; mdlist=mdlist->next) {
|
||||||
struct state *st = malloc(sizeof *st);
|
struct state *st;
|
||||||
|
if (mdlist->devname == NULL)
|
||||||
|
continue;
|
||||||
|
st = malloc(sizeof *st);
|
||||||
if (st == NULL)
|
if (st == NULL)
|
||||||
continue;
|
continue;
|
||||||
st->devname = strdup(mdlist->devname);
|
st->devname = strdup(mdlist->devname);
|
||||||
|
|
9
config.c
9
config.c
|
@ -529,14 +529,12 @@ void arrayline(char *line)
|
||||||
w);
|
w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mis.devname == NULL)
|
if (mis.uuid_set == 0 && mis.devices == NULL && mis.super_minor == UnSet && mis.name[0] == 0)
|
||||||
fprintf(stderr, Name ": ARRAY line with no device\n");
|
|
||||||
else if (mis.uuid_set == 0 && mis.devices == NULL && mis.super_minor == UnSet && mis.name[0] == 0)
|
|
||||||
fprintf(stderr, Name ": ARRAY line %s has no identity information.\n", mis.devname);
|
fprintf(stderr, Name ": ARRAY line %s has no identity information.\n", mis.devname);
|
||||||
else {
|
else {
|
||||||
mi = malloc(sizeof(*mi));
|
mi = malloc(sizeof(*mi));
|
||||||
*mi = mis;
|
*mi = mis;
|
||||||
mi->devname = strdup(mis.devname);
|
mi->devname = mis.devname ? strdup(mis.devname) : NULL;
|
||||||
mi->next = NULL;
|
mi->next = NULL;
|
||||||
*mddevlp = mi;
|
*mddevlp = mi;
|
||||||
mddevlp = &mi->next;
|
mddevlp = &mi->next;
|
||||||
|
@ -721,7 +719,8 @@ mddev_ident_t conf_get_ident(char *dev)
|
||||||
mddev_ident_t rv;
|
mddev_ident_t rv;
|
||||||
load_conffile();
|
load_conffile();
|
||||||
rv = mddevlist;
|
rv = mddevlist;
|
||||||
while (dev && rv && strcmp(dev, rv->devname)!=0)
|
while (dev && rv && (rv->devname == NULL
|
||||||
|
|| strcmp(dev, rv->devname)!=0))
|
||||||
rv = rv->next;
|
rv = rv->next;
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
10
mdadm.c
10
mdadm.c
|
@ -1082,16 +1082,6 @@ int main(int argc, char *argv[])
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
for (; array_list; array_list = array_list->next) {
|
for (; array_list; array_list = array_list->next) {
|
||||||
mdfd = open_mddev(array_list->devname, 0);
|
|
||||||
if (mdfd >= 0) {
|
|
||||||
mdu_array_info_t array;
|
|
||||||
/* skip if already assembled */
|
|
||||||
if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0) {
|
|
||||||
cnt++;
|
|
||||||
close(mdfd);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (array_list->autof == 0)
|
if (array_list->autof == 0)
|
||||||
array_list->autof = autof;
|
array_list->autof = autof;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue