diff options
author | NeilBrown <neilb@suse.de> | 2009-11-06 14:18:49 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-11-06 14:18:49 +1100 |
commit | e380d3be42706ed455baf7b03c05d07f13368951 (patch) | |
tree | 947d81be2c8fcee1f2bfba28dd0c7542b916744b | |
parent | d44453876eefa0aa4c6d2dc224cde3f501b051ff (diff) | |
download | mdadm-e380d3be42706ed455baf7b03c05d07f13368951.tar.gz |
Grow: get component_size before using it.
We were using ->component_size while it hadn't been set.
This effectively meant that 'blocks' wasn't multiplied by
16 and reshape was even slower than it should have been.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Grow.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -900,6 +900,11 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, /* LCM == product / GCD */ blocks = ochunk/512 * nchunk/512 * odata * ndata / a; + sysfs_free(sra); + sra = sysfs_read(fd, 0, + GET_COMPONENT|GET_DEVS|GET_OFFSET|GET_STATE| + GET_CACHE); + if (ndata == odata) { /* Make 'blocks' bigger for better throughput, but * not so big that we reject it below. @@ -910,10 +915,6 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, fprintf(stderr, Name ": Need to backup %luK of critical " "section..\n", blocks/2); - sysfs_free(sra); - sra = sysfs_read(fd, 0, - GET_COMPONENT|GET_DEVS|GET_OFFSET|GET_STATE| - GET_CACHE); if (!sra) { fprintf(stderr, Name ": %s: Cannot get array details from sysfs\n", devname); |