summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Grow.c15
-rw-r--r--mdadm.c6
2 files changed, 18 insertions, 3 deletions
diff --git a/Grow.c b/Grow.c
index 65b708a..29d3628 100644
--- a/Grow.c
+++ b/Grow.c
@@ -512,8 +512,21 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
}
}
if (size >= 0) {
+ int rv;
array.size = size;
- if (ioctl(fd, SET_ARRAY_INFO, &array) != 0) {
+ if (array.size != size) {
+ /* got truncated to 32bit, write to
+ * component_size instead
+ */
+ sra = sysfs_read(fd, 0, 0);
+ if (sra)
+ rv = sysfs_set_num(sra, NULL,
+ "component_size", size);
+ else
+ rv = -1;
+ } else
+ rv = ioctl(fd, SET_ARRAY_INFO, &array);
+ if (rv != 0) {
fprintf(stderr, Name ": Cannot set device size for %s: %s\n",
devname, strerror(errno));
return 1;
diff --git a/mdadm.c b/mdadm.c
index 0432622..a77c4ad 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -389,12 +389,14 @@ int main(int argc, char *argv[])
if (strcmp(optarg, "max")==0)
size = 0;
else {
- size = strtoll(optarg, &c, 10);
- if (!optarg[0] || *c || size < 4) {
+ size = parse_size(optarg);
+ if (size < 8) {
fprintf(stderr, Name ": invalid size: %s\n",
optarg);
exit(2);
}
+ /* convert sectors to K */
+ size /= 2;
}
continue;