From 430ea469ad1962cbef4d9068e5ca19e0bec41f65 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 9 Mar 2010 16:32:04 +1100 Subject: Stop: done stop a container which still have members active. Doing that is just confusing... Signed-off-by: NeilBrown --- Manage.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'Manage.c') diff --git a/Manage.c b/Manage.c index 6d94836f..f848d8b1 100644 --- a/Manage.c +++ b/Manage.c @@ -236,11 +236,32 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet) mdi->array.major_version == -1 && mdi->array.minor_version == -2 && !is_subarray(mdi->text_version)) { + struct mdstat_ent *mds, *m; /* container, possibly mdmon-managed. * Make sure mdmon isn't opening it, which * would interfere with the 'stop' */ ping_monitor(mdi->sys_name); + + /* now check that there are no existing arrays + * which are members of this array + */ + mds = mdstat_read(0, 0); + for (m=mds; m; m=m->next) + if (m->metadata_version && + strncmp(m->metadata_version, "external:", 9)==0 && + is_subarray(m->metadata_version+9) && + devname2devnum(m->metadata_version+10) == devnum) { + if (!quiet) + fprintf(stderr, Name + ": Cannot stop container %s: " + "member %s still active\n", + devname, m->dev); + free_mdstat(mds); + if (mdi) + sysfs_free(mdi); + return 1; + } } if (fd >= 0 && ioctl(fd, STOP_ARRAY, NULL)) { -- cgit v1.2.3