zvol_os: Properly ignore error in volmode lookup

We fall back to a default volmode and continue when looking up a zvol's
volmode property fails.  After this we should set the error to 0 to
ensure we take the success paths in the out section.

While here, make sure we only log that the zvol was created on success.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Matt Macy <mmacy@FreeBSD.org>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #11117
This commit is contained in:
Ryan Moeller 2020-10-21 17:59:15 +00:00 committed by Brian Behlendorf
parent 896d0f0906
commit c2c643256c

View File

@ -1279,6 +1279,8 @@ zvol_create_minor_impl(const char *name)
zfs_prop_to_name(ZFS_PROP_VOLMODE), &volmode, NULL); zfs_prop_to_name(ZFS_PROP_VOLMODE), &volmode, NULL);
if (error || volmode == ZFS_VOLMODE_DEFAULT) if (error || volmode == ZFS_VOLMODE_DEFAULT)
volmode = zvol_volmode; volmode = zvol_volmode;
error = 0;
/* /*
* zvol_alloc equivalent ... * zvol_alloc equivalent ...
*/ */
@ -1357,8 +1359,7 @@ zvol_create_minor_impl(const char *name)
out_dmu_objset_disown: out_dmu_objset_disown:
dmu_objset_disown(os, B_TRUE, FTAG); dmu_objset_disown(os, B_TRUE, FTAG);
if (zv->zv_zso->zso_volmode == ZFS_VOLMODE_GEOM) { if (error == 0 && volmode == ZFS_VOLMODE_GEOM) {
if (error == 0)
zvol_geom_run(zv); zvol_geom_run(zv);
g_topology_unlock(); g_topology_unlock();
} }
@ -1369,8 +1370,8 @@ out_doi:
zvol_insert(zv); zvol_insert(zv);
zvol_minors++; zvol_minors++;
rw_exit(&zvol_state_lock); rw_exit(&zvol_state_lock);
}
ZFS_LOG(1, "ZVOL %s created.", name); ZFS_LOG(1, "ZVOL %s created.", name);
}
out_giant: out_giant:
PICKUP_GIANT(); PICKUP_GIANT();
return (error); return (error);