[PATCH 1/2] dos: always allow at least two sectors for extended boot record

Colin Watson cjwatson at ubuntu.com
Mon Mar 29 13:40:54 UTC 2010


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 5eee7dd..8f3fcdb 100644
--- a/libparted/labels/dos.c
+++ b/libparted/labels/dos.c
@@ -1752,7 +1752,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)
--
1.7.1.rc0.239.g8b27e




More information about the parted-devel mailing list