NeilBrown: Stop: done stop a container which still have members active.

Martin F. Krafft madduck at alioth.debian.org
Mon May 24 09:21:17 UTC 2010


Module: mdadm
Branch: upstream
Commit: 430ea469ad1962cbef4d9068e5ca19e0bec41f65
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=430ea469ad1962cbef4d9068e5ca19e0bec41f65

Author: NeilBrown <neilb at suse.de>
Date:   Tue Mar  9 16:32:04 2010 +1100

Stop: done stop a container which still have members active.

Doing that is just confusing...

Signed-off-by: NeilBrown <neilb at suse.de>

---

 Manage.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/Manage.c b/Manage.c
index 6d94836..f848d8b 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)) {




More information about the pkg-mdadm-commits mailing list