summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2011-05-27 06:37:42 +0000
committerae <ae@FreeBSD.org>2011-05-27 06:37:42 +0000
commitc7d08bd0ef06cb8fa3f9a098e20e65a1dee3bc5c (patch)
tree06f52df5a948b741be488a5805c9b9c220fc19f0 /sys/geom
parent0c3a0335f96c371a65f82809b40f942203da9d61 (diff)
downloadFreeBSD-src-c7d08bd0ef06cb8fa3f9a098e20e65a1dee3bc5c.zip
FreeBSD-src-c7d08bd0ef06cb8fa3f9a098e20e65a1dee3bc5c.tar.gz
Some partitioning tools may have a different opinion about disk
geometry and partitions may start from withing the first track. If we found such partitions, then do not reserve space of the first track, only first sector.
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/part/g_part_mbr.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/geom/part/g_part_mbr.c b/sys/geom/part/g_part_mbr.c
index 0b40366..825a109 100644
--- a/sys/geom/part/g_part_mbr.c
+++ b/sys/geom/part/g_part_mbr.c
@@ -423,12 +423,13 @@ g_part_mbr_read(struct g_part_table *basetable, struct g_consumer *cp)
struct g_part_mbr_table *table;
struct g_part_mbr_entry *entry;
u_char *buf, *p;
- off_t chs, msize;
+ off_t chs, msize, first;
u_int sectors, heads;
int error, index;
pp = cp->provider;
table = (struct g_part_mbr_table *)basetable;
+ first = basetable->gpt_sectors;
msize = MIN(pp->mediasize / pp->sectorsize, UINT32_MAX);
buf = g_read_data(cp, 0L, pp->sectorsize, &error);
@@ -461,7 +462,8 @@ g_part_mbr_read(struct g_part_table *basetable, struct g_consumer *cp)
basetable->gpt_heads = heads;
}
}
-
+ if (ent.dp_start < first)
+ first = ent.dp_start;
entry = (struct g_part_mbr_entry *)g_part_new_entry(basetable,
index + 1, ent.dp_start, ent.dp_start + ent.dp_size - 1);
entry->ent = ent;
@@ -471,6 +473,9 @@ g_part_mbr_read(struct g_part_table *basetable, struct g_consumer *cp)
basetable->gpt_first = basetable->gpt_sectors;
basetable->gpt_last = msize - 1;
+ if (first < basetable->gpt_first)
+ basetable->gpt_first = 1;
+
g_free(buf);
return (0);
}
OpenPOWER on IntegriCloud