Ensure mddev_dev struct always zeroed on allocation.
There are a number of fields which should not be left uninitialised. e.g. attempt_re_add can get confused if ->writemostly is not set correctly. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
748952f73e
commit
5e73b02409
28
Manage.c
28
Manage.c
|
@ -359,6 +359,18 @@ int Manage_runstop(char *devname, int fd, int runstop,
|
|||
return rv;
|
||||
}
|
||||
|
||||
static struct mddev_dev *add_one(struct mddev_dev *dv, char *name, char disp)
|
||||
{
|
||||
struct mddev_dev *new;
|
||||
new = xmalloc(sizeof(*new));
|
||||
memset(new, 0, sizeof(*new));
|
||||
new->devname = xstrdup(name);
|
||||
new->disposition = disp;
|
||||
new->next = dv->next;
|
||||
dv->next = new;
|
||||
return new;
|
||||
}
|
||||
|
||||
static void add_faulty(struct mddev_dev *dv, int fd, char disp)
|
||||
{
|
||||
mdu_array_info_t array;
|
||||
|
@ -371,7 +383,6 @@ static void add_faulty(struct mddev_dev *dv, int fd, char disp)
|
|||
|
||||
remaining_disks = array.nr_disks;
|
||||
for (i = 0; i < MAX_DISKS && remaining_disks > 0; i++) {
|
||||
struct mddev_dev *new;
|
||||
char buf[40];
|
||||
disk.number = i;
|
||||
if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
|
||||
|
@ -382,12 +393,7 @@ static void add_faulty(struct mddev_dev *dv, int fd, char disp)
|
|||
if ((disk.state & 1) == 0) /* not faulty */
|
||||
continue;
|
||||
sprintf(buf, "%d:%d", disk.major, disk.minor);
|
||||
new = xmalloc(sizeof(*new));
|
||||
new->devname = xstrdup(buf);
|
||||
new->disposition = disp;
|
||||
new->next = dv->next;
|
||||
dv->next = new;
|
||||
dv = new;
|
||||
dv = add_one(dv, buf, disp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -403,7 +409,6 @@ static void add_detached(struct mddev_dev *dv, int fd, char disp)
|
|||
|
||||
remaining_disks = array.nr_disks;
|
||||
for (i = 0; i < MAX_DISKS && remaining_disks > 0; i++) {
|
||||
struct mddev_dev *new;
|
||||
char buf[40];
|
||||
int sfd;
|
||||
disk.number = i;
|
||||
|
@ -424,12 +429,7 @@ static void add_detached(struct mddev_dev *dv, int fd, char disp)
|
|||
if (errno != ENXIO)
|
||||
/* Probably not detached */
|
||||
continue;
|
||||
new = xmalloc(sizeof(*new));
|
||||
new->devname = xstrdup(buf);
|
||||
new->disposition = disp;
|
||||
new->next = dv->next;
|
||||
dv->next = new;
|
||||
dv = new;
|
||||
dv = add_one(dv, buf, disp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
6
config.c
6
config.c
|
@ -179,9 +179,9 @@ struct mddev_dev *load_partitions(void)
|
|||
if (!name)
|
||||
continue;
|
||||
d = xmalloc(sizeof(*d));
|
||||
memset(d, 0, sizeof(*d));
|
||||
d->devname = xstrdup(name);
|
||||
d->next = rv;
|
||||
d->used = 0;
|
||||
rv = d;
|
||||
}
|
||||
fclose(f);
|
||||
|
@ -203,12 +203,12 @@ struct mddev_dev *load_containers(void)
|
|||
strncmp(ent->metadata_version, "external:", 9) == 0 &&
|
||||
!is_subarray(&ent->metadata_version[9])) {
|
||||
d = xmalloc(sizeof(*d));
|
||||
memset(d, 0, sizeof(*d));
|
||||
if (asprintf(&d->devname, "/dev/%s", ent->dev) < 0) {
|
||||
free(d);
|
||||
continue;
|
||||
}
|
||||
d->next = rv;
|
||||
d->used = 0;
|
||||
rv = d;
|
||||
}
|
||||
free_mdstat(mdstat);
|
||||
|
@ -884,9 +884,9 @@ struct mddev_dev *conf_get_devs()
|
|||
if (flags & GLOB_APPEND) {
|
||||
for (i=0; i<globbuf.gl_pathc; i++) {
|
||||
struct mddev_dev *t = xmalloc(sizeof(*t));
|
||||
memset(t, 0, sizeof(*t));
|
||||
t->devname = xstrdup(globbuf.gl_pathv[i]);
|
||||
t->next = dlist;
|
||||
t->used = 0;
|
||||
dlist = t;
|
||||
/* printf("one dev is %s\n", t->devname);*/
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue