diff options
author | NeilBrown <neilb@suse.de> | 2009-07-14 14:32:30 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-07-14 14:32:30 +1000 |
commit | 5f4fc0e1916c47c1b172801f53362e50d32cd4dc (patch) | |
tree | 878345ba1b1b0b2679124a2f27880f8fa5a6edda /Grow.c | |
parent | 19678e536d5b7aba8b721a3065f2550b79ddd208 (diff) | |
download | mdadm-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.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -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; |