diff options
author | Ryan Moeller <[email protected]> | 2019-12-19 12:31:16 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-12-19 09:31:16 -0800 |
commit | a3640486fffc592806c16f5149170ed659c94c2c (patch) | |
tree | 141f174ec0a001d7f5345d6b00362a414b6492bb /scripts | |
parent | d16a207f2edd19ece593967e7e83b7e2217d04f9 (diff) |
Update zfs.sh work on FreeBSD
Extend the zfs.sh script to load and unload zfs kmods on FreeBSD.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Kjeld Schouten <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #9746
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.am | 1 | ||||
-rwxr-xr-x | scripts/zfs.sh | 69 |
2 files changed, 54 insertions, 16 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am index d275a41c4..1d4306492 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -51,6 +51,7 @@ export KMOD_ZCOMMON=@abs_top_builddir@/module/zcommon/zcommon.ko export KMOD_ZLUA=@abs_top_builddir@/module/lua/zlua.ko export KMOD_ICP=@abs_top_builddir@/module/icp/icp.ko export KMOD_ZFS=@abs_top_builddir@/module/zfs/zfs.ko +export KMOD_FREEBSD=@abs_top_builddir@/module/openzfs.ko endef export EXTRA_ENVIRONMENT diff --git a/scripts/zfs.sh b/scripts/zfs.sh index 015b3ba9d..e1cfdc5e1 100755 --- a/scripts/zfs.sh +++ b/scripts/zfs.sh @@ -29,6 +29,7 @@ KMOD_ZCOMMON=${KMOD_ZCOMMON:-zcommon} KMOD_ZLUA=${KMOD_ZLUA:-zlua} KMOD_ICP=${KMOD_ICP:-icp} KMOD_ZFS=${KMOD_ZFS:-zfs} +KMOD_FREEBSD=${KMOD_FREEBSD:-openzfs} usage() { @@ -76,7 +77,7 @@ kill_zed() { fi } -check_modules() { +check_modules_linux() { LOADED_MODULES="" MISSING_MODULES="" @@ -108,7 +109,7 @@ check_modules() { return 0 } -load_module() { +load_module_linux() { KMOD=$1 FILE=$(modinfo "$KMOD" | awk '/^filename:/ {print $2}') @@ -128,7 +129,17 @@ load_module() { return 0 } -load_modules() { +load_modules_freebsd() { + kldload "$KMOD_FREEBSD" || return 1 + + if [ "$VERBOSE" = "yes" ]; then + echo "Successfully loaded ZFS module stack" + fi + + return 0 +} + +load_modules_linux() { mkdir -p /etc/zfs if modinfo "$KMOD_ZLIB_DEFLATE" >/dev/null 2>&1; then @@ -141,7 +152,7 @@ load_modules() { for KMOD in $KMOD_SPL $KMOD_ZAVL $KMOD_ZNVPAIR \ $KMOD_ZUNICODE $KMOD_ZCOMMON $KMOD_ZLUA $KMOD_ICP $KMOD_ZFS; do - load_module "$KMOD" || return 1 + load_module_linux "$KMOD" || return 1 done if [ "$VERBOSE" = "yes" ]; then @@ -151,7 +162,7 @@ load_modules() { return 0 } -unload_module() { +unload_module_linux() { KMOD=$1 NAME=$(basename "$KMOD" .ko) @@ -167,14 +178,24 @@ unload_module() { return 0 } -unload_modules() { +unload_modules_freebsd() { + kldunload "$KMOD_FREEBSD" || echo "Failed to unload $KMOD_FREEBSD" + + if [ "$VERBOSE" = "yes" ]; then + echo "Successfully unloaded ZFS module stack" + fi + + return 0 +} + +unload_modules_linux() { for KMOD in $KMOD_ZFS $KMOD_ICP $KMOD_ZLUA $KMOD_ZCOMMON $KMOD_ZUNICODE \ $KMOD_ZNVPAIR $KMOD_ZAVL $KMOD_SPL; do NAME=$(basename "$KMOD" .ko) USE_COUNT=$(lsmod | grep -E "^${NAME} " | awk '{print $3}') if [ "$USE_COUNT" = "0" ] ; then - unload_module "$KMOD" || return 1 + unload_module_linux "$KMOD" || return 1 fi done @@ -193,7 +214,7 @@ unload_modules() { return 0 } -stack_clear() { +stack_clear_linux() { STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size STACK_TRACER_ENABLED=/proc/sys/kernel/stack_tracer_enabled @@ -203,7 +224,7 @@ stack_clear() { fi } -stack_check() { +stack_check_linux() { STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size STACK_TRACE=/sys/kernel/debug/tracing/stack_trace STACK_LIMIT=15362 @@ -224,17 +245,33 @@ if [ "$(id -u)" != 0 ]; then exit 1 fi +UNAME=$(uname -s) + if [ "$UNLOAD" = "yes" ]; then kill_zed umount -t zfs -a - stack_check - unload_modules + case $UNAME in + FreeBSD) + unload_modules_freebsd + ;; + Linux) + stack_check_linux + unload_modules_linux + ;; + esac else - stack_clear - check_modules - load_modules "$@" - udevadm trigger - udevadm settle + case $UNAME in + FreeBSD) + load_modules_freebsd + ;; + Linux) + stack_clear_linux + check_modules_linux + load_modules_linux "$@" + udevadm trigger + udevadm settle + ;; + esac fi exit 0 |