From: NeilBrown Date: Wed, 23 Mar 2011 00:07:27 +0000 (+1100) Subject: Assemble: improve efficacy of -Af in assembling degraded dirty arrays. X-Git-Tag: mdadm-3.1.5~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=89ced23b58cfd4529ade47488ee37a5ffce7cd8e;p=thirdparty%2Fmdadm.git Assemble: improve efficacy of -Af in assembling degraded dirty arrays. If a degraded dirty array has some superblocks which are clean and others that are dirty, and the dirty ones are newer by precisely '1' in the event count, then the current code to force the array to be clean will not work. We need to make sure to find a superblock with most recent event count and force that one to be 'clean'. Reported-by: A J Wyborny Signed-off-by: NeilBrown --- diff --git a/Assemble.c b/Assemble.c index ea3a6484..83bdbfac 100644 --- a/Assemble.c +++ b/Assemble.c @@ -905,6 +905,8 @@ int Assemble(struct supertype *st, char *mddev, continue; if (!devices[j].uptodate) continue; + if (devices[j].i.events < devices[most_recent].i.events) + continue; chosen_drive = j; if ((fd=dev_open(devices[j].devname, O_RDONLY|O_EXCL))< 0) { fprintf(stderr, Name ": Cannot open %s: %s\n", @@ -996,6 +998,9 @@ int Assemble(struct supertype *st, char *mddev, close(mdfd); return 1; } + if (verbose >= 0) + fprintf(stderr, Name ": Marking array %s as 'clean'\n", + mddev); close(fd); }