DDF: more guards against pdnum being negative.

With consistent metdata, pdnum should never be negative,
but it is better to be safe than sorry.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: fix usage of ->used_pdes

The "used_pdes" value counts the number of physdisk entries that
are in used.
It may not be the last one in use as there may be unused slots in
the middle.

So when were are iterating over phys disks, we need to use max_pdes
and skip unused entries.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: examine_pds to also list devices that aren't in the metadata.

The phys disks table should list all disks, but if the metadata
is corrupt, it might not even list the disk it was read from.
So check for and report any known disks that aren't listed.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: avoid ref outside array in getinfo_super_ddf_bvd

As we are range-checking 'cd', there is a chance that it is not
in-range.  In that case we should include all array indexes with 'cd'
inside the range-tested branch.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: update timestamp in DDF header.

Doco says:
  Header update timestamp. MUST be set when the DDF
  header is updated.

So I guess we should.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: update timestamp/seqnum for virtual disks when config changes.

- we weren't updating this timestamp at all
- the 'vd_config' seqnum was updated on every write of the metadata,
  which is excessive.  Just update it when there is a change.


Signed-off-by: NeilBrown <neilb@suse.de>
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>
DDF: set utime for container from timestamp is superblock.

Also be more consistent about setting events from seq in superblock.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: use array_size from metadata.

If some other controller sets a number smaller than a calculation
would give us, we really should honour it.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: explain why spare_refs are ignored.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: support more  RAID10 levels.

The DDF "RAID1E" level is similar to md "raid10".

So use raid10 to support RAID1E, and create RAID1E for raid10
configs not already supported.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: provide simple detail_super() implementation.

Just print the GUID, Seq and number of VDs in the container.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: remove old and wrong comment about settinig raid_disk.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: DDF_Missing devices should not be reported as 'working' by getinfo_super_ddf

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: allow for unused slots when creating map list for getinfo_super_ddf.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: factor out common code for search through extents.

Each place the uses "get_extents" has slightly different search code
to look through the result.

Factor this out into a single find_space() function.

This is will make it easier to add --data-offset support.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: add support of --data-offset when creating array.

Infrastructure is there, so use it.

This requires making sure that ->data_offset is correctly set, even
for containers.

Signed-off-by: NeilBrown <neilb@suse.de>
tests: handle new raid10/ddf geometries.

Recent changes to support more ddf geometries using raid1e
requires updates to tests.

Signed-off-by: NeilBrown <neilb@suse.de>
tests: handle change to DDF assembly.

When a DDF array is assembled with missing devices, those devices
are now alway marked as 'missing' and cannot just re-appear in the array
and be working again.

test must be changed to acknowledge this.

Signed-off-by: NeilBrown <neilb@suse.de>
DDF: split up ddf_process_update

Function was way too big, make several smaller functions.

Signed-off-by: NeilBrown <neilb@suse.de>