NeilBrown: super1: put bitmap on a 4K boundary when possible.

Martin F. Krafft madduck at alioth.debian.org
Mon May 24 09:21:03 UTC 2010


Module: mdadm
Branch: upstream
Commit: a31128d2de3c3b60e6cbcceef391479ad3c0cfb4
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=a31128d2de3c3b60e6cbcceef391479ad3c0cfb4

Author: NeilBrown <neilb at suse.de>
Date:   Wed Feb 24 11:31:48 2010 +1100

super1: put bitmap on a 4K boundary when possible.

Some devices have 4K sector sizes.  So try to align the bitmap
on a 4K boundary.
This isn't possible when hot-adding a bitmap, but will be once
we add support for configuring the bitmap via sysfs.

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

---

 super1.c |   15 +++++++--------
 1 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/super1.c b/super1.c
index 40fbb81..7861cf4 100644
--- a/super1.c
+++ b/super1.c
@@ -1445,8 +1445,8 @@ add_internal_bitmap1(struct supertype *st,
 
 	switch(st->minor_version) {
 	case 0:
-		/* either 3K after the superblock, or some amount of space
-		 * before.
+		/* either 3K after the superblock (when hot-add),
+		 * or some amount of space before.
 		 */
 		if (may_change) {
 			/* We are creating array, so we *know* how much room has
@@ -1454,11 +1454,6 @@ add_internal_bitmap1(struct supertype *st,
 			 */
 			offset = 0;
 			room = choose_bm_space(__le64_to_cpu(sb->size));
-			if (room == 4*2) {
-				/* make it 3K after the superblock */
-				room = 3*2;
-				offset = 2;
-			}
 		} else {
 			room = __le64_to_cpu(sb->super_offset)
 				- __le64_to_cpu(sb->data_offset)
@@ -1519,8 +1514,12 @@ add_internal_bitmap1(struct supertype *st,
 		return 0;
 
 	if (offset == 0) {
+		/* start bitmap on a 4K boundary with enough space for
+		 * the bitmap
+		 */
 		bits = (size*512) / chunk + 1;
-		room = ((bits+7)/8 + sizeof(bitmap_super_t) +511)/512;
+		room = ((bits+7)/8 + sizeof(bitmap_super_t) +4095)/4096;
+		room *= 8; /* convert 4K blocks to sectors */
 		offset = -room;
 	}
 




More information about the pkg-mdadm-commits mailing list