Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Jun 2012 20:29:09 -0600
From:      "Kenneth D. Merry" <ken@freebsd.org>
To:        Michael Butler <imb@protected-networks.net>
Cc:        Benjamin Kaduk <kaduk@mit.edu>, current@freebsd.org
Subject:   Re: Removing an SDHC card causes a kernel panic on -current
Message-ID:  <20120627022909.GA153@nargothrond.kdm.org>
In-Reply-To: <alpine.GSO.1.10.1206261929300.18441@multics.mit.edu>
References:  <4FE9D958.4000901@protected-networks.net> <alpine.GSO.1.10.1206261929300.18441@multics.mit.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--OgqxwSJOaUobr8KG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Jun 26, 2012 at 19:41:07 -0400, Benjamin Kaduk wrote:
> On Tue, 26 Jun 2012, Michael Butler wrote:
> 
> >As follows, in "g_disk_providergone", a NULL pointer reference?:
> 
> g_disk_providergone() is new in r237518 (by ken); ken cc'd.

Can you try the attached patch to sys/geom/geom_disk.c?

Also, do you have full dmesg information for when the panic happened?

It looks like disk_destroy() has already been called in this case, and I
suppose that's likely to happen for any of the users of the GEOM disk class
that haven't been updated with the reference count changes I made in da(4).
(i.e. all of the rest of them.)

Let me know whether this works for you.

Thanks,

Ken
-- 
Kenneth Merry
ken@FreeBSD.ORG

--OgqxwSJOaUobr8KG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="geom_disk.c.20120626.1.txt"

==== //depot/users/kenm/FreeBSD-test2/sys/geom/geom_disk.c#7 - /usr/home/kenm/perforce4/kenm/FreeBSD-test2/sys/geom/geom_disk.c ====
*** /tmp/tmp.75357.20	Tue Jun 26 20:25:44 2012
--- /usr/home/kenm/perforce4/kenm/FreeBSD-test2/sys/geom/geom_disk.c	Tue Jun 26 20:25:29 2012
***************
*** 502,507 ****
--- 502,515 ----
  	struct g_disk_softc *sc;
  
  	sc = (struct g_disk_softc *)pp->geom->softc;
+ 
+ 	/*
+ 	 * If the softc is already NULL, then we've probably been through
+ 	 * g_disk_destroy already; there is nothing for us to do anyway.
+ 	 */
+ 	if (sc == NULL)
+ 		return;
+ 
  	dp = sc->dp;
  
  	if (dp->d_gone != NULL)

--OgqxwSJOaUobr8KG--



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