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