Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Jun 2014 10:14:03 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r266970 - stable/10/sys/geom
Message-ID:  <201406021014.s52AE3DY033480@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406021014.s52AE3DY033480>