svn commit: r196927 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Pawel Jakub Dawidek pjd at FreeBSD.org
Mon Sep 7 14:16:50 UTC 2009


Author: pjd
Date: Mon Sep  7 14:16:50 2009
New Revision: 196927
URL: http://svn.freebsd.org/changeset/base/196927

Log:
  Changing provider size is not really supported by GEOM, but doing so when
  provider is closed should be ok.
  
  When administrator requests to change ZVOL size do it immediately if ZVOL
  is closed or do it on last ZVOL close.
  
  PR:		kern/136942
  Requested by:	Bernard Buri <bsd at ask-us.at>
  MFC after:	1 week

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Sep  7 14:10:55 2009	(r196926)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Sep  7 14:16:50 2009	(r196927)
@@ -153,7 +153,22 @@ static int zvol_dump_init(zvol_state_t *
 static void
 zvol_size_changed(zvol_state_t *zv, major_t maj)
 {
+	struct g_provider *pp;
+
+	g_topology_assert();
 
+	pp = zv->zv_provider;
+	if (pp == NULL)
+		return;
+	if (zv->zv_volsize == pp->mediasize)
+		return;
+	/*
+	 * Changing provider size is not really supported by GEOM, but it
+	 * should be safe when provider is closed.
+	 */
+	if (zv->zv_total_opens > 0)
+		return;
+	pp->mediasize = zv->zv_volsize;
 }
 
 int
@@ -263,6 +278,7 @@ zvol_access(struct g_provider *pp, int a
 	}
 
 	zv->zv_total_opens += acr + acw + ace;
+	zvol_size_changed(zv, 0);
 
 	mutex_exit(&zvol_state_lock);
 
@@ -1072,11 +1088,6 @@ zvol_set_volblocksize(const char *name, 
 		if (error == ENOTSUP)
 			error = EBUSY;
 		dmu_tx_commit(tx);
-		/* XXX: Not supported. */
-#if 0
-		if (error == 0)
-			zv->zv_provider->sectorsize = zc->zc_volblocksize;
-#endif
 	}
 end:
 	mutex_exit(&zvol_state_lock);


More information about the svn-src-all mailing list