]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zvol_os: Properly ignore error in volmode lookup
authorRyan Moeller <ryan@iXsystems.com>
Wed, 21 Oct 2020 17:59:15 +0000 (17:59 +0000)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 30 Oct 2020 23:06:42 +0000 (16:06 -0700)
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

module/os/freebsd/zfs/zvol_os.c

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