mapinfo: simplify subarray handling.
We don't need ->container_dev here, and we will soon be passing subarray as an explicit arg to load_super. So simplify extraction of subarray and move the strcpy close to ->load_super. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
4725bc31fb
commit
ca145a1e4c
24
mapfile.c
24
mapfile.c
|
@ -334,31 +334,20 @@ struct map_ent *map_by_name(struct map_ent **map, char *name)
|
|||
* version super_by_fd does this automatically, this routine is meant as
|
||||
* a supplement for guess_super()
|
||||
*/
|
||||
static void set_member_info(struct supertype *st, struct mdstat_ent *ent)
|
||||
static char *get_member_info(struct mdstat_ent *ent)
|
||||
{
|
||||
|
||||
st->subarray[0] = '\0';
|
||||
|
||||
if (ent->metadata_version == NULL ||
|
||||
strncmp(ent->metadata_version, "external:", 9) != 0)
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
if (is_subarray(&ent->metadata_version[9])) {
|
||||
char version[strlen(ent->metadata_version)+1];
|
||||
char *subarray;
|
||||
char *name = &version[10];
|
||||
|
||||
strcpy(version, ent->metadata_version);
|
||||
subarray = strrchr(version, '/');
|
||||
name = &version[10];
|
||||
|
||||
if (!subarray)
|
||||
return;
|
||||
*subarray++ = '\0';
|
||||
|
||||
st->container_dev = devname2devnum(name);
|
||||
strncpy(st->subarray, subarray, sizeof(st->subarray));
|
||||
subarray = strrchr(ent->metadata_version, '/');
|
||||
return subarray + 1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void RebuildMap(void)
|
||||
|
@ -402,7 +391,8 @@ void RebuildMap(void)
|
|||
if ( st == NULL)
|
||||
ok = -1;
|
||||
else {
|
||||
set_member_info(st, md);
|
||||
char *subarray = get_member_info(md);
|
||||
strcpy(st->subarray, subarray);
|
||||
ok = st->ss->load_super(st, dfd, NULL);
|
||||
}
|
||||
close(dfd);
|
||||
|
|
Loading…
Reference in New Issue