Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Jan 2009 17:54:03 +0000 (UTC)
From:      Ulf Lilleengen <lulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r187399 - projects/gvinum/sys/geom/vinum
Message-ID:  <200901181754.n0IHs345081988@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



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