summaryrefslogtreecommitdiffstats
path: root/sys/geom/sched
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2010-08-02 10:30:49 +0000
committerae <ae@FreeBSD.org>2010-08-02 10:30:49 +0000
commit7ff57057ce887665c7a957a467c441ceb4cffb85 (patch)
tree57736d67b70260a65c3d1768ba5af6d63e6bd7bb /sys/geom/sched
parente9c305133c36b9fa74c67a3e5dcb9ee225d73d9b (diff)
downloadFreeBSD-src-7ff57057ce887665c7a957a467c441ceb4cffb85.zip
FreeBSD-src-7ff57057ce887665c7a957a467c441ceb4cffb85.tar.gz
Forward ioctl requests to original geom.
PR: 148540 Silence from: luigi Reviewed by: pjd Approved by: mav (mentor) MFC after: 2 weeks
Diffstat (limited to 'sys/geom/sched')
-rw-r--r--sys/geom/sched/g_sched.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/geom/sched/g_sched.c b/sys/geom/sched/g_sched.c
index 6f339b9..f3b2665 100644
--- a/sys/geom/sched/g_sched.c
+++ b/sys/geom/sched/g_sched.c
@@ -136,6 +136,8 @@ static void g_sched_dumpconf(struct sbuf *sb, const char *indent,
struct g_geom *gp, struct g_consumer *cp, struct g_provider *pp);
static void g_sched_init(struct g_class *mp);
static void g_sched_fini(struct g_class *mp);
+static int g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data,
+ int fflag, struct thread *td);
struct g_class g_sched_class = {
.name = G_SCHED_CLASS_NAME,
@@ -144,6 +146,7 @@ struct g_class g_sched_class = {
.taste = g_sched_taste,
.destroy_geom = g_sched_destroy_geom,
.init = g_sched_init,
+ .ioctl = g_sched_ioctl,
.fini = g_sched_fini
};
@@ -1601,6 +1604,22 @@ g_sched_fini(struct g_class *mp)
mtx_destroy(&me.gs_mtx);
}
+static int
+g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag,
+ struct thread *td)
+{
+ struct g_consumer *cp;
+ struct g_geom *gp;
+
+ cp = LIST_FIRST(&pp->geom->consumer);
+ if (cp == NULL)
+ return (ENOIOCTL);
+ gp = cp->provider->geom;
+ if (gp->ioctl == NULL)
+ return (ENOIOCTL);
+ return (gp->ioctl(cp->provider, cmd, data, fflag, td));
+}
+
/*
* Read the i-th argument for a request, skipping the /dev/
* prefix if present.
OpenPOWER on IntegriCloud