diff options
author | Dan Williams <dan.j.williams@intel.com> | 2009-02-24 18:45:57 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2009-02-24 18:45:57 -0700 |
commit | 04a8ac089c1d295c59380419c927d2bc49f33454 (patch) | |
tree | 9d1ca17d84bd60077db20de995b492458068f809 /managemon.c | |
parent | 7da80e6faa16e09eb557c5d66ba34c8f29b0072e (diff) | |
download | mdadm-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.c | 15 |
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; |