teach imsm and ddf what st->subarray means at load_super time
RebuildMap wants to poll through mdstat and retrieve a (kernel name, uuid, user name) tuple for each array. Teach imsm and ddf to honor st->sub_array at ->load_super() time to set their internal subarray pointers to the value specified in st->subarray, or return an error if st->subarray specifies an invalid array. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
fa09d4961e
commit
af99d9ca67
12
super-ddf.c
12
super-ddf.c
|
@ -835,6 +835,18 @@ static int load_super_ddf(struct supertype *st, int fd,
|
|||
return rv;
|
||||
}
|
||||
|
||||
if (st->subarray[0]) {
|
||||
struct vcl *v;
|
||||
|
||||
for (v = super->conflist; v; v = v->next)
|
||||
if (v->vcnum == atoi(st->subarray))
|
||||
super->currentconf = v;
|
||||
if (!super->currentconf) {
|
||||
free(super);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Should possibly check the sections .... */
|
||||
|
||||
st->sb = super;
|
||||
|
|
|
@ -2167,8 +2167,10 @@ static int load_super_imsm_all(struct supertype *st, int fd, void **sbp,
|
|||
if (st->subarray[0]) {
|
||||
if (atoi(st->subarray) <= super->anchor->num_raid_devs)
|
||||
super->current_vol = atoi(st->subarray);
|
||||
else
|
||||
else {
|
||||
free_imsm(super);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
*sbp = super;
|
||||
|
@ -2193,8 +2195,6 @@ static int load_super_imsm(struct supertype *st, int fd, char *devname)
|
|||
if (load_super_imsm_all(st, fd, &st->sb, devname, 1) == 0)
|
||||
return 0;
|
||||
#endif
|
||||
if (st->subarray[0])
|
||||
return 1; /* FIXME */
|
||||
|
||||
super = alloc_super(0);
|
||||
if (!super) {
|
||||
|
@ -2215,6 +2215,15 @@ static int load_super_imsm(struct supertype *st, int fd, char *devname)
|
|||
return rv;
|
||||
}
|
||||
|
||||
if (st->subarray[0]) {
|
||||
if (atoi(st->subarray) <= super->anchor->num_raid_devs)
|
||||
super->current_vol = atoi(st->subarray);
|
||||
else {
|
||||
free_imsm(super);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
st->sb = super;
|
||||
if (st->ss == NULL) {
|
||||
st->ss = &super_imsm;
|
||||
|
|
Loading…
Reference in New Issue