Date: Mon, 02 Jun 2014 07:07:18 -0600 From: Ian Lepore <ian@FreeBSD.org> To: "Andrey V. Elsukov" <ae@FreeBSD.org> Cc: svn-src-stable@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, svn-src-stable-10@FreeBSD.org Subject: Re: svn commit: r266970 - stable/10/sys/geom Message-ID: <1401714438.20883.83.camel@revolution.hippie.lan> In-Reply-To: <201406021014.s52AE3DY033480@svn.freebsd.org> References: <201406021014.s52AE3DY033480@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 2014-06-02 at 10:14 +0000, Andrey V. Elsukov wrote: > 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); > } > Why is this comment flagged with XXX? Doesn't that generally mean that more action or further analysis in the future is required? Nothing about the comment itself indicates that there's more work to do. -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1401714438.20883.83.camel>