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
This commit is contained in:
parent
a90c9dfeab
commit
8bf749ef3a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=241297
@ -475,6 +475,7 @@ zvol_create_minor(const char *name)
|
|||||||
zvol_state_t *zv;
|
zvol_state_t *zv;
|
||||||
objset_t *os;
|
objset_t *os;
|
||||||
dmu_object_info_t doi;
|
dmu_object_info_t doi;
|
||||||
|
uint64_t volsize;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
ZFS_LOG(1, "Creating ZVOL %s...", name);
|
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);
|
zv = zs->zss_data = kmem_zalloc(sizeof (zvol_state_t), KM_SLEEP);
|
||||||
#else /* !sun */
|
#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();
|
DROP_GIANT();
|
||||||
g_topology_lock();
|
g_topology_lock();
|
||||||
zv = zvol_geom_create(name);
|
zv = zvol_geom_create(name);
|
||||||
|
zv->zv_volsize = volsize;
|
||||||
|
zv->zv_provider->mediasize = zv->zv_volsize;
|
||||||
|
|
||||||
#endif /* !sun */
|
#endif /* !sun */
|
||||||
|
|
||||||
(void) strlcpy(zv->zv_name, name, MAXPATHLEN);
|
(void) strlcpy(zv->zv_name, name, MAXPATHLEN);
|
||||||
|
Loading…
Reference in New Issue
Block a user