From: mwilck@arcor.de Date: Wed, 3 Jul 2013 20:27:43 +0000 (+0200) Subject: DDF: load_ddf_headers: use secondary header as fallback X-Git-Tag: mdadm-3.3-rc2~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dbeb699a77e898bb82b90342348dc59743b0c16f;p=thirdparty%2Fmdadm.git DDF: load_ddf_headers: use secondary header as fallback When the primary header can't be read, use the secondary header as fallback. Signed-off-by: Martin Wilck Signed-off-by: NeilBrown --- diff --git a/super-ddf.c b/super-ddf.c index c445df20..45522f2e 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -601,15 +601,15 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname) DDF_REVISION_2, super->anchor.revision,devname); return 2; } + super->active = NULL; if (load_ddf_header(fd, __be64_to_cpu(super->anchor.primary_lba), dsize >> 9, 1, &super->primary, &super->anchor) == 0) { if (devname) pr_err("Failed to load primary DDF header " "on %s\n", devname); - return 2; - } - super->active = &super->primary; + } else + super->active = &super->primary; if (load_ddf_header(fd, __be64_to_cpu(super->anchor.secondary_lba), dsize >> 9, 2, &super->secondary, &super->anchor)) { @@ -619,9 +619,14 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname) || (__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) + pr_err("Failed to load secondary DDF header on %s\n", + devname); + if (super->active == NULL) + return 2; return 0; }