Skip site navigation (1)Skip section navigation (2)
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>