svn commit: r266970 - stable/10/sys/geom
Andrey V. Elsukov
ae at FreeBSD.org
Mon Jun 2 10:14:03 UTC 2014
Author: ae
Date: Mon Jun 2 10:14:03 2014
New Revision: 266970
URL: http://svnweb.freebsd.org/changeset/base/266970
Log:
MFC r266444:
We have two functions from where a geom orphan method could be called:
g_orphan_register and g_resize_provider_event. Both are called from the
event queue. Also we have GEOM_DEV class, which does deferred destroy
for its consumers via g_dev_destroy (also called from the event queue).
So it is possible, that for some consumers an orphan method will be
called twice. This triggers panic in g_dev_orphan.
Check that consumer isn't already orphaned before call orphan method.
Modified:
stable/10/sys/geom/geom_event.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/geom/geom_event.c
==============================================================================
--- stable/10/sys/geom/geom_event.c Mon Jun 2 07:08:34 2014 (r266969)
+++ stable/10/sys/geom/geom_event.c Mon Jun 2 10:14:03 2014 (r266970)
@@ -206,6 +206,14 @@ g_orphan_register(struct g_provider *pp)
KASSERT(cp->geom->orphan != NULL,
("geom %s has no orphan, class %s",
cp->geom->name, cp->geom->class->name));
+ /*
+ * XXX: g_dev_orphan method does deferred destroying
+ * and it is possible, that other event could already
+ * call the orphan method. Check consumer's flags to
+ * do not schedule it twice.
+ */
+ if (cp->flags & G_CF_ORPHAN)
+ continue;
cp->flags |= G_CF_ORPHAN;
cp->geom->orphan(cp);
}
More information about the svn-src-stable-10
mailing list