aboutsummaryrefslogtreecommitdiffstats
path: root/tests/zfs-tests/cmd/getversion.c
diff options
context:
space:
mode:
authorнаб <[email protected]>2022-03-22 20:09:47 +0100
committerBrian Behlendorf <[email protected]>2022-04-01 17:58:23 -0700
commite294acdba879bf86e7253beeaaa5f098b92157d7 (patch)
tree3169ec6a760eaa4ffbee9b21db5d990646a12915 /tests/zfs-tests/cmd/getversion.c
parentcaeab993ec77ce15bcb25484017ff18f18a6550b (diff)
tests: cmd: don't recurse
This confers an >10x speedup on t/z-t/cmd builds (12s -> 1.1s), gets rid of 23 redundant identical automake specs and gitignores, and groups the binaries with their common headers Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: John Kennedy <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: Ahelenia Ziemiańska <[email protected]> Closes #13259
Diffstat (limited to 'tests/zfs-tests/cmd/getversion.c')
-rw-r--r--tests/zfs-tests/cmd/getversion.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/zfs-tests/cmd/getversion.c b/tests/zfs-tests/cmd/getversion.c
new file mode 100644
index 000000000..62c1c5b6a
--- /dev/null
+++ b/tests/zfs-tests/cmd/getversion.c
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+/*
+ * Copyright 2021 iXsystems, Inc.
+ */
+
+/*
+ * FreeBSD and macOS expose file generation number through stat(2) and stat(1).
+ * Linux exposes it instead through an ioctl.
+ */
+
+#include <sys/ioctl.h>
+#include <sys/fcntl.h>
+#include <linux/fs.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, const char * const argv[])
+{
+ if (argc != 2)
+ errx(EXIT_FAILURE, "usage: %s filename", argv[0]);
+
+ int fd = open(argv[1], O_RDONLY);
+ if (fd == -1)
+ err(EXIT_FAILURE, "failed to open %s", argv[1]);
+
+ int gen = 0;
+ if (ioctl(fd, FS_IOC_GETVERSION, &gen) == -1)
+ err(EXIT_FAILURE, "FS_IOC_GETVERSION failed");
+
+ (void) close(fd);
+
+ (void) printf("%d\n", gen);
+
+ return (EXIT_SUCCESS);
+}