]> git.proxmox.com Git - mirror_zfs.git/blob - config/kernel-blkdev.m4
Linux 5.9 compat: add linux/blkdev.h include
[mirror_zfs.git] / config / kernel-blkdev.m4
1 dnl #
2 dnl # 2.6.38 API change,
3 dnl # Added blkdev_get_by_path()
4 dnl #
5 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH], [
6 ZFS_LINUX_TEST_SRC([blkdev_get_by_path], [
7 #include <linux/fs.h>
8 #include <linux/blkdev.h>
9 ], [
10 struct block_device *bdev __attribute__ ((unused)) = NULL;
11 const char *path = "path";
12 fmode_t mode = 0;
13 void *holder = NULL;
14
15 bdev = blkdev_get_by_path(path, mode, holder);
16 ])
17 ])
18
19 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [
20 AC_MSG_CHECKING([whether blkdev_get_by_path() exists])
21 ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [
22 AC_MSG_RESULT(yes)
23 ], [
24 ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()])
25 ])
26 ])
27
28 dnl #
29 dnl # 2.6.38 API change,
30 dnl # Added blkdev_put()
31 dnl #
32 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [
33 ZFS_LINUX_TEST_SRC([blkdev_put], [
34 #include <linux/fs.h>
35 #include <linux/blkdev.h>
36 ], [
37 struct block_device *bdev = NULL;
38 fmode_t mode = 0;
39
40 blkdev_put(bdev, mode);
41 ])
42 ])
43
44 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [
45 AC_MSG_CHECKING([whether blkdev_put() exists])
46 ZFS_LINUX_TEST_RESULT([blkdev_put], [
47 AC_MSG_RESULT(yes)
48 ], [
49 ZFS_LINUX_TEST_ERROR([blkdev_put()])
50 ])
51 ])
52
53 dnl #
54 dnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the
55 dnl # 3.10.0 CentOS 7.x enterprise kernels.
56 dnl #
57 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [
58 ZFS_LINUX_TEST_SRC([blkdev_reread_part], [
59 #include <linux/fs.h>
60 #include <linux/blkdev.h>
61 ], [
62 struct block_device *bdev = NULL;
63 int error;
64
65 error = blkdev_reread_part(bdev);
66 ])
67 ])
68
69 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [
70 AC_MSG_CHECKING([whether blkdev_reread_part() exists])
71 ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [
72 AC_MSG_RESULT(yes)
73 AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1,
74 [blkdev_reread_part() exists])
75 ], [
76 AC_MSG_RESULT(no)
77 ])
78 ])
79
80 dnl #
81 dnl # 2.6.22 API change
82 dnl # Single argument invalidate_bdev()
83 dnl #
84 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [
85 ZFS_LINUX_TEST_SRC([invalidate_bdev], [
86 #include <linux/buffer_head.h>
87 #include <linux/blkdev.h>
88 ],[
89 struct block_device *bdev = NULL;
90 invalidate_bdev(bdev);
91 ])
92 ])
93
94 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [
95 AC_MSG_CHECKING([whether invalidate_bdev() exists])
96 ZFS_LINUX_TEST_RESULT([invalidate_bdev], [
97 AC_MSG_RESULT(yes)
98 ],[
99 ZFS_LINUX_TEST_ERROR([invalidate_bdev()])
100 ])
101 ])
102
103 dnl #
104 dnl # 2.6.27, lookup_bdev() was exported.
105 dnl # 4.4.0-6.21 - lookup_bdev() takes 2 arguments.
106 dnl #
107 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [
108 ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [
109 #include <linux/fs.h>
110 #include <linux/blkdev.h>
111 ], [
112 lookup_bdev(NULL);
113 ])
114
115 ZFS_LINUX_TEST_SRC([lookup_bdev_2args], [
116 #include <linux/fs.h>
117 ], [
118 lookup_bdev(NULL, FMODE_READ);
119 ])
120 ])
121
122 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [
123 AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
124 ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg],
125 [lookup_bdev], [fs/block_dev.c], [
126 AC_MSG_RESULT(yes)
127 AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1,
128 [lookup_bdev() wants 1 arg])
129 ], [
130 AC_MSG_RESULT(no)
131
132 AC_MSG_CHECKING([whether lookup_bdev() wants 2 args])
133 ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_2args],
134 [lookup_bdev], [fs/block_dev.c], [
135 AC_MSG_RESULT(yes)
136 AC_DEFINE(HAVE_2ARGS_LOOKUP_BDEV, 1,
137 [lookup_bdev() wants 2 args])
138 ], [
139 ZFS_LINUX_TEST_ERROR([lookup_bdev()])
140 ])
141 ])
142 ])
143
144 dnl #
145 dnl # 2.6.30 API change
146 dnl #
147 dnl # The bdev_physical_block_size() interface was added to provide a way
148 dnl # to determine the smallest write which can be performed without a
149 dnl # read-modify-write operation.
150 dnl #
151 dnl # Unfortunately, this interface isn't entirely reliable because
152 dnl # drives are sometimes known to misreport this value.
153 dnl #
154 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
155 ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [
156 #include <linux/blkdev.h>
157 ],[
158 struct block_device *bdev __attribute__ ((unused)) = NULL;
159 bdev_physical_block_size(bdev);
160 ])
161 ])
162
163 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
164 AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
165 ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [
166 AC_MSG_RESULT(yes)
167 ],[
168 ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()])
169 ])
170 ])
171
172 dnl #
173 dnl # 2.6.30 API change
174 dnl # Added bdev_logical_block_size().
175 dnl #
176 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
177 ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [
178 #include <linux/blkdev.h>
179 ],[
180 struct block_device *bdev __attribute__ ((unused)) = NULL;
181 bdev_logical_block_size(bdev);
182 ])
183 ])
184
185 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
186 AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
187 ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [
188 AC_MSG_RESULT(yes)
189 ],[
190 ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()])
191 ])
192 ])
193
194 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
195 ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
196 ZFS_AC_KERNEL_SRC_BLKDEV_PUT
197 ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
198 ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
199 ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
200 ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
201 ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
202 ])
203
204 AC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
205 ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
206 ZFS_AC_KERNEL_BLKDEV_PUT
207 ZFS_AC_KERNEL_BLKDEV_REREAD_PART
208 ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
209 ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
210 ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
211 ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
212 ])