NeilBrown: Don't let incremental add devices to active arrays.

Martin F. Krafft madduck at alioth.debian.org
Sun Aug 29 11:55:35 UTC 2010


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

Author: NeilBrown <neilb at suse.de>
Date:   Tue Jul  6 12:04:40 2010 +1000

Don't let incremental add devices to active arrays.

Adding devices to active arrays in --incremental is a bit dubious.

Normally the array won't be activated until all expected devices are
present, so this situation would mean that the given device is not
expected, so is probably failed.  In that case it should only be added
by explicit sysadmin request.

However if --run was given, then quite possibly the array was
assembled earlier when not complete, so it is less clear whether it is
wrong to add this device or not.  In that case add it as that is
generally safest.

It would be nice to allow policy for this to be explicitly given by
sysadmin.

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

---

 Incremental.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/Incremental.c b/Incremental.c
index a99811d..7f67535 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -368,6 +368,22 @@ int Incremental(char *devname, int verbose, int runstop,
 		else
 			strcpy(chosen_name, devnum2devname(mp->devnum));
 
+		/* It is generally not OK to add drives to a running array
+		 * as they are probably missing because they failed.
+		 * However if runstop is 1, then the array was possibly
+		 * started early and our best be is to add this anyway.
+		 * It would probably be good to allow explicit policy
+		 * statement about this.
+		 */
+		if (runstop < 1) {
+			if (ioctl(mdfd, GET_ARRAY_INFO, &ainf) == 0) {
+				fprintf(stderr, Name
+					": not adding %s to active array (without --run) %s\n",
+					devname, chosen_name);
+				close(mdfd);
+				return 2;
+			}
+		}
 		sra = sysfs_read(mdfd, fd2devnum(mdfd), (GET_DEVS | GET_STATE));
 
 		if (sra->devs) {




More information about the pkg-mdadm-commits mailing list