avoid creation of partitions beyond actual capacity (patch for 2.6.15)

Phillip Susi psusi at cfl.rr.com
Wed Feb 8 22:36:34 UTC 2006


Why don't you submit this patch to the lkml for inclusion in the 
mainline kernel?  It seems to me that it is a bug in the first place for 
the kernel to create the invalid devices.

Gerte Hoogewerf wrote:
> In reply to: "Here is how to stop the new udev from accessing your
> striped	 dmraid drives (Peter Jones)"
> 
> Hi folkes,
> 
> When using striped Fake-Raid's the partition table of a RAID set is
> oftenly found at the fist sector on one of the underlying disks. This
> confuses the kernel which creates partitions for every disk carrying a
> partition table. It's very likely such a partition starts at an offset
> beyond the end of a single device that belongs to the striped set. The
> result is a partition like /dev/sdXY which starts at an offset beyound the
> maximum capacity of the device. If any (user-)code accesses the device the
> kernel will output scary block IO errors. Udev will acces the device, so
> the errors will occur everytime you boot.
> 
> People on this list are proposing to prevent udev, hal et altera to access
> the device. This can be done by removing udev rules, like the way Peter
> Jones describes. I solved the underlying problem on my setup by a kernel
> patch. I never felt any need to share the code, until now: The code seems
> to be interesting for more people.
> 
> My approach just prevents the kernel to create invalid partitions:
> partitions beyond the end of a device won't be created (the offset is set
> to zero and rest of the existing code path won't create the partition).
> In fact the patch adds a check in the partition detection code. Not
> creating partitions with an offset >= capacity won't hurt any other code.
> Not using the patch won't hurt either, but I found it annoying to see
> Block IO errors in my syslogger just because of a tiny kernel bug.
> 
> You can download / review the patch here:
> http://tienstra4.flatnet.tudelft.nl/~gerte/linux-2.6.15-dont-create-incorrect-partitions.txt
> 
> A copy of the patch has been attached to this e-mail.
> 
> Feel free to alter or include in any distribution,
> Gerte
> 
> 
> ------------------------------------------------------------------------
> 
> diff -Nur linux-2.6.15/fs/partitions/check.c linux-2.6.15-check/fs/partitions/check.c
> --- linux-2.6.15/fs/partitions/check.c	2006-01-03 04:21:10.000000000 +0100
> +++ linux-2.6.15-check/fs/partitions/check.c	2006-02-08 21:20:03.000000000 +0100
> @@ -175,8 +175,19 @@
>  		memset(&state->parts, 0, sizeof(state->parts));
>  		res = check_part[i++](state, bdev);
>  	}
> -	if (res > 0)
> +	if (res > 0) {
> +		sector_t from, cap;
> +		for(i = 1; i < state->limit; i++) {
> +			from = state->parts[i].from;
> +			cap = get_capacity(hd);
> +			if(state->parts[i].size + from > cap) {
> +				printk(KERN_WARNING " %s: partition %s%d beyond device capacity\n",
> +						hd->disk_name, hd->disk_name, i);
> +				state->parts[i].size = cap - (from < cap ? from : cap);
> +			}
> +		}
>  		return state;
> +	}
>  	if (!res)
>  		printk(" unknown partition table\n");
>  	else if (warn_no_part)
> 
> 




More information about the Ataraid-list mailing list