summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2011-05-26 17:38:00 +0000
committerattilio <attilio@FreeBSD.org>2011-05-26 17:38:00 +0000
commit867c6223e7e4f6682389d40926782fd537ffc3ad (patch)
tree87423ad4498424494102d7b58615c0df44019d32 /sys/geom
parentc0038ec50d088a2152d05e1da7d5b4cec45e8d27 (diff)
parentd7214daa609442aa65fdbb054db56a3ffc1ee75a (diff)
downloadFreeBSD-src-867c6223e7e4f6682389d40926782fd537ffc3ad.zip
FreeBSD-src-867c6223e7e4f6682389d40926782fd537ffc3ad.tar.gz
MFC
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/part/g_part_ebr.c3
-rw-r--r--sys/geom/part/g_part_mbr.c10
-rw-r--r--sys/geom/part/g_part_pc98.c13
-rw-r--r--sys/geom/vinum/geom_vinum_drive.c4
-rw-r--r--sys/geom/vinum/geom_vinum_events.c6
5 files changed, 17 insertions, 19 deletions
diff --git a/sys/geom/part/g_part_ebr.c b/sys/geom/part/g_part_ebr.c
index f6278cc..8ea9b47 100644
--- a/sys/geom/part/g_part_ebr.c
+++ b/sys/geom/part/g_part_ebr.c
@@ -289,7 +289,6 @@ g_part_ebr_create(struct g_part_table *basetable, struct g_part_parms *gpp)
return (ENXIO);
msize = MIN(pp->mediasize / pp->sectorsize, UINT32_MAX);
- msize -= msize % basetable->gpt_sectors;
basetable->gpt_first = 0;
basetable->gpt_last = msize - 1;
basetable->gpt_entries = msize / basetable->gpt_sectors;
@@ -523,7 +522,7 @@ g_part_ebr_read(struct g_part_table *basetable, struct g_consumer *cp)
basetable->gpt_entries = msize / basetable->gpt_sectors;
basetable->gpt_first = 0;
- basetable->gpt_last = msize - (msize % basetable->gpt_sectors) - 1;
+ basetable->gpt_last = msize - 1;
return (0);
}
diff --git a/sys/geom/part/g_part_mbr.c b/sys/geom/part/g_part_mbr.c
index 4fa829a..0b40366 100644
--- a/sys/geom/part/g_part_mbr.c
+++ b/sys/geom/part/g_part_mbr.c
@@ -251,20 +251,16 @@ g_part_mbr_bootcode(struct g_part_table *basetable, struct g_part_parms *gpp)
static int
g_part_mbr_create(struct g_part_table *basetable, struct g_part_parms *gpp)
{
- struct g_consumer *cp;
struct g_provider *pp;
struct g_part_mbr_table *table;
- uint32_t msize;
pp = gpp->gpp_provider;
- cp = LIST_FIRST(&pp->consumers);
-
if (pp->sectorsize < MBRSIZE)
return (ENOSPC);
- msize = MIN(pp->mediasize / pp->sectorsize, UINT32_MAX);
basetable->gpt_first = basetable->gpt_sectors;
- basetable->gpt_last = msize - (msize % basetable->gpt_sectors) - 1;
+ basetable->gpt_last = MIN(pp->mediasize / pp->sectorsize,
+ UINT32_MAX) - 1;
table = (struct g_part_mbr_table *)basetable;
le16enc(table->mbr + DOSMAGICOFFSET, DOSMAGIC);
@@ -473,7 +469,7 @@ g_part_mbr_read(struct g_part_table *basetable, struct g_consumer *cp)
basetable->gpt_entries = NDOSPART;
basetable->gpt_first = basetable->gpt_sectors;
- basetable->gpt_last = msize - (msize % basetable->gpt_sectors) - 1;
+ basetable->gpt_last = msize - 1;
g_free(buf);
return (0);
diff --git a/sys/geom/part/g_part_pc98.c b/sys/geom/part/g_part_pc98.c
index 693fad8..0d81a0e 100644
--- a/sys/geom/part/g_part_pc98.c
+++ b/sys/geom/part/g_part_pc98.c
@@ -246,24 +246,17 @@ g_part_pc98_bootcode(struct g_part_table *basetable, struct g_part_parms *gpp)
static int
g_part_pc98_create(struct g_part_table *basetable, struct g_part_parms *gpp)
{
- struct g_consumer *cp;
struct g_provider *pp;
struct g_part_pc98_table *table;
- uint32_t cyl, msize;
pp = gpp->gpp_provider;
- cp = LIST_FIRST(&pp->consumers);
-
if (pp->sectorsize < SECSIZE || pp->mediasize < BOOTSIZE)
return (ENOSPC);
if (pp->sectorsize > SECSIZE)
return (ENXIO);
- cyl = basetable->gpt_heads * basetable->gpt_sectors;
-
- msize = MIN(pp->mediasize / SECSIZE, UINT32_MAX);
- basetable->gpt_first = cyl;
- basetable->gpt_last = msize - (msize % cyl) - 1;
+ basetable->gpt_first = basetable->gpt_heads * basetable->gpt_sectors;
+ basetable->gpt_last = MIN(pp->mediasize / SECSIZE, UINT32_MAX) - 1;
table = (struct g_part_pc98_table *)basetable;
le16enc(table->boot + DOSMAGICOFFSET, DOSMAGIC);
@@ -491,7 +484,7 @@ g_part_pc98_read(struct g_part_table *basetable, struct g_consumer *cp)
basetable->gpt_entries = NDOSPART;
basetable->gpt_first = cyl;
- basetable->gpt_last = msize - (msize % cyl) - 1;
+ basetable->gpt_last = msize - 1;
g_free(buf);
return (0);
diff --git a/sys/geom/vinum/geom_vinum_drive.c b/sys/geom/vinum/geom_vinum_drive.c
index 5ab68f3..f782fd0 100644
--- a/sys/geom/vinum/geom_vinum_drive.c
+++ b/sys/geom/vinum/geom_vinum_drive.c
@@ -126,6 +126,10 @@ gv_read_header(struct g_consumer *cp, struct gv_hdr *m_hdr)
pp = cp->provider;
KASSERT(pp != NULL, ("gv_read_header: null pp"));
+ if ((GV_HDR_OFFSET % pp->sectorsize) != 0 ||
+ (GV_HDR_LEN % pp->sectorsize) != 0)
+ return (ENODEV);
+
d_hdr = g_read_data(cp, GV_HDR_OFFSET, pp->sectorsize, NULL);
if (d_hdr == NULL)
return (-1);
diff --git a/sys/geom/vinum/geom_vinum_events.c b/sys/geom/vinum/geom_vinum_events.c
index fcd45f1..db4e543 100644
--- a/sys/geom/vinum/geom_vinum_events.c
+++ b/sys/geom/vinum/geom_vinum_events.c
@@ -109,6 +109,12 @@ gv_drive_tasted(struct gv_softc *sc, struct g_provider *pp)
buf = NULL;
G_VINUM_DEBUG(2, "tasted drive on '%s'", pp->name);
+ if ((GV_CFG_OFFSET % pp->sectorsize) != 0 ||
+ (GV_CFG_LEN % pp->sectorsize) != 0) {
+ G_VINUM_DEBUG(0, "provider %s has unsupported sectorsize.",
+ pp->name);
+ return;
+ }
gp = sc->geom;
g_topology_lock();
OpenPOWER on IntegriCloud