]>
Commit | Line | Data |
---|---|---|
a584ef26 | 1 | dnl # |
608f8749 | 2 | dnl # Check for direct IO interfaces. |
a584ef26 | 3 | dnl # |
608f8749 BB |
4 | AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_DIRECT_IO], [ |
5 | ZFS_LINUX_TEST_SRC([direct_io_iter], [ | |
a584ef26 BB |
6 | #include <linux/fs.h> |
7 | ||
8 | ssize_t test_direct_IO(struct kiocb *kiocb, | |
9 | struct iov_iter *iter) { return 0; } | |
10 | ||
11 | static const struct address_space_operations | |
12 | aops __attribute__ ((unused)) = { | |
13 | .direct_IO = test_direct_IO, | |
14 | }; | |
608f8749 | 15 | ],[]) |
a584ef26 | 16 | |
608f8749 | 17 | ZFS_LINUX_TEST_SRC([direct_io_iter_offset], [ |
a584ef26 BB |
18 | #include <linux/fs.h> |
19 | ||
20 | ssize_t test_direct_IO(struct kiocb *kiocb, | |
21 | struct iov_iter *iter, loff_t offset) { return 0; } | |
22 | ||
23 | static const struct address_space_operations | |
24 | aops __attribute__ ((unused)) = { | |
25 | .direct_IO = test_direct_IO, | |
26 | }; | |
608f8749 | 27 | ],[]) |
a584ef26 | 28 | |
608f8749 | 29 | ZFS_LINUX_TEST_SRC([direct_io_iter_rw_offset], [ |
a584ef26 BB |
30 | #include <linux/fs.h> |
31 | ||
32 | ssize_t test_direct_IO(int rw, struct kiocb *kiocb, | |
33 | struct iov_iter *iter, loff_t offset) { return 0; } | |
34 | ||
35 | static const struct address_space_operations | |
36 | aops __attribute__ ((unused)) = { | |
37 | .direct_IO = test_direct_IO, | |
38 | }; | |
608f8749 | 39 | ],[]) |
a584ef26 | 40 | |
608f8749 | 41 | ZFS_LINUX_TEST_SRC([direct_io_iovec], [ |
a584ef26 BB |
42 | #include <linux/fs.h> |
43 | ||
44 | ssize_t test_direct_IO(int rw, struct kiocb *kiocb, | |
45 | const struct iovec *iov, loff_t offset, | |
46 | unsigned long nr_segs) { return 0; } | |
47 | ||
48 | static const struct address_space_operations | |
49 | aops __attribute__ ((unused)) = { | |
50 | .direct_IO = test_direct_IO, | |
51 | }; | |
608f8749 | 52 | ],[]) |
a584ef26 BB |
53 | ]) |
54 | ||
55 | AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO], [ | |
608f8749 BB |
56 | dnl # |
57 | dnl # Linux 4.6.x API change | |
58 | dnl # | |
59 | AC_MSG_CHECKING([whether aops->direct_IO() uses iov_iter]) | |
60 | ZFS_LINUX_TEST_RESULT([direct_io_iter], [ | |
61 | AC_MSG_RESULT([yes]) | |
62 | AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER, 1, | |
63 | [aops->direct_IO() uses iov_iter without rw]) | |
64 | ],[ | |
65 | AC_MSG_RESULT([no]) | |
a584ef26 | 66 | |
608f8749 BB |
67 | dnl # |
68 | dnl # Linux 4.1.x API change | |
69 | dnl # | |
70 | AC_MSG_CHECKING( | |
71 | [whether aops->direct_IO() uses offset]) | |
72 | ZFS_LINUX_TEST_RESULT([direct_io_iter_offset], [ | |
73 | AC_MSG_RESULT([yes]) | |
74 | AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_OFFSET, 1, | |
75 | [aops->direct_IO() uses iov_iter with offset]) | |
76 | ||
77 | ],[ | |
78 | AC_MSG_RESULT([no]) | |
79 | ||
80 | dnl # | |
81 | dnl # Linux 3.16.x API change | |
82 | dnl # | |
83 | AC_MSG_CHECKING( | |
84 | [whether aops->direct_IO() uses rw and offset]) | |
85 | ZFS_LINUX_TEST_RESULT([direct_io_iter_rw_offset], [ | |
86 | AC_MSG_RESULT([yes]) | |
87 | AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET, 1, | |
88 | [aops->direct_IO() uses iov_iter with ] | |
89 | [rw and offset]) | |
90 | ],[ | |
91 | AC_MSG_RESULT([no]) | |
92 | ||
93 | dnl # | |
94 | dnl # Ancient Linux API (predates git) | |
95 | dnl # | |
96 | AC_MSG_CHECKING( | |
97 | [whether aops->direct_IO() uses iovec]) | |
98 | ZFS_LINUX_TEST_RESULT([direct_io_iovec], [ | |
99 | AC_MSG_RESULT([yes]) | |
100 | AC_DEFINE(HAVE_VFS_DIRECT_IO_IOVEC, 1, | |
101 | [aops->direct_IO() uses iovec]) | |
102 | ],[ | |
103 | ZFS_LINUX_TEST_ERROR([direct IO]) | |
104 | AC_MSG_RESULT([no]) | |
105 | ]) | |
106 | ]) | |
107 | ]) | |
108 | ]) | |
a584ef26 | 109 | ]) |