]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
fix bug in assemble
authorSong Liu <songliubraving@fb.com>
Tue, 8 Dec 2015 01:08:39 +0000 (17:08 -0800)
committerNeilBrown <neilb@suse.com>
Tue, 8 Dec 2015 20:35:50 +0000 (07:35 +1100)
In Assemble, getinfo_super() over-writes journal_clean.  To
ensure correct journal_clean, keep it in a local variable
before getinfo_super().

Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: NeilBrown <neilb@suse.com>
Assemble.c

index 90c9918416db7bb0a4ef6c920da073c7971df8f3..a7cd16386d4bc641f6c6484c7280d0d8ae509fe6 100644 (file)
@@ -1302,6 +1302,7 @@ int Assemble(struct supertype *st, char *mddev,
        int bestcnt = 0;
        int devcnt;
        unsigned int okcnt, sparecnt, rebuilding_cnt, replcnt, journalcnt;
+       int journal_clean = 0;
        int i;
        int was_forced = 0;
        int most_recent = 0;
@@ -1592,7 +1593,7 @@ try_again:
                        ) {
                        devices[j].uptodate = 1;
                        if (devices[j].i.disk.state & (1<<MD_DISK_JOURNAL))
-                               content->journal_clean = 1;
+                               journal_clean = 1;
                        if (i < content->array.raid_disks * 2) {
                                if (devices[j].i.recovery_start == MaxSector ||
                                    (content->reshape_active &&
@@ -1664,6 +1665,8 @@ try_again:
 #ifndef MDASSEMBLE
        sysfs_init(content, mdfd, NULL);
 #endif
+       /* after reload context, store journal_clean in context */
+       content->journal_clean = journal_clean;
        for (i=0; i<bestcnt; i++) {
                int j = best[i];
                unsigned int desired_state;