ZVOL: Make zvol_inhibit_dev module parameter platform-independent

The module parameter now is represented in FreeBSD sysctls list with
name: 'vfs.zfs.vol.inhibit_dev'. The default value is '0', same as on
Linux side.

Sponsored-by: vStack, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Rob Norris <rob.norris@klarasystems.com>
Signed-off-by: Fedor Uporov <fuporov.vstack@gmail.com>
Closes #17384
This commit is contained in:
Fedor Uporov 2025-05-29 16:37:41 +03:00 committed by GitHub
parent fa697b94e6
commit 3dfa98d013
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 34 additions and 35 deletions

View File

@ -63,6 +63,7 @@ enum scope_prefix_types {
zfs_vdev_disk, zfs_vdev_disk,
zfs_vdev_file, zfs_vdev_file,
zfs_vdev_mirror, zfs_vdev_mirror,
zfs_vol,
zfs_vnops, zfs_vnops,
zfs_zevent, zfs_zevent,
zfs_zio, zfs_zio,

View File

@ -1373,6 +1373,9 @@ zvol_os_create_minor(const char *name)
int error; int error;
bool replayed_zil = B_FALSE; bool replayed_zil = B_FALSE;
if (zvol_inhibit_dev)
return (0);
ZFS_LOG(1, "Creating ZVOL %s...", name); ZFS_LOG(1, "Creating ZVOL %s...", name);
hash = zvol_name_hash(name); hash = zvol_name_hash(name);
if ((zv = zvol_find_by_name_hash(name, hash, RW_NONE)) != NULL) { if ((zv = zvol_find_by_name_hash(name, hash, RW_NONE)) != NULL) {

View File

@ -1788,9 +1788,6 @@ zvol_fini(void)
ida_destroy(&zvol_ida); 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_param(zvol_major, uint, 0444);
MODULE_PARM_DESC(zvol_major, "Major number for zvol device"); MODULE_PARM_DESC(zvol_major, "Major number for zvol device");

View File

@ -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, ZFS_MODULE_PARAM(zfs, , zvol_threads, UINT, ZMOD_RW,
"Number of threads for I/O requests. Set to 0 to use all active CPUs"); "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, ZFS_MODULE_PARAM(zfs, , zvol_num_taskqs, UINT, ZMOD_RW,

View File

@ -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_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_DIRECT_WR_VERIFY vdev.direct_write_verify zfs_vdev_direct_write_verify
VDEV_VALIDATE_SKIP vdev.validate_skip vdev_validate_skip 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_MODE vol.mode zvol_volmode
VOL_RECURSIVE vol.recursive UNSUPPORTED VOL_RECURSIVE vol.recursive UNSUPPORTED
VOL_REQUEST_SYNC zvol_request_sync zvol_request_sync VOL_REQUEST_SYNC zvol_request_sync zvol_request_sync

View File

@ -42,7 +42,7 @@
# 5. Verify "volmode=default" behaves accordingly to "volmode" module parameter # 5. Verify "volmode=default" behaves accordingly to "volmode" module parameter
# 6. Verify "volmode" property is inherited correctly # 6. Verify "volmode" property is inherited correctly
# 7. Verify "volmode" behaves correctly at import time # 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" verify_runnable "global"
@ -64,10 +64,8 @@ function sysctl_inhibit_dev # value
{ {
typeset value="$1" typeset value="$1"
if is_linux; then
log_note "Setting zvol_inhibit_dev tunable to $value" log_note "Setting zvol_inhibit_dev tunable to $value"
log_must set_tunable32 VOL_INHIBIT_DEV $value log_must set_tunable32 VOL_INHIBIT_DEV $value
fi
} }
# #
@ -230,31 +228,29 @@ log_must_busy zfs destroy $SUBZVOL
blockdev_missing $ZDEV blockdev_missing $ZDEV
blockdev_missing $SUBZDEV blockdev_missing $SUBZDEV
# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev (Linux only) # 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev
if is_linux; then sysctl_inhibit_dev 1
sysctl_inhibit_dev 1 # 7.1 Verify device nodes not are not created with "volmode=full"
# 7.1 Verify device nodes not are not created with "volmode=full" sysctl_volmode 1
sysctl_volmode 1 log_must zfs create -V $VOLSIZE -s $ZVOL
log_must zfs create -V $VOLSIZE -s $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV set_volmode full $ZVOL
set_volmode full $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV log_must_busy zfs destroy $ZVOL
log_must_busy zfs destroy $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV # 7.1 Verify device nodes not are not created with "volmode=dev"
# 7.1 Verify device nodes not are not created with "volmode=dev" sysctl_volmode 2
sysctl_volmode 2 log_must zfs create -V $VOLSIZE -s $ZVOL
log_must zfs create -V $VOLSIZE -s $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV set_volmode dev $ZVOL
set_volmode dev $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV log_must_busy zfs destroy $ZVOL
log_must_busy zfs destroy $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV # 7.1 Verify device nodes not are not created with "volmode=none"
# 7.1 Verify device nodes not are not created with "volmode=none" sysctl_volmode 3
sysctl_volmode 3 log_must zfs create -V $VOLSIZE -s $ZVOL
log_must zfs create -V $VOLSIZE -s $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV set_volmode none $ZVOL
set_volmode none $ZVOL blockdev_missing $ZDEV
blockdev_missing $ZDEV
fi
log_pass "Verify that ZFS volume property 'volmode' works as intended" log_pass "Verify that ZFS volume property 'volmode' works as intended"