diff options
author | pjd <pjd@FreeBSD.org> | 2004-08-28 02:34:10 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2004-08-28 02:34:10 +0000 |
commit | 2d011d467223ef1e78a059515ac9a9364a57df29 (patch) | |
tree | 3cf594645207f61e2ec90305a94eb757c8c63b6a /sys/geom/raid3 | |
parent | bf3acf8f031fada66ba872e0fc0e9d31e7979285 (diff) | |
download | FreeBSD-src-2d011d467223ef1e78a059515ac9a9364a57df29.zip FreeBSD-src-2d011d467223ef1e78a059515ac9a9364a57df29.tar.gz |
Warn the user if we are not going to use whole provider space.
Requested by: Michael Handler <handler@grendel.net>
Diffstat (limited to 'sys/geom/raid3')
-rw-r--r-- | sys/geom/raid3/g_raid3_ctl.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/geom/raid3/g_raid3_ctl.c b/sys/geom/raid3/g_raid3_ctl.c index 8fa6726..94ec67e 100644 --- a/sys/geom/raid3/g_raid3_ctl.c +++ b/sys/geom/raid3/g_raid3_ctl.c @@ -338,6 +338,7 @@ g_raid3_ctl_insert(struct gctl_req *req, struct g_class *mp) struct g_consumer *cp; const char *name; u_char *sector; + off_t compsize; intmax_t *no; int *hardcode, *nargs, error; @@ -390,16 +391,23 @@ g_raid3_ctl_insert(struct gctl_req *req, struct g_class *mp) gctl_error(req, "Invalid provider."); return; } - if ((sc->sc_mediasize / (sc->sc_ndisks - 1)) > pp->mediasize) { - gctl_error(req, "Provider %s too small.", pp->name); - return; - } if (((sc->sc_sectorsize / (sc->sc_ndisks - 1)) % pp->sectorsize) != 0) { gctl_error(req, "Cannot insert provider %s, because of its sector size.", pp->name); return; } + compsize = sc->sc_mediasize / (sc->sc_ndisks - 1); + if (compsize > pp->mediasize - pp->sectorsize) { + gctl_error(req, "Provider %s too small.", pp->name); + return; + } + if (compsize < pp->mediasize - pp->sectorsize) { + gctl_error(req, + "warning: %s: only %jd bytes from %jd bytes used.", + pp->name, (intmax_t)compsize, + (intmax_t)(pp->mediasize - pp->sectorsize)); + } gp = g_new_geomf(mp, "raid3:insert"); gp->orphan = g_raid3_ctl_insert_orphan; cp = g_new_consumer(gp); |