summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2011-05-27 16:09:10 +0000
committerattilio <attilio@FreeBSD.org>2011-05-27 16:09:10 +0000
commiteefddaeed6c0577102de6360a326fa15c36afd07 (patch)
tree8e17566b8bee250488a3045e5b14585694b272ae /sys/geom
parentcc1bd831c19be5a5a5ce6c3efef4c3874ddfabb0 (diff)
parentc4d8d18073b5e2ce313f301172ce6c3b0c72d858 (diff)
downloadFreeBSD-src-eefddaeed6c0577102de6360a326fa15c36afd07.zip
FreeBSD-src-eefddaeed6c0577102de6360a326fa15c36afd07.tar.gz
MFC
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