summaryrefslogtreecommitdiffstats
path: root/Grow.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-07-14 14:32:30 +1000
committerNeilBrown <neilb@suse.de>2009-07-14 14:32:30 +1000
commit5f4fc0e1916c47c1b172801f53362e50d32cd4dc (patch)
tree878345ba1b1b0b2679124a2f27880f8fa5a6edda /Grow.c
parent19678e536d5b7aba8b721a3065f2550b79ddd208 (diff)
downloadmdadm-5f4fc0e1916c47c1b172801f53362e50d32cd4dc.tar.gz
mdadm-5f4fc0e1916c47c1b172801f53362e50d32cd4dc.tar.xz
mdadm-5f4fc0e1916c47c1b172801f53362e50d32cd4dc.zip
Grow: --size improvements.
1/ allow --size to be given with 'G' or 'T' suffix. 2/ allow size to exceed 32bits, and in that case write through sysfs. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c15
1 files changed, 14 insertions, 1 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;