Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Jul 2012 17:09:45 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r238198 - in head/sys/geom: . bde uncompress uzip
Message-ID:  <201207071709.q67H9jtn067514@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Sat Jul  7 17:09:44 2012
New Revision: 238198
URL: http://svn.freebsd.org/changeset/base/238198

Log:
  Fix orphan() methods of several GEOM classes to not assume that there
  is an error set on the provider.  With GEOM resizing, class can become
  orphaned when it doesn't implement resize() method and the provider size
  decreases.
  
  Reviewed by:	mav
  Sponsored by:	FreeBSD Foundation

Modified:
  head/sys/geom/bde/g_bde.c
  head/sys/geom/geom_aes.c
  head/sys/geom/geom_slice.c
  head/sys/geom/uncompress/g_uncompress.c
  head/sys/geom/uzip/g_uzip.c

Modified: head/sys/geom/bde/g_bde.c
==============================================================================
--- head/sys/geom/bde/g_bde.c	Sat Jul  7 17:05:55 2012	(r238197)
+++ head/sys/geom/bde/g_bde.c	Sat Jul  7 17:09:44 2012	(r238198)
@@ -77,19 +77,15 @@ g_bde_orphan(struct g_consumer *cp)
 	struct g_geom *gp;
 	struct g_provider *pp;
 	struct g_bde_softc *sc;
-	int error;
 
 	g_trace(G_T_TOPOLOGY, "g_bde_orphan(%p/%s)", cp, cp->provider->name);
 	g_topology_assert();
-	KASSERT(cp->provider->error != 0,
-		("g_bde_orphan with error == 0"));
 
 	gp = cp->geom;
 	sc = gp->softc;
 	gp->flags |= G_GEOM_WITHER;
-	error = cp->provider->error;
 	LIST_FOREACH(pp, &gp->provider, provider)
-		g_orphan_provider(pp, error);
+		g_orphan_provider(pp, ENXIO);
 	bzero(sc, sizeof(struct g_bde_softc));	/* destroy evidence */
 	return;
 }

Modified: head/sys/geom/geom_aes.c
==============================================================================
--- head/sys/geom/geom_aes.c	Sat Jul  7 17:05:55 2012	(r238197)
+++ head/sys/geom/geom_aes.c	Sat Jul  7 17:09:44 2012	(r238198)
@@ -241,12 +241,10 @@ g_aes_orphan(struct g_consumer *cp)
 
 	g_trace(G_T_TOPOLOGY, "g_aes_orphan(%p/%s)", cp, cp->provider->name);
 	g_topology_assert();
-	KASSERT(cp->provider->error != 0,
-		("g_aes_orphan with error == 0"));
 
 	gp = cp->geom;
 	sc = gp->softc;
-	g_wither_geom(gp, cp->provider->error);
+	g_wither_geom(gp, ENXIO);
 	bzero(sc, sizeof(struct g_aes_softc));	/* destroy evidence */
 	g_free(sc);
 	return;

Modified: head/sys/geom/geom_slice.c
==============================================================================
--- head/sys/geom/geom_slice.c	Sat Jul  7 17:05:55 2012	(r238197)
+++ head/sys/geom/geom_slice.c	Sat Jul  7 17:09:44 2012	(r238198)
@@ -522,10 +522,8 @@ g_slice_orphan(struct g_consumer *cp)
 
 	g_trace(G_T_TOPOLOGY, "g_slice_orphan(%p/%s)", cp, cp->provider->name);
 	g_topology_assert();
-	KASSERT(cp->provider->error != 0,
-	    ("g_slice_orphan with error == 0"));
 
 	/* XXX: Not good enough we leak the softc and its suballocations */
 	g_slice_free(cp->geom->softc);
-	g_wither_geom(cp->geom, cp->provider->error);
+	g_wither_geom(cp->geom, ENXIO);
 }

Modified: head/sys/geom/uncompress/g_uncompress.c
==============================================================================
--- head/sys/geom/uncompress/g_uncompress.c	Sat Jul  7 17:05:55 2012	(r238197)
+++ head/sys/geom/uncompress/g_uncompress.c	Sat Jul  7 17:09:44 2012	(r238198)
@@ -406,13 +406,11 @@ g_uncompress_orphan(struct g_consumer *c
 	g_trace(G_T_TOPOLOGY, "%s(%p/%s)", __func__, cp,
 		cp->provider->name);
 	g_topology_assert();
-	KASSERT(cp->provider->error != 0,
-		("g_uncompress_orphan with error == 0"));
 
 	gp = cp->geom;
 	g_uncompress_softc_free(gp->softc, gp);
 	gp->softc = NULL;
-	g_wither_geom(gp, cp->provider->error);
+	g_wither_geom(gp, ENXIO);
 }
 
 static int

Modified: head/sys/geom/uzip/g_uzip.c
==============================================================================
--- head/sys/geom/uzip/g_uzip.c	Sat Jul  7 17:05:55 2012	(r238197)
+++ head/sys/geom/uzip/g_uzip.c	Sat Jul  7 17:09:44 2012	(r238198)
@@ -313,13 +313,11 @@ g_uzip_orphan(struct g_consumer *cp)
 
 	g_trace(G_T_TOPOLOGY, "g_uzip_orphan(%p/%s)", cp, cp->provider->name);
 	g_topology_assert();
-	KASSERT(cp->provider->error != 0,
-		("g_uzip_orphan with error == 0"));
 
 	gp = cp->geom;
 	g_uzip_softc_free(gp->softc, gp);
 	gp->softc = NULL;
-	g_wither_geom(gp, cp->provider->error);
+	g_wither_geom(gp, ENXIO);
 }
 
 static int



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