diff options
author | Dan Williams <dan.j.williams@intel.com> | 2008-11-26 15:39:51 -0700 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2008-11-27 15:41:03 +1100 |
commit | dda5855f96baa1b7e15e6ee8bb6d985e269257e5 (patch) | |
tree | 35336b64b2a893e3582bedec686c2cfcab724b2d /super-intel.c | |
parent | 208933a7a839d60e48efc90450c6ed3c0f6873e2 (diff) | |
download | mdadm-dda5855f96baa1b7e15e6ee8bb6d985e269257e5.tar.gz mdadm-dda5855f96baa1b7e15e6ee8bb6d985e269257e5.tar.xz mdadm-dda5855f96baa1b7e15e6ee8bb6d985e269257e5.zip |
imsm: fix metadata reservation
1/ When truncating the space reserved for the metadata round down to an
even numbered sector count to avoid an off-by-one error when
sysfs_add_disk rounds up.
2/ Set the current metadata parameter block size
as a floor.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'super-intel.c')
-rw-r--r-- | super-intel.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/super-intel.c b/super-intel.c index 5d8944c..99419ff 100644 --- a/super-intel.c +++ b/super-intel.c @@ -489,6 +489,13 @@ static struct extent *get_extents(struct intel_super *super, struct dl *dl) remainder = __le32_to_cpu(dl->disk.total_blocks) - (last->start + last->size); + /* round down to 1k block to satisfy precision of the kernel + * 'size' interface + */ + remainder &= ~1UL; + /* make sure remainder is still sane */ + if (remainder < ROUND_UP(super->len, 512) >> 9) + remainder = ROUND_UP(super->len, 512) >> 9; if (reservation > remainder) reservation = remainder; } |