summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_subr.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-04-23 20:16:13 +0000
committerphk <phk@FreeBSD.org>2003-04-23 20:16:13 +0000
commit7c462ceb2b050c850263218e20100ad6fb4ffa41 (patch)
treeed75036c2eafccd85b7a612e6442c7e8811814e4 /sys/geom/geom_subr.c
parent67a31a61073262541d6ef8254295a8532553cca6 (diff)
downloadFreeBSD-src-7c462ceb2b050c850263218e20100ad6fb4ffa41.zip
FreeBSD-src-7c462ceb2b050c850263218e20100ad6fb4ffa41.tar.gz
Turn EV_NEW_PROVIDER into a g_call_me() event.
Diffstat (limited to 'sys/geom/geom_subr.c')
-rw-r--r--sys/geom/geom_subr.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c
index 66eff7c..28a671d 100644
--- a/sys/geom/geom_subr.c
+++ b/sys/geom/geom_subr.c
@@ -189,6 +189,35 @@ g_destroy_consumer(struct g_consumer *cp)
g_free(cp);
}
+static void
+g_new_provider_event(void *arg, int flag)
+{
+ struct g_class *mp;
+ struct g_provider *pp;
+ struct g_consumer *cp;
+ int i;
+
+ g_topology_assert();
+ if (flag == EV_CANCEL)
+ return;
+ if (g_shutdown)
+ return;
+ pp = arg;
+ LIST_FOREACH(mp, &g_classes, class) {
+ if (mp->taste == NULL)
+ continue;
+ i = 1;
+ LIST_FOREACH(cp, &pp->consumers, consumers)
+ if (cp->geom->class == mp)
+ i = 0;
+ if (!i)
+ continue;
+ mp->taste(mp, pp, 0);
+ g_topology_assert();
+ }
+}
+
+
struct g_provider *
g_new_providerf(struct g_geom *gp, const char *fmt, ...)
{
@@ -213,7 +242,7 @@ g_new_providerf(struct g_geom *gp, const char *fmt, ...)
DEVSTAT_TYPE_DIRECT, DEVSTAT_PRIORITY_MAX);
LIST_INSERT_HEAD(&gp->provider, pp, provider);
g_nproviders++;
- g_post_event(EV_NEW_PROVIDER, pp, NULL);
+ g_call_me(g_new_provider_event, pp, pp, NULL);
return (pp);
}
@@ -462,7 +491,7 @@ g_access_rel(struct g_consumer *cp, int dcr, int dcw, int dce)
g_spoil(pp, cp);
else if (pp->acw != 0 && pp->acw == -dcw &&
!(pp->geom->flags & G_GEOM_WITHER))
- g_post_event(EV_NEW_PROVIDER, pp, NULL);
+ g_call_me(g_new_provider_event, pp, pp, NULL);
pp->acr += dcr;
pp->acw += dcw;
OpenPOWER on IntegriCloud