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 <mwilck@arcor.de> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
c98567bac1
commit
dbeb699a77
13
super-ddf.c
13
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);
|
DDF_REVISION_2, super->anchor.revision,devname);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
super->active = NULL;
|
||||||
if (load_ddf_header(fd, __be64_to_cpu(super->anchor.primary_lba),
|
if (load_ddf_header(fd, __be64_to_cpu(super->anchor.primary_lba),
|
||||||
dsize >> 9, 1,
|
dsize >> 9, 1,
|
||||||
&super->primary, &super->anchor) == 0) {
|
&super->primary, &super->anchor) == 0) {
|
||||||
if (devname)
|
if (devname)
|
||||||
pr_err("Failed to load primary DDF header "
|
pr_err("Failed to load primary DDF header "
|
||||||
"on %s\n", devname);
|
"on %s\n", devname);
|
||||||
return 2;
|
} else
|
||||||
}
|
super->active = &super->primary;
|
||||||
super->active = &super->primary;
|
|
||||||
if (load_ddf_header(fd, __be64_to_cpu(super->anchor.secondary_lba),
|
if (load_ddf_header(fd, __be64_to_cpu(super->anchor.secondary_lba),
|
||||||
dsize >> 9, 2,
|
dsize >> 9, 2,
|
||||||
&super->secondary, &super->anchor)) {
|
&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->primary.seq)
|
||||||
== __be32_to_cpu(super->secondary.seq) &&
|
== __be32_to_cpu(super->secondary.seq) &&
|
||||||
super->primary.openflag && !super->secondary.openflag)
|
super->primary.openflag && !super->secondary.openflag)
|
||||||
|
|| super->active == NULL
|
||||||
)
|
)
|
||||||
super->active = &super->secondary;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue