From: Dan Williams Date: Wed, 26 Nov 2008 22:39:51 +0000 (-0700) Subject: imsm: fix metadata reservation X-Git-Tag: mdadm-3.0-devel3~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dda5855f96baa1b7e15e6ee8bb6d985e269257e5;p=thirdparty%2Fmdadm.git 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 --- diff --git a/super-intel.c b/super-intel.c index 5d8944ce..99419ffd 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; }