summaryrefslogtreecommitdiff
path: root/Grow.c
diff options
context:
space:
mode:
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/Grow.c b/Grow.c
index c0fa5660..043e28ff 100644
--- a/Grow.c
+++ b/Grow.c
@@ -892,9 +892,13 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
/* LCM == product / GCD */
blocks = ochunk/512 * nchunk/512 * odata * ndata / a;
- if (ndata == odata)
- blocks *= 16;
- else
+ if (ndata == odata) {
+ /* Make 'blocks' bigger for better throughput, but
+ * not so big that we reject it below.
+ */
+ if (blocks * 32 < sra->component_size)
+ blocks *= 16;
+ } else
fprintf(stderr, Name ": Need to backup %luK of critical "
"section..\n", blocks/2);