DDF: don't assume the anchor is fully up-to-date.

We currently copy the anchor to both primary and secondary
blocks.
This assumes that the anchor is uptodate, but it might not be.
We should trust the 'active' block and copy from there.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2014-04-10 11:41:18 +10:00
parent 609ce16109
commit 30bee02013
1 changed files with 1 additions and 1 deletions

View File

@ -3095,6 +3095,7 @@ static int _write_super_to_disk(struct ddf_super *ddf, struct dl *d)
*/
get_dev_size(fd, NULL, &size);
size /= 512;
memcpy(&ddf->anchor, ddf->active, 512);
if (be64_to_cpu(d->workspace_lba) != 0ULL)
ddf->anchor.workspace_lba = d->workspace_lba;
else
@ -3110,7 +3111,6 @@ static int _write_super_to_disk(struct ddf_super *ddf, struct dl *d)
else
ddf->anchor.secondary_lba =
cpu_to_be64(size - 32*1024*2);
ddf->anchor.seq = ddf->active->seq;
ddf->anchor.timestamp = cpu_to_be32(time(0) - DECADE);
memcpy(&ddf->primary, &ddf->anchor, 512);
memcpy(&ddf->secondary, &ddf->anchor, 512);