diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2003-12-23 11:37:05 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2003-12-23 11:37:05 +0000 |
commit | 8592d7a76038535399db27d4360ab0a223f497ea (patch) | |
tree | 0393a5abf49b502a83fb38a892cef04d29ed817a /sys/geom/geom_event.c | |
parent | a46f7e7c92562db4b3f6b02bc31942dd9999c724 (diff) | |
download | src-8592d7a76038535399db27d4360ab0a223f497ea.tar.gz src-8592d7a76038535399db27d4360ab0a223f497ea.zip |
Prevent withering of the provider we're orphaning from happening until
we do it ourselves.
Nailed by: Simon Heath <heath@cng.fr>
Notes
Notes:
svn path=/head/; revision=123761
Diffstat (limited to 'sys/geom/geom_event.c')
-rw-r--r-- | sys/geom/geom_event.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c index 3c0f19f70fbb..2afaad6277f7 100644 --- a/sys/geom/geom_event.c +++ b/sys/geom/geom_event.c @@ -126,10 +126,14 @@ static void g_orphan_register(struct g_provider *pp) { struct g_consumer *cp, *cp2; + int wf; g_trace(G_T_TOPOLOGY, "g_orphan_register(%s)", pp->name); g_topology_assert(); + wf = pp->flags & G_PF_WITHER; + pp->flags &= ~G_PF_WITHER; + /* * Tell all consumers the bad news. * Don't be surprised if they self-destruct. @@ -143,8 +147,10 @@ g_orphan_register(struct g_provider *pp) cp->geom->orphan(cp); cp = cp2; } - if (LIST_EMPTY(&pp->consumers) && (pp->flags & G_PF_WITHER)) + if (LIST_EMPTY(&pp->consumers) && wf) g_destroy_provider(pp); + else + pp->flags |= wf; #ifdef notyet cp = LIST_FIRST(&pp->consumers); if (cp != NULL) |