On Tue, 27 Sep 2011 14:05:22 +0200 Adam Kwolek <adam.kwolek@xxxxxxxxx> wrote: > Check if reshape restart position is the same as set in md. > If position doesn't match this means that we cannot restart reshape. > > Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx> > --- > > Grow.c | 32 ++++++++++++++++++++++++++++++++ > 1 files changed, 32 insertions(+), 0 deletions(-) > > diff --git a/Grow.c b/Grow.c > index afe4c72..3ff249d 100644 > --- a/Grow.c > +++ b/Grow.c > @@ -3653,6 +3653,8 @@ int Grow_continue_command(char *devname, int fd, > char buf[40]; > int cfd = -1; > int fd2 = -1; > + char *ep; > + unsigned long long position; > > dprintf("Grow continue from command line called for %s\n", > devname); > @@ -3754,6 +3756,36 @@ int Grow_continue_command(char *devname, int fd, > } > } > > + /* verify that array under reshape is started from > + * correct position > + */ > + ret_val = sysfs_get_str(content, NULL, "sync_max", buf, 40); > + if (ret_val <= 0) { > + fprintf(stderr, Name > + ": cannot open verify reshape progress for %s (%i)\n", > + content->sys_name, ret_val); > + ret_val = 1; > + goto Grow_continue_command_exit; > + } > + dprintf(Name ": Read sync_max sysfs entry is: %s\n", buf); > + errno = 0; > + position = strtoull(buf, &ep, 0); > + if (errno || ep == buf || (*ep != 0 && *ep != '\n' && *ep != ' ')) { > + fprintf(stderr, Name ": md is not allowed to finish reshape " > + "wihout mdadm assistance.\n"); > + ret_val = 1; > + goto Grow_continue_command_exit; > + } > + position *= get_data_disks(map_name(pers, mdstat->level), > + content->new_layout, > + content->array.raid_disks); > + if (position != content->reshape_progress) { > + fprintf(stderr, Name ": md is not allowed to finish reshape " > + "wihout mdadm assistance.\n"); > + ret_val = 1; > + goto Grow_continue_command_exit; > + } > + > /* continue reshape > */ > ret_val = Grow_continue(fd, st, content, backup_file, Applied with a few small changes. 1/ is it never correct to test errno to see if an error occurred. You must test something else to see if an error occurred, and the check errno to see what the error was. 2/ The error message didn't seem helpful. I changed it to: Fatal error: array reshape was not properly frozen. Thanks, NeilBrown
Attachment:
signature.asc
Description: PGP signature