Re: [PATCH 6/8] Verify reshape restart position

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux