From 6e2c55b5a687142627a5ec1fe3ce29f78be20423 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 1 Oct 2009 16:47:49 -0700 Subject: [PATCH 1/3] Update to use spl_module_{init,exit}() macro API. --- module/avl/avl.c | 15 ++++----------- module/nvpair/nvpair.c | 15 ++++----------- module/unicode/u8_textprep.c | 15 ++++----------- module/zcommon/zfs_prop.c | 27 ++++++++++----------------- module/zfs/zfs_ioctl.c | 27 ++++----------------------- 5 files changed, 26 insertions(+), 73 deletions(-) diff --git a/module/avl/avl.c b/module/avl/avl.c index 3212de9bae..728bd87234 100644 --- a/module/avl/avl.c +++ b/module/avl/avl.c @@ -1033,18 +1033,11 @@ done: } #if defined(_KERNEL) && defined(HAVE_SPL) -static int __init avl_init(void) -{ - return 0; -} +static int avl_init(void) { return 0; } +static int avl_fini(void) { return 0; } -static void avl_fini(void) -{ - return; -} - -module_init(avl_init); -module_exit(avl_fini); +spl_module_init(avl_init); +spl_module_exit(avl_fini); MODULE_AUTHOR("Sun Microsystems, Inc"); MODULE_DESCRIPTION("Generic AVL tree implementation"); diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c index 0da298d845..5bee964294 100644 --- a/module/nvpair/nvpair.c +++ b/module/nvpair/nvpair.c @@ -3246,18 +3246,11 @@ nvs_xdr(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen) } #if defined(_KERNEL) && defined(HAVE_SPL) -static int __init nvpair_init(void) -{ - return 0; -} +static int nvpair_init(void) { return 0; } +static int nvpair_fini(void) { return 0; } -static void nvpair_fini(void) -{ - return; -} - -module_init(nvpair_init); -module_exit(nvpair_fini); +spl_module_init(nvpair_init); +spl_module_exit(nvpair_fini); MODULE_AUTHOR("Sun Microsystems, Inc"); MODULE_DESCRIPTION("Generic name/value pair implementation"); diff --git a/module/unicode/u8_textprep.c b/module/unicode/u8_textprep.c index 248691bd00..37fb2e5a46 100644 --- a/module/unicode/u8_textprep.c +++ b/module/unicode/u8_textprep.c @@ -2133,18 +2133,11 @@ u8_textprep_str(char *inarray, size_t *inlen, char *outarray, size_t *outlen, } #if defined(_KERNEL) && defined(HAVE_SPL) -static int __init unicode_init(void) -{ - return 0; -} +static int unicode_init(void) { return 0; } +static int unicode_fini(void) { return 0; } -static void unicode_fini(void) -{ - return; -} - -module_init(unicode_init); -module_exit(unicode_fini); +spl_module_init(unicode_init); +spl_module_exit(unicode_fini); MODULE_AUTHOR("Sun Microsystems, Inc"); MODULE_DESCRIPTION("Unicode implementation"); diff --git a/module/zcommon/zfs_prop.c b/module/zcommon/zfs_prop.c index 0a7d020151..45943602c0 100644 --- a/module/zcommon/zfs_prop.c +++ b/module/zcommon/zfs_prop.c @@ -534,6 +534,16 @@ zfs_prop_align_right(zfs_prop_t prop) #endif #if defined(_KERNEL) && defined(HAVE_SPL) +static int zcommon_init(void) { return 0; } +static int zcommon_fini(void) { return 0; } + +spl_module_init(zcommon_init); +spl_module_exit(zcommon_fini); + +MODULE_AUTHOR("Sun Microsystems, Inc"); +MODULE_DESCRIPTION("Generic ZFS support"); +MODULE_LICENSE("CDDL"); + /* zfs dataset property functions */ EXPORT_SYMBOL(zfs_userquota_prop_prefixes); EXPORT_SYMBOL(zfs_prop_init); @@ -555,21 +565,4 @@ EXPORT_SYMBOL(zfs_prop_index_to_string); EXPORT_SYMBOL(zfs_prop_string_to_index); EXPORT_SYMBOL(zfs_prop_valid_for_type); -static int __init zcommon_init(void) -{ - return 0; -} - -static void zcommon_fini(void) -{ - return; -} - -module_init(zcommon_init); -module_exit(zcommon_fini); - -MODULE_AUTHOR("Sun Microsystems, Inc"); -MODULE_DESCRIPTION("Generic ZFS support"); -MODULE_LICENSE("CDDL"); - #endif diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index c33969ee57..d73b83499c 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -3847,6 +3847,8 @@ _init(void) ASSERT(error == 0); mutex_init(&zfs_share_lock, NULL, MUTEX_DEFAULT, NULL); + printk(KERN_INFO "ZFS: Loaded ZFS Filesystem v%s\n", ZFS_META_VERSION); + return (0); } @@ -3880,29 +3882,8 @@ _fini(void) } #ifdef HAVE_SPL -int -init(void) -{ - int rc; - - rc = _init(); - if (!rc) - printk(KERN_INFO "ZFS: Loaded ZFS Filesystem v%s\n", - ZFS_META_VERSION); - - return rc; -} - -void -fini(void) -{ - (void)_fini(); - printk(KERN_INFO "ZFS: Unloaded ZFS Filesystem v%s\n", - ZFS_META_VERSION); -} - -module_init(init); -module_exit(fini); +spl_module_init(_init); +spl_module_exit(_fini); MODULE_AUTHOR("Sun Microsystems, Inc"); MODULE_DESCRIPTION("ZFS"); From 69bdec991327bfcdbc581d71b008504aa88c1bd2 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 1 Oct 2009 16:49:12 -0700 Subject: [PATCH 2/3] Update to use spl_module_{init,exit}() macro API. --- module/zpios/zpios.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/module/zpios/zpios.c b/module/zpios/zpios.c index 268e2c3d5e..ecffb02ac0 100644 --- a/module/zpios/zpios.c +++ b/module/zpios/zpios.c @@ -1241,7 +1241,7 @@ static struct cdev zpios_cdev = { .kobj = { .name = ZPIOS_NAME, }, }; -static int __init +static int zpios_init(void) { dev_t dev; @@ -1278,7 +1278,7 @@ error: return rc; } -static void +static int zpios_fini(void) { dev_t dev = MKDEV(ZPIOS_MAJOR, 0); @@ -1288,11 +1288,11 @@ zpios_fini(void) cdev_del(&zpios_cdev); unregister_chrdev_region(dev, ZPIOS_MINORS); - return; + return 0; } -module_init(zpios_init); -module_exit(zpios_fini); +spl_module_init(zpios_init); +spl_module_exit(zpios_fini); MODULE_AUTHOR("LLNL / Sun"); MODULE_DESCRIPTION("Kernel PIOS implementation"); From 0efea24e73ddf1eb956c47d2272f698ed88d5f6f Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 1 Oct 2009 16:55:34 -0700 Subject: [PATCH 3/3] Add zconfig.sg test script. This is an initial script for validation of zfs/zpool configuration. For now there is only one test here to ensure that /etc/zfs/zpool.cache is being updated properly from the kernel module. Additional tests should be added, I believe Richardo said there was an existing test suite out there which validated the behavior of many zpool/zfs commands. It would be nice to add that as appropriate. --- scripts/Makefile.am | 12 +++++-- scripts/common.sh | 10 ++++++ scripts/zconfig.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 2 deletions(-) create mode 100755 scripts/zconfig.sh diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 2bc0f87f99..977535130d 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -6,15 +6,23 @@ nobase_pkglibexec_SCRIPTS += zpool-config/* EXTRA_DIST = zfs-update.sh $(nobase_pkglibexec_SCRIPTS) ZFS=${top_srcdir}/scripts/zfs.sh +ZCONFIG=${top_srcdir}/scripts/zconfig.sh ZTEST=${top_builddir}/cmd/ztest/ztest check: - @$(ZFS) -v @echo @echo -n "====================================" @echo -n " ZTEST " @echo "====================================" @echo + @$(ZFS) @$(ZTEST) -V + @$(ZFS) -u + @echo + @echo + @echo -n "====================================" + @echo -n " ZCONFIG " + @echo "====================================" + @echo + @$(ZCONFIG) @echo - @$(ZFS) -vu diff --git a/scripts/common.sh b/scripts/common.sh index 75f811e83c..9548a97b10 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -48,6 +48,15 @@ msg() { fi } +pass() { + echo "PASS" +} + +fail() { + echo "FAIL ($1)" + exit $1 +} + spl_dump_log() { ${SYSCTL} -w kernel.spl.debug.dump=1 &>/dev/null local NAME=`dmesg | tail -n 1 | cut -f5 -d' '` @@ -104,6 +113,7 @@ load_module() { } load_modules() { + mkdir -p /etc/zfs for MOD in ${MODULES[*]}; do local NAME=`basename ${MOD} .ko` diff --git a/scripts/zconfig.sh b/scripts/zconfig.sh new file mode 100755 index 0000000000..a90d984fc6 --- /dev/null +++ b/scripts/zconfig.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# +# ZFS/ZPOOL configuration test script. + +SCRIPT_COMMON=common.sh +if [ -f ./${SCRIPT_COMMON} ]; then +. ./${SCRIPT_COMMON} +elif [ -f /usr/libexec/zfs/${SCRIPT_COMMON} ]; then +. /usr/libexec/zfs/${SCRIPT_COMMON} +else +echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 +fi + +PROG=zconfig.sh + +usage() { +cat << EOF +USAGE: +$0 [hv] + +DESCRIPTION: + ZFS/ZPOOL configuration tests + +OPTIONS: + -h Show this message + -v Verbose + +EOF +} + +while getopts 'hv' OPTION; do + case $OPTION in + h) + usage + exit 1 + ;; + v) + VERBOSE=1 + ;; + ?) + usage + exit + ;; + esac +done + +if [ $(id -u) != 0 ]; then + die "Must run as root" +fi + +# Validate persistent zpool.cache configuration. +zconfig_test1() { + POOL_NAME=test1 + TMP_FILE1=`mktemp` + TMP_FILE2=`mktemp` + + echo -n "test 1 - persistent zpool.cache: " + + # Create a pool save its status for comparison. + ${ZFS_SH} || fail 1 + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2 + ${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail 3 + + # Unload/load the module stack to clear any configuration state + # then verify that the pool can be imported and is online. + ${ZFS_SH} -u || fail 4 + ${ZFS_SH} || fail 5 + ${ZPOOL} import ${POOL_NAME} || fail 6 + ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail 7 + + # Compare the original and imported pool status they should match + cmp ${TMP_FILE1} ${TMP_FILE2} || fail 8 + + # Cleanup the test pool and temporary file + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 9 + rm -f ${TMP_FILE1} ${TMP_FILE2} || fail 10 + ${ZFS_SH} -u || fail 11 + + pass +} + +zconfig_test1 + +exit 0