summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_subr.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-04-23 20:06:38 +0000
committerphk <phk@FreeBSD.org>2003-04-23 20:06:38 +0000
commit67a31a61073262541d6ef8254295a8532553cca6 (patch)
tree40c79d2ad8ed7fe644f9996ad5dbf7bb237228dd /sys/geom/geom_subr.c
parent9b55ca02a0e2e7a072b6688a020398e4eadcbcaa (diff)
downloadFreeBSD-src-67a31a61073262541d6ef8254295a8532553cca6.zip
FreeBSD-src-67a31a61073262541d6ef8254295a8532553cca6.tar.gz
Convert EV_SPOILED event to use g_call_me().
Diffstat (limited to 'sys/geom/geom_subr.c')
-rw-r--r--sys/geom/geom_subr.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c
index 934dfab..66eff7c 100644
--- a/sys/geom/geom_subr.c
+++ b/sys/geom/geom_subr.c
@@ -563,6 +563,28 @@ g_std_spoiled(struct g_consumer *cp)
* are open, regardless of mode, this ends up DTRT.
*/
+static void
+g_spoil_event(void *arg, int flag)
+{
+ struct g_provider *pp;
+ struct g_consumer *cp, *cp2;
+
+ g_topology_assert();
+ if (flag == EV_CANCEL)
+ return;
+ pp = arg;
+ for (cp = LIST_FIRST(&pp->consumers); cp != NULL; cp = cp2) {
+ cp2 = LIST_NEXT(cp, consumers);
+ if (!cp->spoiled)
+ continue;
+ cp->spoiled = 0;
+ if (cp->geom->spoiled == NULL)
+ continue;
+ cp->geom->spoiled(cp);
+ g_topology_assert();
+ }
+}
+
void
g_spoil(struct g_provider *pp, struct g_consumer *cp)
{
@@ -582,7 +604,7 @@ g_spoil(struct g_provider *pp, struct g_consumer *cp)
KASSERT(cp2->ace == 0, ("spoiling cp->ace = %d", cp2->ace));
cp2->spoiled++;
}
- g_post_event(EV_SPOILED, pp, cp, NULL);
+ g_call_me(g_spoil_event, pp, pp, NULL);
}
int
OpenPOWER on IntegriCloud