diff --git a/include/os/linux/kernel/linux/mod_compat.h b/include/os/linux/kernel/linux/mod_compat.h index 5ae511539..e49ada399 100644 --- a/include/os/linux/kernel/linux/mod_compat.h +++ b/include/os/linux/kernel/linux/mod_compat.h @@ -63,6 +63,7 @@ enum scope_prefix_types { zfs_vdev_disk, zfs_vdev_file, zfs_vdev_mirror, + zfs_vol, zfs_vnops, zfs_zevent, zfs_zio, diff --git a/module/os/freebsd/zfs/zvol_os.c b/module/os/freebsd/zfs/zvol_os.c index 7362aafdb..876e0855f 100644 --- a/module/os/freebsd/zfs/zvol_os.c +++ b/module/os/freebsd/zfs/zvol_os.c @@ -1373,6 +1373,9 @@ zvol_os_create_minor(const char *name) int error; bool replayed_zil = B_FALSE; + if (zvol_inhibit_dev) + return (0); + ZFS_LOG(1, "Creating ZVOL %s...", name); hash = zvol_name_hash(name); if ((zv = zvol_find_by_name_hash(name, hash, RW_NONE)) != NULL) { diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c index 555fc9598..5a6c691b0 100644 --- a/module/os/linux/zfs/zvol_os.c +++ b/module/os/linux/zfs/zvol_os.c @@ -1788,9 +1788,6 @@ zvol_fini(void) ida_destroy(&zvol_ida); } -module_param(zvol_inhibit_dev, uint, 0644); -MODULE_PARM_DESC(zvol_inhibit_dev, "Do not create zvol device nodes"); - module_param(zvol_major, uint, 0444); MODULE_PARM_DESC(zvol_major, "Major number for zvol device"); diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 148bf16ce..96af281dd 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -2154,6 +2154,8 @@ zvol_fini_impl(void) } } +ZFS_MODULE_PARAM(zfs_vol, zvol_, inhibit_dev, UINT, ZMOD_RW, + "Do not create zvol device nodes"); ZFS_MODULE_PARAM(zfs, , zvol_threads, UINT, ZMOD_RW, "Number of threads for I/O requests. Set to 0 to use all active CPUs"); ZFS_MODULE_PARAM(zfs, , zvol_num_taskqs, UINT, ZMOD_RW, diff --git a/tests/zfs-tests/include/tunables.cfg b/tests/zfs-tests/include/tunables.cfg index e06e250ba..e739e74e7 100644 --- a/tests/zfs-tests/include/tunables.cfg +++ b/tests/zfs-tests/include/tunables.cfg @@ -99,7 +99,7 @@ VDEV_MAX_AUTO_ASHIFT vdev.max_auto_ashift zfs_vdev_max_auto_ashift VDEV_MIN_MS_COUNT vdev.min_ms_count zfs_vdev_min_ms_count VDEV_DIRECT_WR_VERIFY vdev.direct_write_verify zfs_vdev_direct_write_verify VDEV_VALIDATE_SKIP vdev.validate_skip vdev_validate_skip -VOL_INHIBIT_DEV UNSUPPORTED zvol_inhibit_dev +VOL_INHIBIT_DEV vol.inhibit_dev zvol_inhibit_dev VOL_MODE vol.mode zvol_volmode VOL_RECURSIVE vol.recursive UNSUPPORTED VOL_REQUEST_SYNC zvol_request_sync zvol_request_sync diff --git a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh index 505ef701c..ebdfb768a 100755 --- a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh +++ b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh @@ -42,7 +42,7 @@ # 5. Verify "volmode=default" behaves accordingly to "volmode" module parameter # 6. Verify "volmode" property is inherited correctly # 7. Verify "volmode" behaves correctly at import time -# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev (Linux only) +# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev # verify_runnable "global" @@ -64,10 +64,8 @@ function sysctl_inhibit_dev # value { typeset value="$1" - if is_linux; then - log_note "Setting zvol_inhibit_dev tunable to $value" - log_must set_tunable32 VOL_INHIBIT_DEV $value - fi + log_note "Setting zvol_inhibit_dev tunable to $value" + log_must set_tunable32 VOL_INHIBIT_DEV $value } # @@ -230,31 +228,29 @@ log_must_busy zfs destroy $SUBZVOL blockdev_missing $ZDEV blockdev_missing $SUBZDEV -# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev (Linux only) -if is_linux; then - sysctl_inhibit_dev 1 - # 7.1 Verify device nodes not are not created with "volmode=full" - sysctl_volmode 1 - log_must zfs create -V $VOLSIZE -s $ZVOL - blockdev_missing $ZDEV - set_volmode full $ZVOL - blockdev_missing $ZDEV - log_must_busy zfs destroy $ZVOL - blockdev_missing $ZDEV - # 7.1 Verify device nodes not are not created with "volmode=dev" - sysctl_volmode 2 - log_must zfs create -V $VOLSIZE -s $ZVOL - blockdev_missing $ZDEV - set_volmode dev $ZVOL - blockdev_missing $ZDEV - log_must_busy zfs destroy $ZVOL - blockdev_missing $ZDEV - # 7.1 Verify device nodes not are not created with "volmode=none" - sysctl_volmode 3 - log_must zfs create -V $VOLSIZE -s $ZVOL - blockdev_missing $ZDEV - set_volmode none $ZVOL - blockdev_missing $ZDEV -fi +# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev +sysctl_inhibit_dev 1 +# 7.1 Verify device nodes not are not created with "volmode=full" +sysctl_volmode 1 +log_must zfs create -V $VOLSIZE -s $ZVOL +blockdev_missing $ZDEV +set_volmode full $ZVOL +blockdev_missing $ZDEV +log_must_busy zfs destroy $ZVOL +blockdev_missing $ZDEV +# 7.1 Verify device nodes not are not created with "volmode=dev" +sysctl_volmode 2 +log_must zfs create -V $VOLSIZE -s $ZVOL +blockdev_missing $ZDEV +set_volmode dev $ZVOL +blockdev_missing $ZDEV +log_must_busy zfs destroy $ZVOL +blockdev_missing $ZDEV +# 7.1 Verify device nodes not are not created with "volmode=none" +sysctl_volmode 3 +log_must zfs create -V $VOLSIZE -s $ZVOL +blockdev_missing $ZDEV +set_volmode none $ZVOL +blockdev_missing $ZDEV log_pass "Verify that ZFS volume property 'volmode' works as intended"