Merge commit 'refs/top-bases/linux-kernel-mem' into linux-kernel-mem
This commit is contained in:
commit
7aa850cbd1
|
@ -1,5 +1,4 @@
|
|||
EXTRA_DIST = update-zfs.sh check.sh
|
||||
EXTRA_DIST += load-zfs.sh unload-zfs.sh create-zpool.sh
|
||||
EXTRA_DIST = update-zfs.sh check.sh zfs.sh create-zpool.sh
|
||||
|
||||
check:
|
||||
./check.sh
|
||||
|
|
|
@ -11,7 +11,7 @@ if [ $(id -u) != 0 ]; then
|
|||
die "Must run as root"
|
||||
fi
|
||||
|
||||
./load-zfs.sh || die ""
|
||||
./unload-zfs.sh || die ""
|
||||
./zfs.sh -v || die ""
|
||||
./zfs.sh -vu || die ""
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
prog=load-zfs.sh
|
||||
. ../.script-config
|
||||
|
||||
spl_options=$1
|
||||
zpool_options=$2
|
||||
|
||||
spl_module=${SPLBUILD}/modules/spl/spl.ko
|
||||
zlib_module=/lib/modules/${KERNELSRCVER}/kernel/lib/zlib_deflate/zlib_deflate.ko
|
||||
zavl_module=${ZFSBUILD}/lib/libavl/zavl.ko
|
||||
znvpair_module=${ZFSBUILD}/lib/libnvpair/znvpair.ko
|
||||
zcommon_module=${ZFSBUILD}/lib/libzcommon/zcommon.ko
|
||||
zpool_module=${ZFSBUILD}/lib/libzpool/zpool.ko
|
||||
zctl_module=${ZFSBUILD}/lib/libdmu-ctl/zctl.ko
|
||||
zpios_module=${ZFSBUILD}/lib/libzpios/zpios.ko
|
||||
|
||||
die() {
|
||||
echo "${prog}: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
load_module() {
|
||||
echo "Loading $1"
|
||||
/sbin/insmod $* || die "Failed to load $1"
|
||||
}
|
||||
|
||||
if [ $(id -u) != 0 ]; then
|
||||
die "Must run as root"
|
||||
fi
|
||||
|
||||
if /sbin/lsmod | egrep -q "^spl|^zavl|^znvpair|^zcommon|^zlib_deflate|^zpool"; then
|
||||
die "Must start with modules unloaded"
|
||||
fi
|
||||
|
||||
if [ ! -f ${zavl_module} ] ||
|
||||
[ ! -f ${znvpair_module} ] ||
|
||||
[ ! -f ${zcommon_module} ] ||
|
||||
[ ! -f ${zpool_module} ]; then
|
||||
die "Source tree must be built, run 'make'"
|
||||
fi
|
||||
|
||||
load_module ${spl_module} ${spl_options}
|
||||
load_module ${zlib_module}
|
||||
load_module ${zavl_module}
|
||||
load_module ${znvpair_module}
|
||||
load_module ${zcommon_module}
|
||||
load_module ${zpool_module} ${zpool_options}
|
||||
load_module ${zctl_module}
|
||||
load_module ${zpios_module}
|
||||
|
||||
sleep 1
|
||||
echo "Successfully loaded ZFS module stack"
|
||||
|
||||
exit 0
|
|
@ -1,53 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
prog=unload-zfs.sh
|
||||
. ../.script-config
|
||||
|
||||
spl_module=${SPLBUILD}/modules/spl/spl.ko
|
||||
zlib_module=/lib/modules/${KERNELSRCVER}/kernel/lib/zlib_deflate/zlib_deflate.ko
|
||||
zavl_module=${ZFSBUILD}/lib/libavl/zavl.ko
|
||||
znvpair_module=${ZFSBUILD}/lib/libnvpair/znvpair.ko
|
||||
zcommon_module=${ZFSBUILD}/lib/libzcommon/zcommon.ko
|
||||
zpool_module=${ZFSBUILD}/lib/libzpool/zpool.ko
|
||||
zctl_module=${ZFSBUILD}/lib/libdmu-ctl/zctl.ko
|
||||
zpios_module=${ZFSBUILD}/lib/libzpios/zpios.ko
|
||||
|
||||
die() {
|
||||
echo "${prog}: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
unload_module() {
|
||||
echo "Unloading $1"
|
||||
/sbin/rmmod $1 || die "Failed to unload $1"
|
||||
}
|
||||
|
||||
if [ $(id -u) != 0 ]; then
|
||||
die "Must run as root"
|
||||
fi
|
||||
|
||||
unload_module ${zpios_module}
|
||||
unload_module ${zctl_module}
|
||||
unload_module ${zpool_module}
|
||||
unload_module ${zcommon_module}
|
||||
unload_module ${znvpair_module}
|
||||
unload_module ${zavl_module}
|
||||
unload_module ${zlib_module}
|
||||
|
||||
# Set DUMP=1 to generate debug logs on unload
|
||||
if [ -n "${DUMP}" ]; then
|
||||
sysctl -w kernel.spl.debug.dump=1
|
||||
# This is racy, I don't like it, but for a helper script it will do.
|
||||
SPL_LOG=`dmesg | tail -n 1 | cut -f5 -d' '`
|
||||
${SPLBUILD}/cmd/spl ${SPL_LOG} >${SPL_LOG}.log
|
||||
echo
|
||||
echo "Dumped debug log: ${SPL_LOG}.log"
|
||||
tail -n1 ${SPL_LOG}.log
|
||||
echo
|
||||
fi
|
||||
|
||||
unload_module ${spl_module}
|
||||
|
||||
echo "Successfully unloaded ZFS module stack"
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,207 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# A simple script to simply the loading/unloading the ZFS module
|
||||
# stack. It should probably be considered a first step towards
|
||||
# a full ZFS init script when that is needed.
|
||||
#
|
||||
|
||||
prog=zfs.sh
|
||||
. ../.script-config
|
||||
|
||||
KMOD=/lib/modules/${KERNELSRCVER}/kernel
|
||||
kernel_modules=( \
|
||||
$KMOD/lib/zlib_deflate/zlib_deflate.ko \
|
||||
)
|
||||
|
||||
spl_modules=( \
|
||||
${SPLBUILD}/modules/spl/spl.ko \
|
||||
)
|
||||
|
||||
zfs_modules=( \
|
||||
${MODDIR}/avl/zavl.ko \
|
||||
${MODDIR}/nvpair/znvpair.ko \
|
||||
${MODDIR}/unicode/zunicode.ko \
|
||||
${MODDIR}/zcommon/zcommon.ko \
|
||||
${MODDIR}/zfs/zpool.ko \
|
||||
)
|
||||
|
||||
test_modules=( \
|
||||
${MODDIR}/zpios/zpios.ko \
|
||||
)
|
||||
|
||||
modules=( \
|
||||
${kernel_modules[*]} \
|
||||
${spl_modules[*]} \
|
||||
${zfs_modules[*]} \
|
||||
${test_modules[*]} \
|
||||
)
|
||||
|
||||
die() {
|
||||
echo -e "${prog}: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat << EOF
|
||||
USAGE:
|
||||
$0 [hvud] [module-options]
|
||||
|
||||
DESCRIPTION:
|
||||
Load/unload the ZFS module stack.
|
||||
|
||||
OPTIONS:
|
||||
-h Show this message
|
||||
-v Verbose
|
||||
-u Unload modules
|
||||
-d Save debug log on unload
|
||||
|
||||
MODULE-OPTIONS:
|
||||
Must be of the frm module="options", for example:
|
||||
|
||||
$0 zpool="zfs_prefetch_disable=1"
|
||||
$0 zpool="zfs_prefetch_disable=1 zfs_mdcomp_disable=1"
|
||||
$0 spl="spl_debug_mask=0"
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
check_modules() {
|
||||
loaded_modules=()
|
||||
missing_modules=()
|
||||
|
||||
for module in ${modules[*]}; do
|
||||
name=`basename $module .ko`
|
||||
|
||||
if /sbin/lsmod | egrep -q "^${name}"; then
|
||||
loaded_modules=(${name} ${loaded_modules[*]})
|
||||
fi
|
||||
|
||||
if [ ! -f $module ]; then
|
||||
missing_modules=("\t${module}\n" ${missing_modules[*]})
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#loaded_modules[*]} -gt 0 ]; then
|
||||
error="The following modules must be unloaded, manually run:\n"
|
||||
die "${error}'/sbin/rmmod ${loaded_modules[*]}'"
|
||||
fi
|
||||
|
||||
if [ ${#missing_modules[*]} -gt 0 ]; then
|
||||
error="The following modules can not be found,"
|
||||
error="${error} ensure your source trees are built:\n"
|
||||
die "${error}${missing_modules[*]}"
|
||||
fi
|
||||
}
|
||||
|
||||
spl_dump_log() {
|
||||
sysctl -w kernel.spl.debug.dump=1 &>/dev/null
|
||||
name=`dmesg | tail -n 1 | cut -f5 -d' '`
|
||||
${SPLBUILD}/cmd/spl ${name} >${name}.log
|
||||
echo
|
||||
echo "Dumped debug log: ${name}.log"
|
||||
tail -n1 ${name}.log
|
||||
echo
|
||||
}
|
||||
|
||||
load_module() {
|
||||
name=`basename $module .ko`
|
||||
|
||||
if [ ${verbose} ]; then
|
||||
echo "Loading $name ($@)"
|
||||
fi
|
||||
|
||||
/sbin/insmod $* || die "Failed to load $1"
|
||||
}
|
||||
|
||||
load_modules() {
|
||||
|
||||
for module in ${modules[*]}; do
|
||||
name=`basename $module .ko`
|
||||
value=
|
||||
|
||||
for opt in "$@"; do
|
||||
opt_name=`echo $opt | cut -f1 -d'='`
|
||||
|
||||
if [ ${name} = ${opt_name} ]; then
|
||||
value=`echo $opt | cut -f2- -d'='`
|
||||
fi
|
||||
done
|
||||
|
||||
load_module ${module} ${value}
|
||||
done
|
||||
|
||||
if [ ${verbose} ]; then
|
||||
echo "Successfully loaded ZFS module stack"
|
||||
fi
|
||||
}
|
||||
|
||||
unload_module() {
|
||||
name=`basename $module .ko`
|
||||
|
||||
if [ ${verbose} ]; then
|
||||
echo "Unloading $name ($@)"
|
||||
fi
|
||||
|
||||
/sbin/rmmod $name || die "Failed to unload $name"
|
||||
}
|
||||
|
||||
unload_modules() {
|
||||
modules_reverse=( $(echo ${modules[@]} |
|
||||
awk '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
|
||||
|
||||
for module in ${modules_reverse[*]}; do
|
||||
name=`basename $module .ko`
|
||||
|
||||
if /sbin/lsmod | egrep -q "^${name}"; then
|
||||
|
||||
if [ "${dump_log}" -a ${name} = "spl" ]; then
|
||||
spl_dump_log
|
||||
fi
|
||||
|
||||
unload_module ${module}
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${verbose} ]; then
|
||||
echo "Successfully unloaded ZFS module stack"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $(id -u) != 0 ]; then
|
||||
die "Must run as root"
|
||||
fi
|
||||
|
||||
verbose=
|
||||
unload=
|
||||
dump_log=
|
||||
|
||||
while getopts 'hvud' OPTION; do
|
||||
case $OPTION in
|
||||
h)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
v)
|
||||
verbose=1
|
||||
;;
|
||||
u)
|
||||
unload=1
|
||||
;;
|
||||
d)
|
||||
dump_log=1
|
||||
;;
|
||||
?)
|
||||
usage
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ${unload} ]; then
|
||||
unload_modules
|
||||
else
|
||||
check_modules
|
||||
load_modules "$@"
|
||||
fi
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue