From acee8e896406b686d4b4f12bb748352d20ef83a5 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 18 Dec 2008 14:24:41 +1100 Subject: 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 --- Assemble.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Assemble.c') diff --git a/Assemble.c b/Assemble.c index 3ee028b..0cdeeda 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); -- cgit