summaryrefslogtreecommitdiff
path: root/Manage.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-03-05 11:53:51 +1100
committerNeilBrown <neilb@suse.de>2013-03-05 11:53:51 +1100
commit5e73b02409e55b1f8e48e7b933d97a73ff2e66d3 (patch)
tree09cad15e1c395e7c7381d4c927063bc4c32dbd4d /Manage.c
parent748952f73e34f9963ea82347f4d71d67dcb1096a (diff)
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>
Diffstat (limited to 'Manage.c')
-rw-r--r--Manage.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/Manage.c b/Manage.c
index c7738e1e..e3d30412 100644
--- a/Manage.c
+++ b/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);
}
}