]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: be more relaxed about timestamp mismatches on backup file.
authorNeilBrown <neilb@suse.de>
Wed, 24 Feb 2010 00:59:11 +0000 (11:59 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 24 Feb 2010 00:59:11 +0000 (11:59 +1100)
As backup file has a timestamp which is updated quite separately
from the metadata timestamp.  They should be largely in-sync but
sometimes are not.
So be more generous in the check, and allow it to be over-ridden
by an environment variable.

Signed-off-by: NeilBrown <neilb@suse.de>
Grow.c

diff --git a/Grow.c b/Grow.c
index efa8c47271439743ab53521ec1bb1994f78bb990..74b63b64a626b388951753b715fb95d5cab1e386 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -1727,11 +1727,23 @@ int Grow_restart(struct supertype *st, struct mdinfo *info, int *fdlist, int cnt
                        continue; /* Wrong uuid */
                }
 
-               if (info->array.utime > __le64_to_cpu(bsb.mtime) + 10*60 ||
+               /* array utime and backup-mtime should be updated at much the same time, but it seems that
+                * sometimes they aren't... So allow considerable flexability in matching, and allow
+                * this test to be overridden by an environment variable.
+                */
+               if (info->array.utime > __le64_to_cpu(bsb.mtime) + 2*60*60 ||
                    info->array.utime < __le64_to_cpu(bsb.mtime) - 10*60) {
-                       if (verbose)
-                               fprintf(stderr, Name ": too-old timestamp on backup-metadata on %s\n", devname);
-                       continue; /* time stamp is too bad */
+                       if (check_env("MDADM_GROW_ALLOW_OLD")) {
+                               fprintf(stderr, Name ": accepting backup with timestamp %lu "
+                                       "for array with timestamp %lu\n",
+                                       (unsigned long)__le64_to_cpu(bsb.mtime),
+                                       (unsigned long)info->array.utime);
+                       } else {
+                               if (verbose)
+                                       fprintf(stderr, Name ": too-old timestamp on "
+                                               "backup-metadata on %s\n", devname);
+                               continue; /* time stamp is too bad */
+                       }
                }
 
                if (bsb.magic[15] == '1') {