From: NeilBrown Date: Wed, 10 Jul 2013 00:47:22 +0000 (+1000) Subject: DDF load headers: if primary is invalid, don't check fields. X-Git-Tag: mdadm-3.3-rc2~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3eff7c1d2fd658df69d8379cb87f3a766dd5ab5c;p=thirdparty%2Fmdadm.git DDF load headers: if primary is invalid, don't check fields. 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 --- diff --git a/super-ddf.c b/super-ddf.c index dd1095bd..a3799b81 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -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)