summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_event.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-11-04 09:31:02 +0000
committerphk <phk@FreeBSD.org>2002-11-04 09:31:02 +0000
commita500538d00eed09c74c769c7c94a26119960864f (patch)
tree8b9d2d606a557487142e38f84adf3571507e99fc /sys/geom/geom_event.c
parent16874ad9231c653cc0923d057079cb01dc655144 (diff)
downloadFreeBSD-src-a500538d00eed09c74c769c7c94a26119960864f.zip
FreeBSD-src-a500538d00eed09c74c769c7c94a26119960864f.tar.gz
Polish a bit here and there.
Reenable the geom.ctl device so people can play with gbde. Sponsored by: DARPA & NAI Labs
Diffstat (limited to 'sys/geom/geom_event.c')
-rw-r--r--sys/geom/geom_event.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c
index 34a836e..7a235f4 100644
--- a/sys/geom/geom_event.c
+++ b/sys/geom/geom_event.c
@@ -182,6 +182,9 @@ g_do_event(struct g_event *ep)
LIST_FOREACH(mp, &g_classes, class) {
if (mp->taste == NULL)
continue;
+ if (!strcmp(ep->provider->name, "geom.ctl") &&
+ strcmp(mp->name, "DEV"))
+ continue;
i = 1;
LIST_FOREACH(cp, &ep->provider->consumers, consumers)
if(cp->geom->class == mp)
@@ -250,12 +253,11 @@ one_event(void)
if (ep->consumer != NULL)
ep->consumer->event = NULL;
g_do_event(ep);
+ g_destroy_event(ep);
g_pending_events--;
- if (g_pending_events == 0) {
+ if (g_pending_events == 0)
wakeup(&g_pending_events);
- }
g_topology_unlock();
- g_destroy_event(ep);
return (1);
}
@@ -279,22 +281,26 @@ g_post_event(enum g_events ev, struct g_class *mp, struct g_geom *gp, struct g_p
ep->event = ev;
if (mp != NULL) {
ep->class = mp;
- KASSERT(mp->event == NULL, ("Double event on class"));
+ KASSERT(mp->event == NULL, ("Double event on class %d %d",
+ ep->event, mp->event->event));
mp->event = ep;
}
if (gp != NULL) {
ep->geom = gp;
- KASSERT(gp->event == NULL, ("Double event on geom"));
+ KASSERT(gp->event == NULL, ("Double event on geom %d %d",
+ ep->event, gp->event->event));
gp->event = ep;
}
if (pp != NULL) {
ep->provider = pp;
- KASSERT(pp->event == NULL, ("Double event on provider"));
+ KASSERT(pp->event == NULL, ("Double event on provider %s %d %d",
+ pp->name, ep->event, pp->event->event));
pp->event = ep;
}
if (cp != NULL) {
ep->consumer = cp;
- KASSERT(cp->event == NULL, ("Double event on consumer"));
+ KASSERT(cp->event == NULL, ("Double event on consumer %d %d",
+ ep->event, cp->event->event));
cp->event = ep;
}
mtx_lock(&g_eventlock);
OpenPOWER on IntegriCloud