Re: [PATCH 1/3] imsm: FIX: Chunk size migration is not possible

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

 



On Wed, 14 Dec 2011 16:07:05 +0100 Adam Kwolek <adam.kwolek@xxxxxxxxx> wrote:

> Chunk size only migration for raid0 and raid5 is not possible.
> (mdadm UT 15* fails). Mdadm exits with information:
>    mdadm: imsm unknown layout 0xffffffff for this raid level 0
> 
> Problem was introduced in patch (2011-11-16):
>    imsm: platform capabilities are not validated during level migration
> 
> During chunk size migration layout variable is not set correctly.
> Set it correctly for this migration type.
> 
> Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx>


Applied, thanks.

NeilBrown







> ---
> 
>  super-intel.c |   19 ++++++++++++-------
>  1 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/super-intel.c b/super-intel.c
> index 3a34f5a..e1073ef 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -9050,8 +9050,10 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
>  	int change = -1;
>  	int check_devs = 0;
>  	int chunk;
> -	int devNumChange=0;
> -	int layout = -1;
> +	/* number of added/removed disks in operation result */
> +	int devNumChange = 0;
> +	/* imsm compatible layout value for array geometry verification */
> +	int imsm_layout = -1;
>  
>  	getinfo_super_imsm_volume(st, &info, NULL);
>  	if ((geo->level != info.array.level) &&
> @@ -9069,14 +9071,14 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
>  					change = -1;
>  					goto analyse_change_exit;
>  				}
> -				layout =  geo->layout;
> +				imsm_layout =  geo->layout;
>  				check_devs = 1;
>  				devNumChange = 1; /* parity disk added */
>  			} else if (geo->level == 10) {
>  				change = CH_TAKEOVER;
>  				check_devs = 1;
>  				devNumChange = 2; /* two mirrors added */
> -				layout = 0x102; /* imsm supported layout */
> +				imsm_layout = 0x102; /* imsm supported layout */
>  			}
>  			break;
>  		case 1:
> @@ -9085,7 +9087,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
>  				change = CH_TAKEOVER;
>  				check_devs = 1;
>  				devNumChange = -(geo->raid_disks/2);
> -				layout = 0; /* imsm raid0 layout */
> +				imsm_layout = 0; /* imsm raid0 layout */
>  			}
>  			break;
>  		}
> @@ -9120,8 +9122,11 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
>  			change = -1;
>  			goto analyse_change_exit;
>  		}
> -	} else
> +	} else {
>  		geo->layout = info.array.layout;
> +		if (imsm_layout == -1)
> +			imsm_layout = info.array.layout;
> +	}
>  
>  	if ((geo->chunksize > 0) && (geo->chunksize != UnSet)
>  	    && (geo->chunksize != info.array.chunk_size))
> @@ -9132,7 +9137,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
>  	chunk = geo->chunksize / 1024;
>  	if (!validate_geometry_imsm(st,
>  				    geo->level,
> -				    layout,
> +				    imsm_layout,
>  				    geo->raid_disks + devNumChange,
>  				    &chunk,
>  				    geo->size,

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