]> granicus.if.org Git - zfs/commitdiff
Develop tests for issues #5866 and #8858
authorPaul Zuchowski <31706010+PaulZ-98@users.noreply.github.com>
Sat, 27 Jul 2019 00:52:13 +0000 (20:52 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 27 Jul 2019 00:52:13 +0000 (17:52 -0700)
Provide zfstest coverage for these two issues which
were a panic accessing extended attributes and
a problem comparing 64 bit and 32 bit generation
numbers.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Paul Zuchowski <pzuchowski@datto.com>
Issue #5866
Issue #8858
Closes #8978

configure.ac
tests/runfiles/linux.run
tests/zfs-tests/cmd/Makefile.am
tests/zfs-tests/cmd/online_recv/.gitignore [new file with mode: 0644]
tests/zfs-tests/cmd/online_recv/Makefile.am [new file with mode: 0644]
tests/zfs-tests/cmd/online_recv/online_recv.c [new file with mode: 0644]
tests/zfs-tests/include/commands.cfg
tests/zfs-tests/tests/functional/xattr/Makefile.am
tests/zfs-tests/tests/functional/xattr/blockfiles/Makefile.am [new file with mode: 0644]
tests/zfs-tests/tests/functional/xattr/blockfiles/zfs-txg-number.dat.bz2 [new file with mode: 0644]
tests/zfs-tests/tests/functional/xattr/xattr_zfs_zreget.ksh [new file with mode: 0755]

index 0522185e4dd9650c2b6fdbb7b838fe5ab6110744..da25b521ea2c661e8f8367f8d4207575e2cbb773 100644 (file)
@@ -184,6 +184,7 @@ AC_CONFIG_FILES([
        tests/zfs-tests/cmd/mmap_libaio/Makefile
        tests/zfs-tests/cmd/mmapwrite/Makefile
        tests/zfs-tests/cmd/nvlist_to_lua/Makefile
+       tests/zfs-tests/cmd/online_recv/Makefile
        tests/zfs-tests/cmd/randfree_file/Makefile
        tests/zfs-tests/cmd/randwritecomp/Makefile
        tests/zfs-tests/cmd/readmmap/Makefile
@@ -344,6 +345,7 @@ AC_CONFIG_FILES([
        tests/zfs-tests/tests/functional/vdev_zaps/Makefile
        tests/zfs-tests/tests/functional/write_dirs/Makefile
        tests/zfs-tests/tests/functional/xattr/Makefile
+       tests/zfs-tests/tests/functional/xattr/blockfiles/Makefile
        tests/zfs-tests/tests/functional/zvol/Makefile
        tests/zfs-tests/tests/functional/zvol/zvol_cli/Makefile
        tests/zfs-tests/tests/functional/zvol/zvol_ENOSPC/Makefile
index c554e578d53aad4a300c0225ea5badcb2ddc6de4..6202aacaaf885424967b4099ee6a96702926db74 100644 (file)
@@ -912,7 +912,7 @@ tags = ['functional', 'write_dirs']
 tests = ['xattr_001_pos', 'xattr_002_neg', 'xattr_003_neg', 'xattr_004_pos',
     'xattr_005_pos', 'xattr_006_pos', 'xattr_007_neg', 'xattr_008_pos',
     'xattr_009_neg', 'xattr_010_neg', 'xattr_011_pos', 'xattr_012_pos',
-    'xattr_013_pos']
+    'xattr_013_pos', 'xattr_zfs_zreget']
 tags = ['functional', 'xattr']
 
 [tests/functional/zvol/zvol_ENOSPC]
index 09c59f591a833d855ef74117b78f95b2d8338b13..6161f632a8da0fd03840f7f5d5b9bd0988297842 100644 (file)
@@ -19,6 +19,7 @@ SUBDIRS = \
        mmap_libaio \
        mmapwrite \
        nvlist_to_lua \
+       online_recv \
        randfree_file \
        randwritecomp \
        readmmap \
diff --git a/tests/zfs-tests/cmd/online_recv/.gitignore b/tests/zfs-tests/cmd/online_recv/.gitignore
new file mode 100644 (file)
index 0000000..2528e5e
--- /dev/null
@@ -0,0 +1 @@
+/online_recv
diff --git a/tests/zfs-tests/cmd/online_recv/Makefile.am b/tests/zfs-tests/cmd/online_recv/Makefile.am
new file mode 100644 (file)
index 0000000..8f89006
--- /dev/null
@@ -0,0 +1,15 @@
+include $(top_srcdir)/config/Rules.am
+
+pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin
+
+DEFAULT_INCLUDES += \
+       -I$(top_srcdir)/include \
+       -I$(top_srcdir)/lib/libspl/include
+
+pkgexec_PROGRAMS = online_recv
+
+online_recv_SOURCES = online_recv.c
+online_recv_LDADD = \
+       $(top_builddir)/lib/libspl/libspl.la \
+       $(top_builddir)/lib/libnvpair/libnvpair.la \
+       $(top_builddir)/lib/libzfs_core/libzfs_core.la
diff --git a/tests/zfs-tests/cmd/online_recv/online_recv.c b/tests/zfs-tests/cmd/online_recv/online_recv.c
new file mode 100644 (file)
index 0000000..97080dd
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * 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) 2019 by Datto, Inc. All rights reserved.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <libzfs_core.h>
+
+int zfs_fd;
+
+/*
+ * Use libzfs_core to do a "zfs receive".  This allows us to
+ * bypass certain checks in the zfs command utility and
+ * perform an online receive into an existing filesystem for
+ * testing purposes.
+ */
+int
+main(int argc, const char *argv[])
+{
+       int err = 0;
+
+       if (argc < 2) {
+               fprintf(stderr, "usage: online_recv <destination>\n");
+               exit(2);
+       }
+
+       (void) libzfs_core_init();
+
+       err = lzc_receive(argv[1], NULL, NULL, B_TRUE, B_FALSE, 0);
+
+       libzfs_core_fini();
+
+       return (err);
+}
index f8ad022468b143d7b4f8af65c4563500d4a7a0bf..d61253c304d56aebee454303bc689eae1dfc460e 100644 (file)
@@ -175,6 +175,7 @@ export ZFSTEST_FILES='chg_usr_exec
     mmap_libaio
     mmapwrite
     nvlist_to_lua
+    online_recv
     randfree_file
     randwritecomp
     readmmap
index 17001885f1ca1101744f0e7f169b234aa32922ae..9e8db6f1f4c404db5ddc789f422cf99c3badafb0 100644 (file)
@@ -1,3 +1,5 @@
+SUBDIRS = blockfiles
+
 pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/xattr
 dist_pkgdata_SCRIPTS = \
        setup.ksh \
@@ -14,7 +16,8 @@ dist_pkgdata_SCRIPTS = \
        xattr_010_neg.ksh \
        xattr_011_pos.ksh \
        xattr_012_pos.ksh \
-       xattr_013_pos.ksh
+       xattr_013_pos.ksh \
+       xattr_zfs_zreget.ksh
 
 dist_pkgdata_DATA = \
        xattr_common.kshlib \
diff --git a/tests/zfs-tests/tests/functional/xattr/blockfiles/Makefile.am b/tests/zfs-tests/tests/functional/xattr/blockfiles/Makefile.am
new file mode 100644 (file)
index 0000000..dbdeb04
--- /dev/null
@@ -0,0 +1,3 @@
+pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/xattr/blockfiles
+dist_pkgdata_DATA = \
+       zfs-txg-number.dat.bz2
diff --git a/tests/zfs-tests/tests/functional/xattr/blockfiles/zfs-txg-number.dat.bz2 b/tests/zfs-tests/tests/functional/xattr/blockfiles/zfs-txg-number.dat.bz2
new file mode 100644 (file)
index 0000000..c3891ee
Binary files /dev/null and b/tests/zfs-tests/tests/functional/xattr/blockfiles/zfs-txg-number.dat.bz2 differ
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_zfs_zreget.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_zfs_zreget.ksh
new file mode 100755 (executable)
index 0000000..a93c6c4
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/ksh -p
+#
+# 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) 2019 Datto, Inc. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+
+#
+# DESCRIPTION:
+# See ZoL issues #5866 and #8858.  This test will ensure the fixes for
+# these specific issues have no regression.
+#
+# Exercise the functions zfs_suspend_fs / zfs_resume_fs / zfs_rezget.
+# The test will ensure that we reach zfs code that compares file
+# generation numbers and fetches extended attributes.
+#
+# STRATEGY:
+# 1. Import a pool that has txg number > 2^32.
+# 2. Take snapshot and do send with an online receive.
+# 3. EIO is expected when accessing the received file-system.
+# 4. Access extended attribute. (previously this would panic)
+# 5. Take second snapshot, write some data.
+# 6. Rollback.
+# 7. Access the resulting file-system. (previously every accesss would give EIO)
+#
+
+verify_runnable "global"
+
+function cleanup
+{
+       log_must zpool destroy -f txg-number-pool
+       log_must rm $TEST_BASE_DIR/zfs-txg-number.dat
+}
+
+
+log_assert "zfs can handle suspend/resume with large generation number"
+
+log_onexit cleanup
+
+log_must bzcat \
+    $STF_SUITE/tests/functional/xattr/blockfiles/zfs-txg-number.dat.bz2 \
+    >$TEST_BASE_DIR/zfs-txg-number.dat
+
+log_must zpool import txg-number-pool -d $TEST_BASE_DIR
+
+log_must zfs create txg-number-pool/fs1
+log_must zfs snapshot txg-number-pool/fs1@snap1
+log_must zfs create txg-number-pool/fs2
+
+log_must eval "zfs send txg-number-pool/fs1@snap1 |
+    online_recv txg-number-pool/fs2@snap1"
+
+log_mustnot stat /txg-number-pool/fs2
+log_mustnot attr -l /txg-number-pool/fs2
+
+log_must zfs snapshot txg-number-pool/fs1@snap2
+log_must fill_fs /txg-number-pool/fs1 2 2 1024 1 R
+log_must sync
+log_must zfs rollback txg-number-pool/fs1@snap2
+
+log_must stat /txg-number-pool/fs1
+
+log_pass "suspend/resume works with large generation number"