]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
DDF load headers: if primary is invalid, don't check fields.
authorNeilBrown <neilb@suse.de>
Wed, 10 Jul 2013 00:47:22 +0000 (10:47 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 10 Jul 2013 00:47:22 +0000 (10:47 +1000)
Currently we compare fields between primary and secondary
superblocks, before we check if the primary is even valid.
This is a bit backwards, so reverse it.

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

index dd1095bdc4816d64fa78694761750763ecb84449..a3799b810e9392a59d05edc24d268f88fe99624c 100644 (file)
@@ -817,13 +817,13 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname)
        if (load_ddf_header(fd, __be64_to_cpu(super->anchor.secondary_lba),
                            dsize >> 9,  2,
                            &super->secondary, &super->anchor)) {
-               if ((__be32_to_cpu(super->primary.seq)
-                    < __be32_to_cpu(super->secondary.seq) &&
-                    !super->secondary.openflag)
+               if (super->active == NULL
+                   || (__be32_to_cpu(super->primary.seq)
+                       < __be32_to_cpu(super->secondary.seq) &&
+                       !super->secondary.openflag)
                    || (__be32_to_cpu(super->primary.seq)
                        == __be32_to_cpu(super->secondary.seq) &&
                        super->primary.openflag && !super->secondary.openflag)
-                   || super->active == NULL
                        )
                        super->active = &super->secondary;
        } else if (devname)