[PATCH 3/4] test: add testing for FS_IOC_FIEMAP
jeffm at suse.com
jeffm at suse.com
Wed May 18 22:09:41 UTC 2016
From: Jeff Mahoney <jeffm at suse.com>
* tests/file_ioctl.c: New file.
* tests/file_ioctl.test: New file.
* tests/Makefile.am: Add it.
This is limited to FIEMAP. FICLONE* and FIDEDUPERANGE originated in
btrfs and will be tested there.
---
tests/Makefile.am | 2 ++
tests/file_ioctl.c | 32 ++++++++++++++++++++++++++++++++
tests/file_ioctl.test | 5 +++++
tests/tests.h | 19 +++++++++++++++++++
4 files changed, 58 insertions(+)
create mode 100644 tests/file_ioctl.c
create mode 100755 tests/file_ioctl.test
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 64c1879..77ca08f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -107,6 +107,7 @@ check_PROGRAMS = \
fcntl64 \
fdatasync \
file_handle \
+ file_ioctl \
filter-unavailable \
flock \
fork-f \
@@ -396,6 +397,7 @@ DECODER_TESTS = \
fcntl64.test \
fdatasync.test \
file_handle.test \
+ file_ioctl.test \
flock.test \
fstat.test \
fstat64.test \
diff --git a/tests/file_ioctl.c b/tests/file_ioctl.c
new file mode 100644
index 0000000..be064db
--- /dev/null
+++ b/tests/file_ioctl.c
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <linux/fiemap.h>
+#include <linux/fs.h>
+#include "tests.h"
+#include "xlat.h"
+
+#include "xlat/fiemap_flags.h"
+
+static void
+test_fiemap(void)
+{
+ struct fiemap args = {};
+ printf("ioctl(-1, FS_IOC_FIEMAP, {fm_start=%" PRI__u64
+ ", fm_length=%" PRI__u64", fm_flags=",
+ args.fm_start, args.fm_length);
+ printflags(fiemap_flags, args.fm_flags, "FIEMAP_FLAG_???");
+ printf(", fm_extent_count=%u})", args.fm_extent_count);
+ ioctl(-1, FS_IOC_FIEMAP, &args);
+ printf(" = -1 EBADF (%m)\n");
+}
+
+/* clone and dedupe ioctls are in btrfs.c since they originated there */
+
+int
+main(int argc, char *argv[])
+{
+ test_fiemap();
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
diff --git a/tests/file_ioctl.test b/tests/file_ioctl.test
new file mode 100755
index 0000000..2121b5b
--- /dev/null
+++ b/tests/file_ioctl.test
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Check basic btrfs ioctl decoding.
+
+. "${srcdir=.}/ioctl.test"
diff --git a/tests/tests.h b/tests/tests.h
index 9909222..fdac6b4 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -107,4 +107,23 @@ int printxval(const struct xlat *, const unsigned long long, const char *);
# define SKIP_MAIN_UNDEFINED(arg) \
int main(void) { error_msg_and_skip("undefined: %s", arg); }
+/*
+ * The kernel used to define 64-bit types on 64-bit systems on a per-arch
+ * basis. Some architectures would use unsigned long and others would use
+ * unsigned long long. These types were exported as part of the
+ * kernel-userspace ABI and now must be maintained forever. This matches
+ * what the kernel exports for each architecture so we don't need to cast
+ * every printing of __u64 or __s64 to stdint types.
+ */
+#if SIZEOF_LONG == 4
+# define PRI__64 "ll"
+#elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
+# define PRI__64 "l"
+#else
+# define PRI__64 "ll"
+#endif
+
+#define PRI__d64 PRI__64"d"
+#define PRI__u64 PRI__64"u"
+#define PRI__x64 PRI__64"x"
#endif
--
1.8.5.6
More information about the Strace-devel
mailing list