aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/tests/zfs-tests/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/openzfs/tests/zfs-tests/cmd')
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am4
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/btree_test.c4
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/crypto_test.c2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/draid.c2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/idmap_util.c2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mktree.c2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_ftruncate.c85
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_write_sync.c84
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mmapwrite.c4
10 files changed, 183 insertions, 8 deletions
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore b/sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore
index e9a6f8f0ac17..62f1684acfb4 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore
@@ -23,10 +23,12 @@
/mkfiles
/mktree
/mmap_exec
+/mmap_ftruncate
/mmap_libaio
/mmap_seek
/mmap_sync
/mmapwrite
+/mmap_write_sync
/nvlist_to_lua
/randfree_file
/randwritecomp
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am
index 909a72c43d80..85c3cf3c35a8 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am
@@ -72,7 +72,9 @@ scripts_zfs_tests_bin_PROGRAMS += %D%/mkbusy %D%/mkfile %D%/mkfiles %D%/mktree
%C%_mkfile_LDADD = $(LTLIBINTL)
-scripts_zfs_tests_bin_PROGRAMS += %D%/mmap_exec %D%/mmap_seek %D%/mmap_sync %D%/mmapwrite %D%/readmmap
+scripts_zfs_tests_bin_PROGRAMS += \
+ %D%/mmap_exec %D%/mmap_ftruncate %D%/mmap_seek \
+ %D%/mmap_sync %D%/mmapwrite %D%/readmmap %D%/mmap_write_sync
%C%_mmapwrite_LDADD = -lpthread
if WANT_MMAP_LIBAIO
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/btree_test.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/btree_test.c
index e7b80d01efaa..f8948a61833d 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/btree_test.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/btree_test.c
@@ -207,7 +207,7 @@ insert_find_remove(zfs_btree_t *bt, char *why)
"Found removed value (%llu)\n", *p);
return (1);
}
- ASSERT3S(zfs_btree_numnodes(bt), ==, 0);
+ ASSERT0(zfs_btree_numnodes(bt));
zfs_btree_verify(bt);
return (0);
@@ -279,7 +279,7 @@ drain_tree(zfs_btree_t *bt, char *why)
node = avl_last(&avl);
ASSERT3U(node->data, ==, *(uint64_t *)zfs_btree_last(bt, NULL));
}
- ASSERT3S(zfs_btree_numnodes(bt), ==, 0);
+ ASSERT0(zfs_btree_numnodes(bt));
void *avl_cookie = NULL;
while ((node = avl_destroy_nodes(&avl, &avl_cookie)) != NULL)
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/crypto_test.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/crypto_test.c
index e08003f80464..cbebd33e0bf6 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/crypto_test.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/crypto_test.c
@@ -529,6 +529,8 @@ static const char *aes_gcm_impl[][2] = {
{ "aesni", "pclmulqdq" },
{ "x86_64", "avx" },
{ "aesni", "avx" },
+ { "x86_64", "avx2" },
+ { "aesni", "avx2" },
};
/* signature of function to call after setting implementation params */
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/draid.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/draid.c
index 8d0bdc450f80..2c1ab1b9bec3 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/draid.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/draid.c
@@ -204,7 +204,7 @@ write_map(const char *filename, nvlist_t *allcfgs)
error = errno;
free(buf);
free(tmpname);
- return (errno);
+ return (error);
}
ssize_t rc, bytes = 0;
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/idmap_util.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/idmap_util.c
index 416e80714f9b..f332677f520c 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/idmap_util.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/idmap_util.c
@@ -301,7 +301,7 @@ static int
write_idmap(pid_t pid, char *buf, size_t buf_size, idmap_type_t type)
{
char path[PATH_MAX];
- int fd = -EBADF;
+ int fd;
int ret;
(void) snprintf(path, sizeof (path), "/proc/%d/%cid_map",
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mktree.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/mktree.c
index 297cf6dea415..9a5253468bd2 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/mktree.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mktree.c
@@ -152,7 +152,7 @@ getfdname(char *pdir, char type, int level, int dir, int file)
static void
crtfile(char *pname)
{
- int fd = -1;
+ int fd;
int i, size;
const char *context = "0123456789ABCDF";
char *pbuf;
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_ftruncate.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_ftruncate.c
new file mode 100644
index 000000000000..91cdfe3715e6
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_ftruncate.c
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: CDDL-1.0
+/*
+ * 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://opensource.org/licenses/CDDL-1.0.
+ * 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) 2025, Klara, Inc.
+ */
+
+/*
+ * Tests async writeback behaviour. Creates a file, maps it into memory, and
+ * dirties every page within it. Then, calls ftruncate() to collapse the file
+ * back down to 0. This causes the kernel to begin writeback on the dirty
+ * pages so they can be freed, before it can complete the ftruncate() call.
+ * None of these are sync operations, so they should avoid the various "force
+ * flush" codepaths.
+ */
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define _pdfail(f, l, s) \
+ do { perror("[" f "#" #l "] " s); exit(2); } while (0)
+#define pdfail(str) _pdfail(__FILE__, __LINE__, str)
+
+int
+main(int argc, char **argv) {
+ if (argc != 3) {
+ printf("usage: mmap_ftruncate <file> <size>\n");
+ exit(2);
+ }
+
+ const char *file = argv[1];
+
+ char *end;
+ off_t sz = strtoull(argv[2], &end, 0);
+ if (end == argv[2] || *end != '\0' || sz == 0) {
+ fprintf(stderr, "E: invalid size");
+ exit(2);
+ }
+
+ int fd = open(file, O_CREAT|O_TRUNC|O_RDWR, S_IRUSR|S_IWUSR);
+ if (fd < 0)
+ pdfail("open");
+
+ if (ftruncate(fd, sz) < 0)
+ pdfail("ftruncate");
+
+ char *p = mmap(NULL, sz, PROT_WRITE, MAP_SHARED, fd, 0);
+ if (p == MAP_FAILED)
+ pdfail("mmap");
+
+ for (off_t off = 0; off < sz; off += 4096)
+ p[off] = 1;
+
+ if (ftruncate(fd, 0) < 0)
+ pdfail("ftruncate");
+
+ if (munmap(p, sz) < 0)
+ pdfail("munmap");
+
+ close(fd);
+ return (0);
+}
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_write_sync.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_write_sync.c
new file mode 100644
index 000000000000..ad5e37f24960
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_write_sync.c
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: CDDL-1.0
+/*
+ * 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 https://opensource.org/licenses/CDDL-1.0.
+ * 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) 2025, Klara, Inc.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#define PAGES (8)
+
+int
+main(int argc, char **argv)
+{
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s <filename>\n", argv[0]);
+ exit(1);
+ }
+
+ long page_size = sysconf(_SC_PAGESIZE);
+ if (page_size < 0) {
+ perror("sysconf");
+ exit(2);
+ }
+ size_t map_size = page_size * PAGES;
+
+ int fd = open(argv[1], O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
+ if (fd < 0) {
+ perror("open");
+ exit(2);
+ }
+
+ if (ftruncate(fd, map_size) < 0) {
+ perror("ftruncate");
+ close(fd);
+ exit(2);
+ }
+
+ uint64_t *p =
+ mmap(NULL, map_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (p == MAP_FAILED) {
+ perror("mmap");
+ close(fd);
+ exit(2);
+ }
+
+ for (int i = 0; i < (map_size / sizeof (uint64_t)); i++)
+ p[i] = 0x0123456789abcdef;
+
+ if (msync(p, map_size, MS_SYNC) < 0) {
+ perror("msync");
+ munmap(p, map_size);
+ close(fd);
+ exit(3);
+ }
+
+ munmap(p, map_size);
+ close(fd);
+ exit(0);
+}
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mmapwrite.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmapwrite.c
index 61fcdc35af13..31d61ffb07d0 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/mmapwrite.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mmapwrite.c
@@ -59,7 +59,7 @@ static void *
normal_writer(void *filename)
{
char *file_path = filename;
- int fd = -1;
+ int fd;
ssize_t write_num = 0;
int page_size = getpagesize();
@@ -93,7 +93,7 @@ normal_writer(void *filename)
static void *
map_writer(void *filename)
{
- int fd = -1;
+ int fd;
int ret = 0;
char *buf = NULL;
int page_size = getpagesize();