diff options
author | phk <phk@FreeBSD.org> | 2003-04-23 20:06:38 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-04-23 20:06:38 +0000 |
commit | 67a31a61073262541d6ef8254295a8532553cca6 (patch) | |
tree | 40c79d2ad8ed7fe644f9996ad5dbf7bb237228dd /sys/geom/geom_subr.c | |
parent | 9b55ca02a0e2e7a072b6688a020398e4eadcbcaa (diff) | |
download | FreeBSD-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.c | 24 |
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 |