svn commit: r187399 - projects/gvinum/sys/geom/vinum

Ulf Lilleengen lulf at FreeBSD.org
Sun Jan 18 09:54:04 PST 2009


Author: lulf
Date: Sun Jan 18 17:54:03 2009
New Revision: 187399
URL: http://svn.freebsd.org/changeset/base/187399

Log:
  - Make it possible to move disks from a mirrored volume while mounted.

Modified:
  projects/gvinum/sys/geom/vinum/geom_vinum_move.c
  projects/gvinum/sys/geom/vinum/geom_vinum_subr.c

Modified: projects/gvinum/sys/geom/vinum/geom_vinum_move.c
==============================================================================
--- projects/gvinum/sys/geom/vinum/geom_vinum_move.c	Sun Jan 18 17:07:48 2009	(r187398)
+++ projects/gvinum/sys/geom/vinum/geom_vinum_move.c	Sun Jan 18 17:54:03 2009	(r187399)
@@ -113,9 +113,9 @@ gv_move_sd(struct gv_softc *sc, struct g
 
 	d = cursd->drive_sc;
 
-	/* XXX: Can't do a move without unmounting. Perhaps okay. */
-	if (gv_consumer_is_open(d->consumer) ||
-	    gv_consumer_is_open(destination->consumer)) {
+	if ((gv_consumer_is_open(d->consumer) ||
+	    gv_consumer_is_open(destination->consumer)) &&
+	    !(flags && GV_FLAG_F)) {
 		G_VINUM_DEBUG(0, "consumers on current and destination drive "
 		    " still open");
 		return (GV_ERR_ISBUSY);
@@ -180,6 +180,9 @@ gv_move_sd(struct gv_softc *sc, struct g
 	}
 	gv_sd_to_plex(newsd, p);
 	LIST_INSERT_HEAD(&sc->subdisks, newsd, sd);
-
+	/* Update volume size of plex. */
+	if (p->vol_sc != NULL)
+		gv_update_vol_size(p->vol_sc, gv_vol_size(p->vol_sc));
+	gv_save_config(p->vinumconf);
 	return (0);
 }

Modified: projects/gvinum/sys/geom/vinum/geom_vinum_subr.c
==============================================================================
--- projects/gvinum/sys/geom/vinum/geom_vinum_subr.c	Sun Jan 18 17:07:48 2009	(r187398)
+++ projects/gvinum/sys/geom/vinum/geom_vinum_subr.c	Sun Jan 18 17:54:03 2009	(r187399)
@@ -431,9 +431,6 @@ gv_plex_size(struct gv_plex *p)
 
 	KASSERT(p != NULL, ("gv_plex_size: NULL p"));
 
-	if (p->sdcount == 0)
-		return (0);
-
 	/* Adjust the size of our plex. */
 	size = 0;
 	sdcount = gv_sdcount(p, 1);


More information about the svn-src-projects mailing list