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