On 03/26/12 00:29, NeilBrown wrote: > On Thu, 22 Mar 2012 17:15:53 +0100 Jes.Sorensen@xxxxxxxxxx wrote: > >> From: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> >> >> raid1 arrays do not have the notion of chunk size. Set the existing >> chunk size of the new raid0 to the same as the proposed new chunk size >> to avoid a divide by zero OOPS when aligning the size of the new array >> to that of the chunk size. > > This oops happens in create_strip_zones at > > sector_div(sectors, mddev->chunk_sectors); > > correct? Correct >> mddev->new_chunk_sectors = 128; /* by default set chunk size to 64k */ >> + mddev->chunk_sectors = 128; /* >> + * a raid1 one doesn't have the >> + * notion of chunk size, so set >> + * existing chunk_sector to match the >> + * new size to avoid divide by zero >> + * when aligning the size of the new >> + * raid0 to the existing chunk size. >> + */ > > But what if the RAID1 is not a multiple of 64K ? Then you will lose > data. Good point - I wasn't sure what the actual sizes would be in practice. > We probably want the same thing we have in RAID5: > > > > chunksect = 64*2; /* 64K by default */ > > /* The array must be an exact multiple of chunksize */ > while (chunksect && (mddev->array_sectors & (chunksect-1))) > chunksect >>= 1; > > if ((chunksect<<9) < STRIPE_SIZE) > /* array size does not allow a suitable chunk size */ > return ERR_PTR(-EINVAL); > > > ?? > > Do you want to make a patch, or shall I? I have brewed up a patch based on this. I used PAGE_SIZE instead of STRIPE_SIZE for the limit since we don't have stripes in raid0. I'll post it in a minute. Cheers, Jes -- 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