diff options
author | attilio <attilio@FreeBSD.org> | 2011-05-27 16:09:10 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2011-05-27 16:09:10 +0000 |
commit | eefddaeed6c0577102de6360a326fa15c36afd07 (patch) | |
tree | 8e17566b8bee250488a3045e5b14585694b272ae /sys/geom | |
parent | cc1bd831c19be5a5a5ce6c3efef4c3874ddfabb0 (diff) | |
parent | c4d8d18073b5e2ce313f301172ce6c3b0c72d858 (diff) | |
download | FreeBSD-src-eefddaeed6c0577102de6360a326fa15c36afd07.zip FreeBSD-src-eefddaeed6c0577102de6360a326fa15c36afd07.tar.gz |
MFC
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/part/g_part_mbr.c | 9 |
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); } |