summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_ctl.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-04-03 11:19:24 +0000
committerphk <phk@FreeBSD.org>2003-04-03 11:19:24 +0000
commit7d796a935a99e23431509cea2c7a54171aea8d22 (patch)
treeb93ee820855901d727f9d7e01fce20b8d3c49563 /sys/geom/geom_ctl.c
parent310472fea77e66f7a0415d5130c87da11d8a8adf (diff)
downloadFreeBSD-src-7d796a935a99e23431509cea2c7a54171aea8d22.zip
FreeBSD-src-7d796a935a99e23431509cea2c7a54171aea8d22.tar.gz
Make sure we don't ignore error codes.
Diffstat (limited to 'sys/geom/geom_ctl.c')
-rw-r--r--sys/geom/geom_ctl.c56
1 files changed, 24 insertions, 32 deletions
diff --git a/sys/geom/geom_ctl.c b/sys/geom/geom_ctl.c
index 76a5dcd..0457972 100644
--- a/sys/geom/geom_ctl.c
+++ b/sys/geom/geom_ctl.c
@@ -91,6 +91,8 @@ gctl_error(struct gctl_req *req, const char *errtxt)
{
int error;
+ if (g_debugflags & G_F_CTLDUMP)
+ printf("gctl %p error \"%s\"\n", req, errtxt);
error = copyout(errtxt, req->error,
imin(req->lerror, strlen(errtxt) + 1));
if (!error)
@@ -345,50 +347,46 @@ gctl_get_provider(struct gctl_req *req)
return (NULL);
}
-static void
+static int
gctl_create_geom(struct gctl_req *req)
{
struct g_class *mp;
struct g_provider *pp;
+ int error;
g_topology_assert();
mp = gctl_get_class(req);
if (mp == NULL)
- return;
- if (mp->create_geom == NULL) {
- gctl_error(req, "Class has no create_geom method");
- return;
- }
+ return (gctl_error(req, "Class not found"));
+ if (mp->create_geom == NULL)
+ return (gctl_error(req, "Class has no create_geom method"));
pp = gctl_get_provider(req);
- mp->create_geom(req, mp, pp);
+ error = mp->create_geom(req, mp, pp);
g_topology_assert();
+ return (error);
}
-static void
+static int
gctl_destroy_geom(struct gctl_req *req)
{
struct g_class *mp;
struct g_geom *gp;
+ int error;
g_topology_assert();
mp = gctl_get_class(req);
if (mp == NULL)
- return;
- if (mp->destroy_geom == NULL) {
- gctl_error(req, "Class has no destroy_geom method");
- return;
- }
+ return (gctl_error(req, "Class not found"));
+ if (mp->destroy_geom == NULL)
+ return (gctl_error(req, "Class has no destroy_geom method"));
gp = gctl_get_geom(req, mp);
- if (gp == NULL) {
- gctl_error(req, "Geom not specified");
- return;
- }
- if (gp->class != mp) {
- gctl_error(req, "Geom not of specificed class");
- return;
- }
- mp->destroy_geom(req, mp, gp);
+ if (gp == NULL)
+ return (gctl_error(req, "Geom not specified"));
+ if (gp->class != mp)
+ return (gctl_error(req, "Geom not of specificed class"));
+ error = mp->destroy_geom(req, mp, gp);
g_topology_assert();
+ return (error);
}
/*
@@ -428,26 +426,20 @@ g_ctl_ioctl_ctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct thread *t
if (g_debugflags & G_F_CTLDUMP)
gctl_dump(req);
-#if 0
- g_stall_events();
-#endif
g_topology_lock();
switch (req->request) {
case GCTL_CREATE_GEOM:
- gctl_create_geom(req);
+ error = gctl_create_geom(req);
break;
case GCTL_DESTROY_GEOM:
- gctl_destroy_geom(req);
+ error = gctl_destroy_geom(req);
break;
default:
- gctl_error(req, "XXX: TBD");
+ error = gctl_error(req, "XXX: TBD");
break;
}
g_topology_unlock();
-#if 0
- g_release_events();
-#endif
- return (0);
+ return (error);
}
static int
OpenPOWER on IntegriCloud