From: NeilBrown Date: Thu, 18 Dec 2008 03:24:41 +0000 (+1100) Subject: Assemble: set stripe_cache_size properly when restarting a reshape. X-Git-Tag: mdadm-2.6.9~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acee8e896406b686d4b4f12bb748352d20ef83a5;hp=4e9a6ff778cdc58dcc6897e74cf5ee1d3f73e1f7;p=thirdparty%2Fmdadm.git Assemble: set stripe_cache_size properly when restarting a reshape. Reshape with large chunk size can require a large stripe_cache. We make this work when starting the reshape but not when restarting at assemble time. So fix that. Signed-off-by: NeilBrown --- diff --git a/Assemble.c b/Assemble.c index 3ee028b4..0cdeeda3 100644 --- a/Assemble.c +++ b/Assemble.c @@ -934,6 +934,20 @@ int Assemble(struct supertype *st, char *mddev, int mdfd, fprintf(stderr, " and %d spare%s", sparecnt, sparecnt==1?"":"s"); fprintf(stderr, ".\n"); } + if (info.reshape_active && + info.array.level >= 4 && + info.array.level <= 6) { + /* might need to increase the size + * of the stripe cache - default is 256 + */ + if (256 < 4 * (info.array.chunk_size/4096)) { + struct mdinfo *sra = sysfs_read(mdfd, 0, 0); + if (sra) + sysfs_set_num(sra, NULL, + "stripe_cache_size", + (4 * info.array.chunk_size / 4096) + 1); + } + } if (must_close) { int usecs = 1; close(mdfd);