diff options
author | Marcin Labun <marcin.labun@intel.com> | 2010-07-06 09:49:37 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-07-06 10:02:22 +0200 |
commit | 0ad6835c98fd3968d998cf9f3e1d88bdf7ec4a76 (patch) | |
tree | 7bc917ae4259caf03c38a9ca3af198476cd213a2 /mdstat.c | |
parent | fix: IncrementalRemove leaves open handle (diff) | |
download | mdadm-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.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -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 |