On Sunday July 17, [EMAIL PROTECTED] wrote:
> When debugging some weird raid failure case, we come
> across a problem when kernel disallows assembling a
> linear array with zero chunksize, printing
> 'no chunksize specified' in dmesg and mdadm failing
> with EINVAL.  The following patch fixes the problem
> (the patch is with large context to show why the change).
> 
> Note chunk size is never used on linear array.  The
> only usage of chunk_size member is in /proc/mdstat,
> as "rounding" parameter (linear.c) - looks like it
> should be removed too.

This statement isn't entirely true, though it took me a little while
to remind myself exactly how linear.c does use chunk_size.

linear_run in linear.c uses rdev->size for each devices.
in md.c rdev->size is set by a call to calc_dev_size()
calc_dev_size *does* use chunk_size (if it is non-zero)

However that doesn't make your patch wrong, as a zero chunk size
certainly seems to be handled correctly by linear.  However I might
spend a little while reviewing that aspect of the code before I pass
on this patch.

Thanks,
NeilBrown


> 
> Signed-Off-By: Michael Tokarev <[EMAIL PROTECTED]>
> 
> --- linux-2.6.12/drivers/md/md.c.orig 2005-06-17 23:48:29.000000000 +0400
> +++ linux-2.6.12/drivers/md/md.c      2005-07-17 03:07:05.000000000 +0400
> @@ -1516,21 +1516,21 @@ static int do_md_run(mddev_t * mddev)
>  
>       /*
>        * Analyze all RAID superblock(s)
>        */
>       if (!mddev->raid_disks)
>               analyze_sbs(mddev);
>  
>       chunk_size = mddev->chunk_size;
>       pnum = level_to_pers(mddev->level);
>  
> -     if ((pnum != MULTIPATH) && (pnum != RAID1)) {
> +     if ((pnum != MULTIPATH) && (pnum != RAID1) && (pnum != LINEAR)) {
>               if (!chunk_size) {
>                       /*
>                        * 'default chunksize' in the old md code used to
>                        * be PAGE_SIZE, baaad.
>                        * we abort here to be on the safe side. We don't
>                        * want to continue the bad practice.
>                        */
>                       printk(KERN_ERR 
>                               "no chunksize specified, see 'man raidtab'\n");
>                       return -EINVAL;
> -
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to