From 93f174b986519ddf86e377199299d77af6850f1a Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 21 May 2013 12:34:24 +1000 Subject: [PATCH] Grow: set_new_data_offset should report if kernel is too old. For RAID5, not being able to set new_data_offset because of old kernel is not a problem. So make this fatal on for RAID10. Also remove an unused assignment to 'rv'. Signed-off-by: NeilBrown --- Grow.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Grow.c b/Grow.c index 3e03c7a..ee0fc5e 100644 --- a/Grow.c +++ b/Grow.c @@ -2173,7 +2173,6 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st, fprintf(stderr, Name ": %s: cannot open component %s\n", devname, dn ? dn : "-unknown-"); - rv = -1; goto release; } st2 = dup_super(st); @@ -2293,6 +2292,11 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st, if (sysfs_set_num(sra, sd, "new_offset", info2.new_data_offset) < 0) { err = errno; + if (sd == sra->devs && err == ENOENT) + /* Early kernel, no 'new_offset' file. + * For RAID5/6 this is not fatal + */ + return 1; fprintf(stderr, Name ": Cannot set new_offset for %s\n", dn); break; @@ -2358,6 +2362,11 @@ static int raid10_reshape(char *container, int fd, char *devname, } err = set_new_data_offset(sra, st, devname, info->delta_disks, data_offset, min); + if (err == 1) { + pr_err("Cannot set new_data_offset: RAID10 reshape not\n"); + cont_err("supported on this kernel\n"); + err = -1; + } if (err < 0) goto release;