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 &&
|
||||
same_uuid(array_list->uuid, info.uuid, st->ss->swapuuid)
|
||||
== 0) {
|
||||
if (verbose >= 2)
|
||||
if (verbose >= 2 && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": UUID differs from %s.\n",
|
||||
array_list->devname);
|
||||
|
@ -162,7 +162,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
|||
}
|
||||
if (array_list->name[0] &&
|
||||
strcasecmp(array_list->name, info.name) != 0) {
|
||||
if (verbose >= 2)
|
||||
if (verbose >= 2 && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": Name differs from %s.\n",
|
||||
array_list->devname);
|
||||
|
@ -170,7 +170,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
|||
}
|
||||
if (array_list->devices &&
|
||||
!match_oneof(array_list->devices, devname)) {
|
||||
if (verbose >= 2)
|
||||
if (verbose >= 2 && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": Not a listed device for %s.\n",
|
||||
array_list->devname);
|
||||
|
@ -178,7 +178,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
|||
}
|
||||
if (array_list->super_minor != UnSet &&
|
||||
array_list->super_minor != info.array.md_minor) {
|
||||
if (verbose >= 2)
|
||||
if (verbose >= 2 && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": Different super-minor to %s.\n",
|
||||
array_list->devname);
|
||||
|
@ -188,7 +188,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
|||
!array_list->name[0] &&
|
||||
!array_list->devices &&
|
||||
array_list->super_minor == UnSet) {
|
||||
if (verbose >= 2)
|
||||
if (verbose >= 2 && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": %s doesn't have any identifying information.\n",
|
||||
array_list->devname);
|
||||
|
@ -197,10 +197,15 @@ int Incremental(char *devname, int verbose, int runstop,
|
|||
/* FIXME, should I check raid_disks and level too?? */
|
||||
|
||||
if (match) {
|
||||
if (verbose >= 0)
|
||||
fprintf(stderr, Name
|
||||
if (verbose >= 0) {
|
||||
if (match->devname && array_list->devname)
|
||||
fprintf(stderr, Name
|
||||
": 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;
|
||||
}
|
||||
match = array_list;
|
||||
|
@ -656,7 +661,8 @@ int IncrementalScan(int verbose)
|
|||
}
|
||||
/* Ok, we can try this one. Maybe it needs a bitmap */
|
||||
for (mddev = devs ; mddev ; mddev = mddev->next)
|
||||
if (strcmp(mddev->devname, me->path) == 0)
|
||||
if (mddev->devname
|
||||
&& strcmp(mddev->devname, me->path) == 0)
|
||||
break;
|
||||
if (mddev && mddev->bitmap_file) {
|
||||
/*
|
||||
|
|
|
@ -165,7 +165,10 @@ int Monitor(mddev_dev_t devlist,
|
|||
if (devlist == NULL) {
|
||||
mddev_ident_t mdlist = conf_get_ident(NULL);
|
||||
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)
|
||||
continue;
|
||||
st->devname = strdup(mdlist->devname);
|
||||
|
|
9
config.c
9
config.c
|
@ -529,14 +529,12 @@ void arrayline(char *line)
|
|||
w);
|
||||
}
|
||||
}
|
||||
if (mis.devname == NULL)
|
||||
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)
|
||||
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);
|
||||
else {
|
||||
mi = malloc(sizeof(*mi));
|
||||
*mi = mis;
|
||||
mi->devname = strdup(mis.devname);
|
||||
mi->devname = mis.devname ? strdup(mis.devname) : NULL;
|
||||
mi->next = NULL;
|
||||
*mddevlp = mi;
|
||||
mddevlp = &mi->next;
|
||||
|
@ -721,7 +719,8 @@ mddev_ident_t conf_get_ident(char *dev)
|
|||
mddev_ident_t rv;
|
||||
load_conffile();
|
||||
rv = mddevlist;
|
||||
while (dev && rv && strcmp(dev, rv->devname)!=0)
|
||||
while (dev && rv && (rv->devname == NULL
|
||||
|| strcmp(dev, rv->devname)!=0))
|
||||
rv = rv->next;
|
||||
return rv;
|
||||
}
|
||||
|
|
10
mdadm.c
10
mdadm.c
|
@ -1082,16 +1082,6 @@ int main(int argc, char *argv[])
|
|||
exit(1);
|
||||
}
|
||||
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)
|
||||
array_list->autof = autof;
|
||||
|
||||
|
|
Loading…
Reference in New Issue