RE: [PATCH] Warn the user about too small array size

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

 



Neil,

Could you include also this patch, please.

Regards

> -----Original Message-----
> From: linux-raid-owner@xxxxxxxxxxxxxxx [mailto:linux-raid-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Krzysztof Wojcik
> Sent: Monday, February 28, 2011 6:01 AM
> To: neilb@xxxxxxx
> Cc: linux-raid@xxxxxxxxxxxxxxx; Neubauer, Wojciech; Kwolek, Adam;
> Williams, Dan J; Ciechanowski, Ed
> Subject: [PATCH] Warn the user about too small array size
> 
> If single-disk RAID0 or RAID1 array is created, user may preserve data
> on
> disk. If array given size covers all partitions on disk, all data will
> be
> available on created array. If array size is too small (not covers
> all partitions), data will be not accessible.
> This patch introduces warning message during array creation if given
> size
> is too small. User may interrupt creation process to avoid data loss.
> 
> Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@xxxxxxxxx>
> ---
>  Create.c |    7 +++----
>  mdadm.h  |    2 +-
>  util.c   |    9 ++++++++-
>  3 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/Create.c b/Create.c
> index bbd25e5..ff18ff8 100644
> --- a/Create.c
> +++ b/Create.c
> @@ -121,7 +121,6 @@ int Create(struct supertype *st, char *mddev,
>  	unsigned long long newsize;
> 
>  	int major_num = BITMAP_MAJOR_HI;
> -
>  	memset(&info, 0, sizeof(info));
>  	if (level == UnSet && st && st->ss->default_geometry)
>  		st->ss->default_geometry(st, &level, NULL, NULL);
> @@ -380,14 +379,14 @@ int Create(struct supertype *st, char *mddev,
>  			if (strcmp(st->ss->name, "1.x") == 0 &&
>  			    st->minor_version >= 1)
>  				/* metadata at front */
> -				warn |= check_partitions(fd, dname, 0);
> +				warn |= check_partitions(fd, dname, 0, 0);
>  			else if (level == 1 || level == LEVEL_CONTAINER
>  				    || (level == 0 && raiddisks == 1))
>  				/* partitions could be meaningful */
> -				warn |= check_partitions(fd, dname,
> freesize*2);
> +				warn |= check_partitions(fd, dname, freesize*2,
> size*2);
>  			else
>  				/* partitions cannot be meaningful */
> -				warn |= check_partitions(fd, dname, 0);
> +				warn |= check_partitions(fd, dname, 0, 0);
>  			if (strcmp(st->ss->name, "1.x") == 0 &&
>  			    st->minor_version >= 1 &&
>  			    did_default &&
> diff --git a/mdadm.h b/mdadm.h
> index a1be856..476a2be 100644
> --- a/mdadm.h
> +++ b/mdadm.h
> @@ -1078,7 +1078,7 @@ extern int parse_layout_faulty(char *layout);
>  extern int check_ext2(int fd, char *name);
>  extern int check_reiser(int fd, char *name);
>  extern int check_raid(int fd, char *name);
> -extern int check_partitions(int fd, char *dname, unsigned long long
> freesize);
> +extern int check_partitions(int fd, char *dname, unsigned long long
> freesize, unsigned long long size);
> 
>  extern int get_mdp_major(void);
>  extern int dev_open(char *dev, int flags);
> diff --git a/util.c b/util.c
> index 87c23dc..0f72b0e 100644
> --- a/util.c
> +++ b/util.c
> @@ -1370,7 +1370,8 @@ static int get_last_partition_end(int fd,
> unsigned long long *endofpart)
>  	return retval;
>  }
> 
> -int check_partitions(int fd, char *dname, unsigned long long freesize)
> +int check_partitions(int fd, char *dname, unsigned long long freesize,
> +			unsigned long long size)
>  {
>  	/*
>  	 * Check where the last partition ends
> @@ -1393,6 +1394,12 @@ int check_partitions(int fd, char *dname,
> unsigned long long freesize)
>  				Name ": metadata will over-write last partition
> on %s.\n",
>  				dname);
>  			return 1;
> +		} else if (size && endofpart > size) {
> +			/* partitions will be truncated in new device */
> +			fprintf(stderr,
> +				Name ": array size is too small to cover all
> partitions on %s.\n",
> +				dname);
> +			return 1;
>  		}
>  	}
>  	return 0;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid"
> in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
ÿô.nlj·Ÿ®‰­†+%ŠË±é¥Šwÿº{.nlj·¥Š{±þ¶¢wø¡Ü}©ž²ÆzÚj:+v‰¨þø®w¥þŠàÞ¨è&¢)ß«a¶Úÿûz¹ÞúŽŠÝjÿŠwèf



[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