From: Neil Brown Date: Mon, 16 Oct 2006 05:26:43 +0000 (+1000) Subject: Reduce max bitmap size when bitmap is in a file. X-Git-Tag: mdadm-2.5.5~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b39827de21032f5bda931242f232ec9c3cb7da98;p=thirdparty%2Fmdadm.git Reduce max bitmap size when bitmap is in a file. To ensure kernel never needs to allocate more than 1 page contiguously. --- diff --git a/ChangeLog b/ChangeLog index e89a0dd5..44fd2964 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ Changes Prior to this release - Don't #include linux/blkpg.h as that isn't safe. Just include the content literally. + - Reduce maximum bitmap usage when working with bitmap files, + so that a only single-page allocations are made, even on + 64bit hosts with 4K pages. Changes Prior to 2.5.4 release - When creating devices in /dev/md/ create matching symlinks diff --git a/bitmap.c b/bitmap.c index 768c17fc..81dc62b2 100644 --- a/bitmap.c +++ b/bitmap.c @@ -345,11 +345,12 @@ int CreateBitmap(char *filename, int force, char uuid[16], if (chunksize == UnSet) { /* We don't want more than 2^21 chunks, as 2^11 fill up one * 4K page (2 bytes per chunk), and 2^10 address of those - * fill up a 4K indexing page. 2^20 might be safer... + * fill up a 4K indexing page. 2^20 might be safer, especially + * on 64bit hosts, so use that. */ chunksize = DEFAULT_BITMAP_CHUNK; - /* <<21 for 2^21 chunks, >>9 to convert bytes to sectors */ - while (array_size > (chunksize << (21-9))) + /* <<20 for 2^20 chunks, >>9 to convert bytes to sectors */ + while (array_size > (chunksize << (20-9))) chunksize <<= 1; }