diff options
Diffstat (limited to 'sys/contrib/openzfs/tests')
23 files changed, 447 insertions, 19 deletions
diff --git a/sys/contrib/openzfs/tests/runfiles/common.run b/sys/contrib/openzfs/tests/runfiles/common.run index fcd9684603b4..725afe2f054a 100644 --- a/sys/contrib/openzfs/tests/runfiles/common.run +++ b/sys/contrib/openzfs/tests/runfiles/common.run @@ -346,7 +346,7 @@ tags = ['functional', 'cli_root', 'zpool_detach'] [tests/functional/cli_root/zpool_events] tests = ['zpool_events_clear', 'zpool_events_cliargs', 'zpool_events_follow', - 'zpool_events_poolname', 'zpool_events_errors'] + 'zpool_events_poolname', 'zpool_events_errors', 'zpool_events_duplicates'] tags = ['functional', 'cli_root', 'zpool_events'] [tests/functional/cli_root/zpool_export] diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/Makefile.am index ba02f93fe2ab..cd462208957c 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/Makefile.am +++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/Makefile.am @@ -4,6 +4,13 @@ pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin pkgexec_PROGRAMS = libzfs_input_check +if BUILD_FREEBSD +DEFAULT_INCLUDES += -I$(top_srcdir)/include/os/freebsd/zfs +endif +if BUILD_LINUX +DEFAULT_INCLUDES += -I$(top_srcdir)/include/os/linux/zfs +endif + libzfs_input_check_SOURCES = libzfs_input_check.c libzfs_input_check_LDADD = \ $(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \ diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c index 9fee37357fc3..63217104f3fe 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c +++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c @@ -25,7 +25,9 @@ #include <libzutil.h> #include <sys/nvpair.h> +#include <sys/vdev_impl.h> #include <sys/zfs_ioctl.h> +#include <sys/zfs_bootenv.h> /* * Test the nvpair inputs for the non-legacy zfs ioctl commands. @@ -762,9 +764,10 @@ test_set_bootenv(const char *pool) { nvlist_t *required = fnvlist_alloc(); - fnvlist_add_string(required, "envmap", "test"); + fnvlist_add_uint64(required, "version", VB_RAW); + fnvlist_add_string(required, GRUB_ENVMAP, "test"); - IOC_INPUT_TEST(ZFS_IOC_SET_BOOTENV, pool, required, NULL, 0); + IOC_INPUT_TEST_WILD(ZFS_IOC_SET_BOOTENV, pool, required, NULL, 0); nvlist_free(required); } diff --git a/sys/contrib/openzfs/tests/zfs-tests/include/commands.cfg b/sys/contrib/openzfs/tests/zfs-tests/include/commands.cfg index bf8b67e750fb..4c11bf146378 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/include/commands.cfg +++ b/sys/contrib/openzfs/tests/zfs-tests/include/commands.cfg @@ -105,6 +105,7 @@ export SYSTEM_FILES_COMMON='arp umask umount uname + uniq uuidgen vmstat wait diff --git a/sys/contrib/openzfs/tests/zfs-tests/include/tunables.cfg b/sys/contrib/openzfs/tests/zfs-tests/include/tunables.cfg index ad2811395332..fab852a0a607 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/include/tunables.cfg +++ b/sys/contrib/openzfs/tests/zfs-tests/include/tunables.cfg @@ -76,12 +76,14 @@ TRIM_TXG_BATCH trim.txg_batch zfs_trim_txg_batch TXG_HISTORY txg.history zfs_txg_history TXG_TIMEOUT txg.timeout zfs_txg_timeout UNLINK_SUSPEND_PROGRESS UNSUPPORTED zfs_unlink_suspend_progress +VDEV_FILE_PHYSICAL_ASHIFT vdev.file.physical_ashift vdev_file_physical_ashift VDEV_MIN_MS_COUNT vdev.min_ms_count zfs_vdev_min_ms_count VDEV_VALIDATE_SKIP vdev.validate_skip vdev_validate_skip VOL_INHIBIT_DEV UNSUPPORTED zvol_inhibit_dev VOL_MODE vol.mode zvol_volmode VOL_RECURSIVE vol.recursive UNSUPPORTED ZEVENT_LEN_MAX zevent.len_max zfs_zevent_len_max +ZEVENT_RETAIN_MAX zevent.retain_max zfs_zevent_retain_max ZIO_SLOW_IO_MS zio.slow_io_ms zio_slow_io_ms %%%% while read name FreeBSD Linux; do diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_001_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_001_pos.ksh index 66124fe9cc31..d62bf9c346b6 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_001_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_001_pos.ksh @@ -34,7 +34,7 @@ # # DESCRIPTION: -# Verify that user can access file/directory if acltype=posixacl. +# Verify that user can access file/directory if acltype=posix. # # STRATEGY: # 1. Test access to file (mode=rw-) @@ -50,7 +50,7 @@ function cleanup rmdir $TESTDIR/dir.0 } -log_assert "Verify acltype=posixacl works on file" +log_assert "Verify acltype=posix works on file" log_onexit cleanup # Test access to FILE diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_002_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_002_pos.ksh index 1aceffd15692..d9b5036458f8 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_002_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/posix_002_pos.ksh @@ -34,7 +34,7 @@ # # DESCRIPTION: -# Verify that user can access file/directory if acltype=posixacl. +# Verify that user can access file/directory if acltype=posix. # # STRATEGY: # 1. Test access to directory (mode=-wx) @@ -43,7 +43,7 @@ # verify_runnable "both" -log_assert "Verify acltype=posixacl works on directory" +log_assert "Verify acltype=posix works on directory" # Test access to DIRECTORY log_note "Testing access to DIRECTORY" diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/setup.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/setup.ksh index 5d6d15864134..d8bf8a638e7b 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/setup.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/posix/setup.ksh @@ -46,7 +46,7 @@ default_setup_noexit $DISK log_must chmod 777 $TESTDIR # Use POSIX ACLs on filesystem -log_must zfs set acltype=posixacl $TESTPOOL/$TESTFS +log_must zfs set acltype=posix $TESTPOOL/$TESTFS log_must zfs set xattr=sa $TESTPOOL/$TESTFS log_pass diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add-o_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add-o_ashift.ksh index d9ae88e0792e..89cc4b0d3082 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add-o_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add-o_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -35,13 +36,15 @@ # STRATEGY: # 1. Create a pool with default values. # 2. Verify 'zpool add -o ashift=<n>' works with allowed values (9-16). -# 3. Verify 'zpool add -o ashift=<n>' doesn't accept other invalid values. +# 3. Verify setting kernel tunable for file vdevs works correctly. +# 4. Verify 'zpool add -o ashift=<n>' doesn't accept other invalid values. # verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift poolexists $TESTPOOL && destroy_pool $TESTPOOL rm -f $disk1 $disk2 } @@ -54,6 +57,8 @@ disk2=$TEST_BASE_DIR/disk2 log_must mkfile $SIZE $disk1 log_must mkfile $SIZE $disk2 +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) + typeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") for ashift in ${ashifts[@]} do @@ -69,6 +74,24 @@ do log_must zpool destroy $TESTPOOL log_must zpool labelclear $disk1 log_must zpool labelclear $disk2 + + # + # Make sure we can also set the ashift using the tunable. + # + log_must zpool create $TESTPOOL $disk1 + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $ashift + log_must zpool add $TESTPOOL $disk2 + verify_ashift $disk2 $ashift + if [[ $? -ne 0 ]] + then + log_fail "Device was added without setting ashift value to "\ + "$ashift" + fi + # clean things for the next run + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift + log_must zpool destroy $TESTPOOL + log_must zpool labelclear $disk1 + log_must zpool labelclear $disk2 done typeset badvals=("off" "on" "1" "8" "17" "1b" "ff" "-") diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add_prop_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add_prop_ashift.ksh index 37887f3d115e..4637fe0d84a3 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add_prop_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_add/add_prop_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -43,6 +44,7 @@ verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift poolexists $TESTPOOL && destroy_pool $TESTPOOL log_must rm -f $disk1 $disk2 } @@ -55,6 +57,14 @@ disk2=$TEST_BASE_DIR/disk2 log_must mkfile $SIZE $disk1 log_must mkfile $SIZE $disk2 +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) +# +# Set the file vdev's ashift to the max. Overriding +# the ashift using the -o ashift property should still +# be honored. +# +log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT 16 + typeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") for ashift in ${ashifts[@]} do diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_attach/attach-o_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_attach/attach-o_ashift.ksh index 9af011cb04d8..618c6992edb4 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_attach/attach-o_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_attach/attach-o_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -41,6 +42,7 @@ verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 rm -f $disk1 $disk2 } @@ -53,6 +55,14 @@ disk2=$TEST_BASE_DIR/disk2 log_must truncate -s $SIZE $disk1 log_must truncate -s $SIZE $disk2 +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) +# +# Set the file vdev's ashift to the max. Overriding +# the ashift using the -o ashift property should still +# be honored. +# +log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT 16 + typeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") for ashift in ${ashifts[@]} do diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_021_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_021_pos.ksh index 6ea1573241f0..655f887b60ad 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_021_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_021_pos.ksh @@ -68,7 +68,7 @@ set -A RW_FS_PROP "quota=536870912" \ "setuid=off" \ "readonly=on" \ "snapdir=visible" \ - "acltype=posixacl" \ + "acltype=posix" \ "aclinherit=discard" \ "canmount=off" if is_freebsd; then diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_022_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_022_pos.ksh index 349f73fecca5..4a918c0a683a 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_022_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_022_pos.ksh @@ -68,7 +68,7 @@ set -A RW_FS_PROP "quota=536870912" \ "setuid=off" \ "readonly=on" \ "snapdir=visible" \ - "acltype=posixacl" \ + "acltype=posix" \ "aclinherit=discard" \ "canmount=off" diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/.gitignore b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/.gitignore new file mode 100644 index 000000000000..a1f8c14838fa --- /dev/null +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/.gitignore @@ -0,0 +1 @@ +/ereports diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/Makefile.am index 7fb6e4f7a5c2..99c46f0143c2 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/Makefile.am +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/Makefile.am @@ -1,4 +1,8 @@ +include $(top_srcdir)/config/Rules.am + pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/cli_root/zpool_events +pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/cli_root/zpool_events + dist_pkgdata_SCRIPTS = \ setup.ksh \ cleanup.ksh \ @@ -6,8 +10,16 @@ dist_pkgdata_SCRIPTS = \ zpool_events_cliargs.ksh \ zpool_events_follow.ksh \ zpool_events_poolname.ksh \ - zpool_events_errors.ksh + zpool_events_errors.ksh \ + zpool_events_duplicates.ksh dist_pkgdata_DATA = \ zpool_events.cfg \ zpool_events.kshlib + +ereports_LDADD = \ + $(abs_top_builddir)/lib/libnvpair/libnvpair.la \ + $(abs_top_builddir)/lib/libzfs/libzfs.la + +pkgexec_PROGRAMS = ereports +ereports_SOURCES = ereports.c diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/ereports.c b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/ereports.c new file mode 100644 index 000000000000..f825240000f7 --- /dev/null +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/ereports.c @@ -0,0 +1,174 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2020 by Delphix. All rights reserved. + */ + +#include <assert.h> +#include <fcntl.h> +#include <stdio.h> +#include <libzfs.h> +#include <sys/zfs_ioctl.h> +#include <sys/nvpair.h> +#include <sys/fm/protocol.h> +#include <sys/fm/fs/zfs.h> + +/* + * Command to output io and checksum ereport values, one per line. + * Used by zpool_events_duplicates.ksh to check for duplicate events. + * + * example output line: + * + * checksum "error_pool" 0x856dd01ce52e336 0x000034 0x000400 0x000a402c00 + * 0x000004 0x000000 0x000000 0x000000 0x000001 + */ + +/* + * Our ereport duplicate criteria + * + * When the class and all of these values match, then an ereport is + * considered to be a duplicate. + */ +static const char *criteria_name[] = { + FM_EREPORT_PAYLOAD_ZFS_POOL, + FM_EREPORT_PAYLOAD_ZFS_VDEV_GUID, + FM_EREPORT_PAYLOAD_ZFS_ZIO_ERR, + FM_EREPORT_PAYLOAD_ZFS_ZIO_SIZE, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OFFSET, + FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY, + + /* logical zio criteriai (optional) */ + FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJSET, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJECT, + FM_EREPORT_PAYLOAD_ZFS_ZIO_BLKID, + FM_EREPORT_PAYLOAD_ZFS_ZIO_LEVEL, +}; + +#define CRITERIA_NAMES_COUNT ARRAY_SIZE(criteria_name) + +static void +print_ereport_line(nvlist_t *nvl) +{ + char *class; + int last = CRITERIA_NAMES_COUNT - 1; + + /* + * For the test case context, we only want to see 'io' and + * 'checksum' subclass. We skip 'data' to minimize the output. + */ + if (nvlist_lookup_string(nvl, FM_CLASS, &class) != 0 || + strstr(class, "ereport.fs.zfs.") == NULL || + strcmp(class, "ereport.fs.zfs.data") == 0) { + return; + } + + (void) printf("%s\t", class + strlen("ereport.fs.zfs.")); + + for (int i = 0; i < CRITERIA_NAMES_COUNT; i++) { + nvpair_t *nvp; + uint32_t i32 = 0; + uint64_t i64 = 0; + char *str = NULL; + + if (nvlist_lookup_nvpair(nvl, criteria_name[i], &nvp) != 0) { + /* print a proxy for optional criteria */ + (void) printf("--------"); + (void) printf("%c", i == last ? '\n' : '\t'); + continue; + } + + switch (nvpair_type(nvp)) { + case DATA_TYPE_STRING: + (void) nvpair_value_string(nvp, &str); + (void) printf("\"%s\"", str ? str : "<NULL>"); + break; + + case DATA_TYPE_INT32: + (void) nvpair_value_int32(nvp, (void *)&i32); + (void) printf("0x%06x", i32); + break; + + case DATA_TYPE_UINT32: + (void) nvpair_value_uint32(nvp, &i32); + (void) printf("0x%06x", i32); + break; + + case DATA_TYPE_INT64: + (void) nvpair_value_int64(nvp, (void *)&i64); + (void) printf("0x%06llx", (u_longlong_t)i64); + break; + + case DATA_TYPE_UINT64: + (void) nvpair_value_uint64(nvp, &i64); + if (strcmp(FM_EREPORT_PAYLOAD_ZFS_ZIO_OFFSET, + criteria_name[i]) == 0) + (void) printf("0x%010llx", (u_longlong_t)i64); + else + (void) printf("0x%06llx", (u_longlong_t)i64); + break; + default: + (void) printf("<unknown>"); + break; + } + (void) printf("%c", i == last ? '\n' : '\t'); + } +} + +static void +ereports_dump(libzfs_handle_t *zhdl, int zevent_fd) +{ + nvlist_t *nvl; + int ret, dropped; + + while (1) { + ret = zpool_events_next(zhdl, &nvl, &dropped, ZEVENT_NONBLOCK, + zevent_fd); + if (ret || nvl == NULL) + break; + if (dropped > 0) + (void) fprintf(stdout, "dropped %d events\n", dropped); + print_ereport_line(nvl); + (void) fflush(stdout); + nvlist_free(nvl); + } +} + +/* ARGSUSED */ +int +main(int argc, char **argv) +{ + libzfs_handle_t *hdl; + int fd; + + hdl = libzfs_init(); + if (hdl == NULL) { + (void) fprintf(stderr, "libzfs_init: %s\n", strerror(errno)); + exit(2); + } + fd = open(ZFS_DEV, O_RDWR); + if (fd < 0) { + (void) fprintf(stderr, "open: %s\n", strerror(errno)); + libzfs_fini(hdl); + exit(2); + } + + ereports_dump(hdl, fd); + + (void) close(fd); + libzfs_fini(hdl); + + return (0); +} diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/zpool_events_duplicates.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/zpool_events_duplicates.ksh new file mode 100644 index 000000000000..1ba7b1b34496 --- /dev/null +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_events/zpool_events_duplicates.ksh @@ -0,0 +1,155 @@ +#!/bin/ksh -p +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright (c) 2018 by Lawrence Livermore National Security, LLC. +# Copyright (c) 2020 by Delphix. All rights reserved. +# + +# DESCRIPTION: +# Verify that duplicate I/O ereport errors are not posted +# +# STRATEGY: +# 1. Create a mirror pool +# 2. Inject duplicate read/write IO errors and checksum errors +# 3. Verify there are no duplicate events being posted +# + +. $STF_SUITE/include/libtest.shlib + +verify_runnable "both" + +MOUNTDIR=$TEST_BASE_DIR/mount +FILEPATH=$MOUNTDIR/badfile +VDEV1=$TEST_BASE_DIR/vfile1 +VDEV2=$TEST_BASE_DIR/vfile2 +POOL=error_pool +FILESIZE="10M" +OLD_LEN_MAX=$(get_tunable ZEVENT_LEN_MAX) +RETAIN_MAX=$(get_tunable ZEVENT_RETAIN_MAX) + +EREPORTS="$STF_SUITE/tests/functional/cli_root/zpool_events/ereports" + +duplicates=false + +function cleanup +{ + log_must set_tunable64 ZEVENT_LEN_MAX $OLD_LEN_MAX + + log_must zinject -c all + if poolexists $POOL ; then + destroy_pool $POOL + fi + log_must rm -f $VDEV1 $VDEV2 +} + +log_assert "Duplicate I/O ereport errors are not posted" +log_note "zevent retain max setting: $RETAIN_MAX" + +log_onexit cleanup + +# Set our threshold high to avoid dropping events. +set_tunable64 ZEVENT_LEN_MAX 20000 + +log_must truncate -s $MINVDEVSIZE $VDEV1 $VDEV2 +log_must mkdir -p $MOUNTDIR + +# +# $1: test type - corrupt (checksum error), io +# $2: read, write +function do_dup_test +{ + ERR=$1 + RW=$2 + + log_note "Testing $ERR $RW ereports" + log_must zpool create -f -m $MOUNTDIR -o failmode=continue $POOL mirror $VDEV1 $VDEV2 + log_must zpool events -c + log_must zfs set compression=off $POOL + + if [ "$RW" == "read" ] ; then + log_must mkfile $FILESIZE $FILEPATH + + # unmount and mount filesystems to purge file from ARC + # to force reads to go through error inject handler + log_must zfs unmount $POOL + log_must zfs mount $POOL + + # all reads from this file get an error + if [ "$ERR" == "corrupt" ] ; then + log_must zinject -a -t data -e checksum -T read $FILEPATH + else + log_must zinject -a -t data -e io -T read $FILEPATH + fi + + # Read the file a few times to generate some + # duplicate errors of the same blocks + # shellcheck disable=SC2034 + for i in {1..15}; do + dd if=$FILEPATH of=/dev/null bs=128K > /dev/null 2>&1 + done + log_must zinject -c all + fi + + log_must zinject -d $VDEV1 -e $ERR -T $RW -f 100 $POOL + + if [ "$RW" == "write" ] ; then + log_must mkfile $FILESIZE $FILEPATH + log_must zpool sync $POOL + else + # scrub twice to generate some duplicates + log_must zpool scrub $POOL + log_must zpool wait -t scrub $POOL + log_must zpool scrub $POOL + log_must zpool wait -t scrub $POOL + fi + + log_must zinject -c all + + # Wait for the pool to settle down and finish resilvering (if + # necessary). We want the errors to stop incrementing before we + # check for duplicates. + zpool wait -t resilver $POOL + + ereports="$($EREPORTS | sort)" + actual=$(echo "$ereports" | wc -l) + unique=$(echo "$ereports" | uniq | wc -l) + log_note "$actual total $ERR $RW ereports where $unique were unique" + + if [ $actual -gt $unique ] ; then + log_note "UNEXPECTED -- $((actual-unique)) duplicate $ERR $RW ereports" + echo "$ereports" + duplicates=true + fi + + log_must zpool destroy $POOL +} + +do_dup_test "corrupt" "read" +do_dup_test "io" "read" +do_dup_test "io" "write" + +if $duplicates; then + log_fail "FAILED -- Duplicate I/O ereport errors encountered" +else + log_pass "Duplicate I/O ereport errors are not posted" +fi + diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace-o_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace-o_ashift.ksh index 0fc2c69ba143..1b18b1297a78 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace-o_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace-o_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -41,6 +42,7 @@ verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 rm -f $disk1 $disk2 } @@ -53,6 +55,14 @@ disk2=$TEST_BASE_DIR/disk2 log_must truncate -s $SIZE $disk1 log_must truncate -s $SIZE $disk2 +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) +# +# Set the file vdev's ashift to the max. Overriding +# the ashift using the -o ashift property should still +# be honored. +# +log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT 16 + typeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") for ashift in ${ashifts[@]} do diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace_prop_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace_prop_ashift.ksh index fbdd44ceb581..f076f26818eb 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace_prop_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_replace/replace_prop_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -43,6 +44,7 @@ verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 rm -f $disk1 $disk2 } @@ -55,6 +57,14 @@ disk2=$TEST_BASE_DIR/disk2 log_must truncate -s $SIZE $disk1 log_must truncate -s $SIZE $disk2 +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) +# +# Set the file vdev's ashift to the max. Overriding +# the ashift using the -o ashift property should still +# be honored. +# +log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT 16 + typeset ashifts=("9" "10" "11" "12" "13" "14" "15" "16") for ashift in ${ashifts[@]} do diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_set/zpool_set_ashift.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_set/zpool_set_ashift.ksh index 86e692fadafc..09b5f50d5e18 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_set/zpool_set_ashift.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zpool_set/zpool_set_ashift.ksh @@ -22,6 +22,7 @@ # # Copyright 2017, loli10K. All rights reserved. +# Copyright (c) 2020 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib @@ -41,6 +42,7 @@ verify_runnable "global" function cleanup { + log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT $orig_ashift destroy_pool $TESTPOOL1 rm -f $disk } @@ -52,6 +54,14 @@ log_onexit cleanup log_assert "zpool set can modify 'ashift' property" +orig_ashift=$(get_tunable VDEV_FILE_PHYSICAL_ASHIFT) +# +# Set the file vdev's ashift to the max. Overriding +# the ashift using the -o ashift property should still +# be honored. +# +log_must set_tunable64 VDEV_FILE_PHYSICAL_ASHIFT 16 + disk=$TEST_BASE_DIR/disk log_must mkfile $SIZE $disk log_must zpool create $TESTPOOL1 $disk diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_user/misc/misc.cfg b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_user/misc/misc.cfg index af867ded5374..cd0cf771e1fb 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_user/misc/misc.cfg +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_user/misc/misc.cfg @@ -41,7 +41,7 @@ if is_linux; then # zfs get/set subcommands - ordered as per the list above so we # can iterate over both sets in an array PROP_VALS="\ - posixacl on \ + posix on \ fletcher2 on on \ on legacy none on \ 128K none on \ @@ -49,7 +49,7 @@ if is_linux; then # these are an alternate set of property values PROP_ALTVALS="\ - noacl off \ + off off \ fletcher4 lzjb off \ off /tmp/zfstest 100M off \ 512 10m off \ @@ -66,7 +66,7 @@ elif is_freebsd; then # zfs get/set subcommands - ordered as per the list above so we # can iterate over both sets in an array PROP_VALS="\ - posixacl on \ + posix on \ fletcher2 on on \ on legacy none on \ 128K none on \ @@ -74,7 +74,7 @@ elif is_freebsd; then # these are an alternate set of property values PROP_ALTVALS="\ - noacl off \ + off off \ fletcher4 lzjb off \ off /tmp/zfstest 100M off \ 512 10m off \ diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/history/history_002_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/history/history_002_pos.ksh index 33fa33a4f516..b077603e828f 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/history/history_002_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/history/history_002_pos.ksh @@ -72,8 +72,8 @@ props=( mountpoint /history.$$ mountpoint legacy mountpoint none compression lz4 compression on compression off - compression lzjb acltype noacl - acltype posixacl xattr sa + compression lzjb acltype off + acltype posix xattr sa atime on atime off devices on devices off exec on exec off diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_012_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_012_pos.ksh index 0441f7ff32be..499c05fc9835 100755 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_012_pos.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_012_pos.ksh @@ -116,7 +116,7 @@ for fs in "$POOL" "$POOL/pclone" "$POOL/$FS" "$POOL/$FS/fs1" \ "$POOL/$FS/fs1/fs2" "$POOL/$FS/fs1/fclone" ; do rand_set_prop $fs aclinherit "discard" "noallow" "secure" "passthrough" rand_set_prop $fs checksum "on" "off" "fletcher2" "fletcher4" "sha256" - rand_set_prop $fs acltype "off" "noacl" "posixacl" + rand_set_prop $fs acltype "off" "posix" "noacl" "posixacl" rand_set_prop $fs atime "on" "off" rand_set_prop $fs checksum "on" "off" "fletcher2" "fletcher4" "sha256" rand_set_prop $fs compression "${compress_prop_vals[@]}" |