[parted-devel] [PATCH] Always allow at least two sectors for extended boot record

Jim Meyering jim at meyering.net
Thu Apr 8 12:26:28 UTC 2010


Colin Watson wrote:
> Unless specifically told otherwise, the Linux kernel considers extended
> boot records to be two sectors long, in order to "leave room for LILO".
> When using anything other than cylinder alignment, libparted was only
> allowing one sector in the minimum extended partition geometry, which in
> some situations (e.g. following Phillip Susi's patch to reintroduce
> BLKPG) could confuse the kernel into thinking that the EBR and the first
> logical partition overlapped.
>
> * libparted/labels/dos.c (_get_min_extended_part_geom): Allow at least
> two sectors for the extended boot record.
> ---
>  libparted/labels/dos.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
> index 6fb4aef..c25d35a 100644
> --- a/libparted/labels/dos.c
> +++ b/libparted/labels/dos.c
> @@ -1747,7 +1747,11 @@ _get_min_extended_part_geom (const PedPartition* ext_part,
>  	min_geom = ped_geometry_duplicate (&walk->geom);
>  	if (!min_geom)
>  		return NULL;
> -	ped_geometry_set_start (min_geom, walk->geom.start - 1 * head_size);
> +	/* We must always allow at least two sectors at the start, to leave
> +	 * room for LILO.  See linux/fs/partitions/msdos.c.
> +	 */
> +	ped_geometry_set_start (min_geom,
> +				walk->geom.start - PED_MAX (1 * head_size, 2));
>
>  	for (walk = ext_part->part_list; walk; walk = walk->next) {
>  		if (!ped_partition_is_active (walk) || walk->num == 5)

Colin,

Here is your patch followed by a quick attempt at exercising it.
As you can see from the FIXME comment, this test appears to be
exercising different code.  Can you suggest how to fix it?



More information about the parted-devel mailing list