summaryrefslogtreecommitdiffstats
path: root/managemon.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2009-02-24 18:45:57 -0700
committerDan Williams <dan.j.williams@intel.com>2009-02-24 18:45:57 -0700
commit04a8ac089c1d295c59380419c927d2bc49f33454 (patch)
tree9d1ca17d84bd60077db20de995b492458068f809 /managemon.c
parent7da80e6faa16e09eb557c5d66ba34c8f29b0072e (diff)
downloadmdadm-04a8ac089c1d295c59380419c927d2bc49f33454.tar.gz
mdadm-04a8ac089c1d295c59380419c927d2bc49f33454.tar.xz
mdadm-04a8ac089c1d295c59380419c927d2bc49f33454.zip
mdmon: record added disks
Prevent duplicate disks from being sent to the monitor thread. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'managemon.c')
-rw-r--r--managemon.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/managemon.c b/managemon.c
index c48c851..5f0a61b 100644
--- a/managemon.c
+++ b/managemon.c
@@ -253,6 +253,9 @@ static void add_disk_to_container(struct supertype *st, struct mdinfo *sd)
dprintf("%s: add %d:%d to container\n",
__func__, sd->disk.major, sd->disk.minor);
+ sd->next = st->devs;
+ st->devs = sd;
+
sprintf(nm, "%d:%d", sd->disk.major, sd->disk.minor);
dfd = dev_open(nm, O_RDWR);
if (dfd < 0)
@@ -313,8 +316,16 @@ static void manage_container(struct mdstat_ent *mdstat,
if (di->disk.major == cd->disk.major &&
di->disk.minor == cd->disk.minor)
break;
- if (!cd)
- add_disk_to_container(container, di);
+ if (!cd) {
+ struct mdinfo *newd = malloc(sizeof(*newd));
+
+ if (!newd) {
+ container->devcnt = -1;
+ continue;
+ }
+ *newd = *di;
+ add_disk_to_container(container, newd);
+ }
}
sysfs_free(mdi);
container->devcnt = mdstat->devcnt;