From 3eff7c1d2fd658df69d8379cb87f3a766dd5ab5c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 10 Jul 2013 10:47:22 +1000 Subject: [PATCH] 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 --- super-ddf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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) -- 2.47.2