diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2012-10-06 19:57:27 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2012-10-06 19:57:27 +0000 |
commit | 8bf749ef3a7a8c46811f68c985612e84501d23a0 (patch) | |
tree | 0c07d150af9ee0a7afe6e99318ccc5be5325268e | |
parent | a90c9dfeab0a56e94ac81ffc9d77f9d4a19255c7 (diff) | |
download | src-8bf749ef3a7a8c46811f68c985612e84501d23a0.tar.gz src-8bf749ef3a7a8c46811f68c985612e84501d23a0.zip |
zvol: set mediasize in geom provider right upon its creation
... instead of deferring the action until first open.
Unlike upstream this has no benefit on FreeBSD.
We know that as soon as the provider is created it is going to be tasted
and thus opened. Initial mediasize of zero causes tasting failure
and subsequent retasting because of the size change.
MFC after: 14 days
Notes
Notes:
svn path=/head/; revision=241297
-rw-r--r-- | sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c index be4f5181fbdc..07fd3c68996b 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c @@ -475,6 +475,7 @@ zvol_create_minor(const char *name) zvol_state_t *zv; objset_t *os; dmu_object_info_t doi; + uint64_t volsize; int error; ZFS_LOG(1, "Creating ZVOL %s...", name); @@ -535,9 +536,20 @@ zvol_create_minor(const char *name) zv = zs->zss_data = kmem_zalloc(sizeof (zvol_state_t), KM_SLEEP); #else /* !sun */ + error = zap_lookup(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize); + if (error) { + ASSERT(error == 0); + dmu_objset_disown(os, zvol_tag); + mutex_exit(&spa_namespace_lock); + return (error); + } + DROP_GIANT(); g_topology_lock(); zv = zvol_geom_create(name); + zv->zv_volsize = volsize; + zv->zv_provider->mediasize = zv->zv_volsize; + #endif /* !sun */ (void) strlcpy(zv->zv_name, name, MAXPATHLEN); |