summaryrefslogtreecommitdiffstats
path: root/mdstat.c
diff options
context:
space:
mode:
authorMarcin Labun <marcin.labun@intel.com>2010-07-06 09:49:37 +0200
committerNeilBrown <neilb@suse.de>2010-07-06 10:02:22 +0200
commit0ad6835c98fd3968d998cf9f3e1d88bdf7ec4a76 (patch)
tree7bc917ae4259caf03c38a9ca3af198476cd213a2 /mdstat.c
parentfix: IncrementalRemove leaves open handle (diff)
downloadmdadm-0ad6835c98fd3968d998cf9f3e1d88bdf7ec4a76.tar.xz
mdadm-0ad6835c98fd3968d998cf9f3e1d88bdf7ec4a76.zip
Fix the count of member devices in mdstat_read function.
Correction of the number of container or volume member devices (devcnt in struct mdstat_ent). The number after the last devices was counted towards member of devices. Signed-off-by: Marcin Labun <marcin.labun@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdstat.c')
-rw-r--r--mdstat.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mdstat.c b/mdstat.c
index 3bb74fa2..47be2bba 100644
--- a/mdstat.c
+++ b/mdstat.c
@@ -94,19 +94,20 @@ static void free_member_devnames(struct dev_member *m)
}
}
-static void add_member_devname(struct dev_member **m, char *name)
+static int add_member_devname(struct dev_member **m, char *name)
{
struct dev_member *new;
char *t;
if ((t = strchr(name, '[')) == NULL)
/* not a device */
- return;
+ return 0;
new = malloc(sizeof(*new));
new->name = strndup(name, t - name);
new->next = *m;
*m = new;
+ return 1;
}
void free_mdstat(struct mdstat_ent *ms)
@@ -207,8 +208,8 @@ struct mdstat_ent *mdstat_read(int hold, int start)
} else if (in_devs && strcmp(w, "blocks")==0)
in_devs = 0;
else if (in_devs) {
- ent->devcnt++;
- add_member_devname(&ent->members, w);
+ ent->devcnt +=
+ add_member_devname(&ent->members, w);
if (strncmp(w, "md", 2)==0) {
/* This has an md device as a component.
* If that device is already in the