summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_bsd.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2015-01-06 05:28:37 +0000
committerimp <imp@FreeBSD.org>2015-01-06 05:28:37 +0000
commit20163879d8b33bcbcbe0718b7369c9c8d2fd571b (patch)
tree7642f45fc42d6192ce6b58f0f4c3c598067a0410 /sys/geom/geom_bsd.c
parenteeb56aacdf8296147b0913525e63370dd76dd574 (diff)
downloadFreeBSD-src-20163879d8b33bcbcbe0718b7369c9c8d2fd571b.zip
FreeBSD-src-20163879d8b33bcbcbe0718b7369c9c8d2fd571b.tar.gz
Remove old ioctl use and support, once and for all.
Diffstat (limited to 'sys/geom/geom_bsd.c')
-rw-r--r--sys/geom/geom_bsd.c92
1 files changed, 2 insertions, 90 deletions
diff --git a/sys/geom/geom_bsd.c b/sys/geom/geom_bsd.c
index 5742509f..6cb65cd 100644
--- a/sys/geom/geom_bsd.c
+++ b/sys/geom/geom_bsd.c
@@ -305,8 +305,8 @@ g_bsd_hotwrite(void *arg, int flag)
gsp = gp->softc;
ms = gsp->softc;
gsl = &gsp->slices[bp->bio_to->index];
- p = (u_char*)bp->bio_data + ms->labeloffset
- - (bp->bio_offset + gsl->offset);
+ p = (u_char*)bp->bio_data + ms->labeloffset -
+ (bp->bio_offset + gsl->offset);
error = g_bsd_modify(gp, p);
if (error) {
g_io_deliver(bp, EPERM);
@@ -315,93 +315,6 @@ g_bsd_hotwrite(void *arg, int flag)
g_slice_finish_hot(bp);
}
-/*-
- * This start routine is only called for non-trivial requests, all the
- * trivial ones are handled autonomously by the slice code.
- * For requests we handle here, we must call the g_io_deliver() on the
- * bio, and return non-zero to indicate to the slice code that we did so.
- * This code executes in the "DOWN" I/O path, this means:
- * * No sleeping.
- * * Don't grab the topology lock.
- * * Don't call biowait, g_getattr(), g_setattr() or g_read_data()
- */
-static int
-g_bsd_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td)
-{
- struct g_geom *gp;
- struct g_bsd_softc *ms;
- struct g_slicer *gsp;
- u_char *label;
- int error;
-
- gp = pp->geom;
- gsp = gp->softc;
- ms = gsp->softc;
-
- switch(cmd) {
- case DIOCGDINFO:
- /* Return a copy of the disklabel to userland. */
- bsd_disklabel_le_dec(ms->label, data, MAXPARTITIONS);
- return(0);
- case DIOCBSDBB: {
- struct g_consumer *cp;
- u_char *buf;
- void *p;
- int error, i;
- uint64_t sum;
-
- if (!(fflag & FWRITE))
- return (EPERM);
- /* The disklabel to set is the ioctl argument. */
- buf = g_malloc(BBSIZE, M_WAITOK);
- p = *(void **)data;
- error = copyin(p, buf, BBSIZE);
- if (!error) {
- /* XXX: Rude, but supposedly safe */
- DROP_GIANT();
- g_topology_lock();
- /* Validate and modify our slice instance to match. */
- error = g_bsd_modify(gp, buf + ms->labeloffset);
- if (!error) {
- cp = LIST_FIRST(&gp->consumer);
- if (ms->labeloffset == ALPHA_LABEL_OFFSET) {
- sum = 0;
- for (i = 0; i < 63; i++)
- sum += le64dec(buf + i * 8);
- le64enc(buf + 504, sum);
- }
- error = g_write_data(cp, 0, buf, BBSIZE);
- }
- g_topology_unlock();
- PICKUP_GIANT();
- }
- g_free(buf);
- return (error);
- }
- case DIOCSDINFO:
- case DIOCWDINFO: {
- if (!(fflag & FWRITE))
- return (EPERM);
- label = g_malloc(LABELSIZE, M_WAITOK);
- /* The disklabel to set is the ioctl argument. */
- bsd_disklabel_le_enc(label, data);
-
- DROP_GIANT();
- g_topology_lock();
- /* Validate and modify our slice instance to match. */
- error = g_bsd_modify(gp, label);
- if (error == 0 && cmd == DIOCWDINFO)
- error = g_bsd_writelabel(gp, NULL);
- g_topology_unlock();
- PICKUP_GIANT();
- g_free(label);
- return(error);
- }
- default:
- return (ENOIOCTL);
- }
-}
-
static int
g_bsd_start(struct bio *bp)
{
@@ -698,7 +611,6 @@ static struct g_class g_bsd_class = {
.taste = g_bsd_taste,
.ctlreq = g_bsd_config,
.dumpconf = g_bsd_dumpconf,
- .ioctl = g_bsd_ioctl,
};
DECLARE_GEOM_CLASS(g_bsd_class, g_bsd);
OpenPOWER on IntegriCloud