NeilBrown: Grow: don't make 'blocks' too large during in-place reshape.

Martin F. Krafft madduck at alioth.debian.org
Wed Jan 27 02:03:12 UTC 2010


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

Author: NeilBrown <neilb at suse.de>
Date:   Fri Oct 16 17:02:34 2009 +1100

Grow: don't make 'blocks' too large during in-place reshape.

On small (test) arrays, multiplying by 16 can make the 'chunk' size
larger than half the array, which is a problem.

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

---

 Grow.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/Grow.c b/Grow.c
index c0fa566..043e28f 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);
 




More information about the pkg-mdadm-commits mailing list