xref: /freebsd/sys/contrib/openzfs/config/kernel-blkdev.m4 (revision 7877fdebeeb35fad1cbbafce22598b1bdf97c786)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 2.6.38 API change,
3eda14cbcSMatt Macydnl # Added blkdev_get_by_path()
4eda14cbcSMatt Macydnl #
5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH], [
6eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkdev_get_by_path], [
7eda14cbcSMatt Macy		#include <linux/fs.h>
8eda14cbcSMatt Macy		#include <linux/blkdev.h>
9eda14cbcSMatt Macy	], [
10eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
11eda14cbcSMatt Macy		const char *path = "path";
12eda14cbcSMatt Macy		fmode_t mode = 0;
13eda14cbcSMatt Macy		void *holder = NULL;
14eda14cbcSMatt Macy
15eda14cbcSMatt Macy		bdev = blkdev_get_by_path(path, mode, holder);
16eda14cbcSMatt Macy	])
17eda14cbcSMatt Macy])
18eda14cbcSMatt Macy
19eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [
20eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkdev_get_by_path() exists])
21eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [
22eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
23eda14cbcSMatt Macy	], [
24eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()])
25eda14cbcSMatt Macy	])
26eda14cbcSMatt Macy])
27eda14cbcSMatt Macy
28eda14cbcSMatt Macydnl #
29eda14cbcSMatt Macydnl # 2.6.38 API change,
30eda14cbcSMatt Macydnl # Added blkdev_put()
31eda14cbcSMatt Macydnl #
32eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [
33eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkdev_put], [
34eda14cbcSMatt Macy		#include <linux/fs.h>
35eda14cbcSMatt Macy		#include <linux/blkdev.h>
36eda14cbcSMatt Macy	], [
37eda14cbcSMatt Macy		struct block_device *bdev = NULL;
38eda14cbcSMatt Macy		fmode_t mode = 0;
39eda14cbcSMatt Macy
40eda14cbcSMatt Macy		blkdev_put(bdev, mode);
41eda14cbcSMatt Macy	])
42eda14cbcSMatt Macy])
43eda14cbcSMatt Macy
44eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [
45eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkdev_put() exists])
46eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_put], [
47eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
48eda14cbcSMatt Macy	], [
49eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([blkdev_put()])
50eda14cbcSMatt Macy	])
51eda14cbcSMatt Macy])
52eda14cbcSMatt Macy
53eda14cbcSMatt Macydnl #
54eda14cbcSMatt Macydnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the
55eda14cbcSMatt Macydnl # 3.10.0 CentOS 7.x enterprise kernels.
56eda14cbcSMatt Macydnl #
57eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [
58eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkdev_reread_part], [
59eda14cbcSMatt Macy		#include <linux/fs.h>
60eda14cbcSMatt Macy		#include <linux/blkdev.h>
61eda14cbcSMatt Macy	], [
62eda14cbcSMatt Macy		struct block_device *bdev = NULL;
63eda14cbcSMatt Macy		int error;
64eda14cbcSMatt Macy
65eda14cbcSMatt Macy		error = blkdev_reread_part(bdev);
66eda14cbcSMatt Macy	])
67eda14cbcSMatt Macy])
68eda14cbcSMatt Macy
69eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [
70eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkdev_reread_part() exists])
71eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [
72eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
73eda14cbcSMatt Macy		AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1,
74eda14cbcSMatt Macy		    [blkdev_reread_part() exists])
75eda14cbcSMatt Macy	], [
76eda14cbcSMatt Macy		AC_MSG_RESULT(no)
77eda14cbcSMatt Macy	])
78eda14cbcSMatt Macy])
79eda14cbcSMatt Macy
80eda14cbcSMatt Macydnl #
81*7877fdebSMatt Macydnl # check_disk_change() was removed in 5.10
82*7877fdebSMatt Macydnl #
83*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE], [
84*7877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([check_disk_change], [
85*7877fdebSMatt Macy		#include <linux/fs.h>
86*7877fdebSMatt Macy		#include <linux/blkdev.h>
87*7877fdebSMatt Macy	], [
88*7877fdebSMatt Macy		struct block_device *bdev = NULL;
89*7877fdebSMatt Macy		bool error;
90*7877fdebSMatt Macy
91*7877fdebSMatt Macy		error = check_disk_change(bdev);
92*7877fdebSMatt Macy	])
93*7877fdebSMatt Macy])
94*7877fdebSMatt Macy
95*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE], [
96*7877fdebSMatt Macy	AC_MSG_CHECKING([whether check_disk_change() exists])
97*7877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([check_disk_change], [
98*7877fdebSMatt Macy		AC_MSG_RESULT(yes)
99*7877fdebSMatt Macy		AC_DEFINE(HAVE_CHECK_DISK_CHANGE, 1,
100*7877fdebSMatt Macy		    [check_disk_change() exists])
101*7877fdebSMatt Macy	], [
102*7877fdebSMatt Macy		AC_MSG_RESULT(no)
103*7877fdebSMatt Macy	])
104*7877fdebSMatt Macy])
105*7877fdebSMatt Macy
106*7877fdebSMatt Macydnl #
107*7877fdebSMatt Macydnl # 5.10 API, check_disk_change() is removed, in favor of
108*7877fdebSMatt Macydnl # bdev_check_media_change(), which doesn't force revalidation
109*7877fdebSMatt Macydnl #
110*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
111*7877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_check_media_change], [
112*7877fdebSMatt Macy		#include <linux/fs.h>
113*7877fdebSMatt Macy		#include <linux/blkdev.h>
114*7877fdebSMatt Macy	], [
115*7877fdebSMatt Macy		struct block_device *bdev = NULL;
116*7877fdebSMatt Macy		int error;
117*7877fdebSMatt Macy
118*7877fdebSMatt Macy		error = bdev_check_media_change(bdev);
119*7877fdebSMatt Macy	])
120*7877fdebSMatt Macy])
121*7877fdebSMatt Macy
122*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
123*7877fdebSMatt Macy	AC_MSG_CHECKING([whether bdev_disk_changed() exists])
124*7877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_check_media_change], [
125*7877fdebSMatt Macy		AC_MSG_RESULT(yes)
126*7877fdebSMatt Macy		AC_DEFINE(HAVE_BDEV_CHECK_MEDIA_CHANGE, 1,
127*7877fdebSMatt Macy		    [bdev_check_media_change() exists])
128*7877fdebSMatt Macy	], [
129*7877fdebSMatt Macy		AC_MSG_RESULT(no)
130*7877fdebSMatt Macy	])
131*7877fdebSMatt Macy])
132*7877fdebSMatt Macy
133*7877fdebSMatt Macydnl #
134eda14cbcSMatt Macydnl # 2.6.22 API change
135eda14cbcSMatt Macydnl # Single argument invalidate_bdev()
136eda14cbcSMatt Macydnl #
137eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [
138eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([invalidate_bdev], [
139eda14cbcSMatt Macy		#include <linux/buffer_head.h>
140eda14cbcSMatt Macy		#include <linux/blkdev.h>
141eda14cbcSMatt Macy	],[
142eda14cbcSMatt Macy		struct block_device *bdev = NULL;
143eda14cbcSMatt Macy		invalidate_bdev(bdev);
144eda14cbcSMatt Macy	])
145eda14cbcSMatt Macy])
146eda14cbcSMatt Macy
147eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [
148eda14cbcSMatt Macy	AC_MSG_CHECKING([whether invalidate_bdev() exists])
149eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([invalidate_bdev], [
150eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
151eda14cbcSMatt Macy	],[
152eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([invalidate_bdev()])
153eda14cbcSMatt Macy	])
154eda14cbcSMatt Macy])
155eda14cbcSMatt Macy
156eda14cbcSMatt Macydnl #
157*7877fdebSMatt Macydnl # 5.11 API, lookup_bdev() takes dev_t argument.
158*7877fdebSMatt Macydnl # 2.6.27 API, lookup_bdev() was first exported.
159*7877fdebSMatt Macydnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument.
160eda14cbcSMatt Macydnl #
161eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [
162*7877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [
163*7877fdebSMatt Macy		#include <linux/blkdev.h>
164*7877fdebSMatt Macy	], [
165*7877fdebSMatt Macy		int error __attribute__ ((unused));
166*7877fdebSMatt Macy		const char path[] = "/example/path";
167*7877fdebSMatt Macy		dev_t dev;
168*7877fdebSMatt Macy
169*7877fdebSMatt Macy		error = lookup_bdev(path, &dev);
170*7877fdebSMatt Macy	])
171*7877fdebSMatt Macy
172eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [
173eda14cbcSMatt Macy		#include <linux/fs.h>
174eda14cbcSMatt Macy		#include <linux/blkdev.h>
175eda14cbcSMatt Macy	], [
176*7877fdebSMatt Macy		struct block_device *bdev __attribute__ ((unused));
177*7877fdebSMatt Macy		const char path[] = "/example/path";
178*7877fdebSMatt Macy
179*7877fdebSMatt Macy		bdev = lookup_bdev(path);
180eda14cbcSMatt Macy	])
181eda14cbcSMatt Macy
182*7877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [
183eda14cbcSMatt Macy		#include <linux/fs.h>
184eda14cbcSMatt Macy	], [
185*7877fdebSMatt Macy		struct block_device *bdev __attribute__ ((unused));
186*7877fdebSMatt Macy		const char path[] = "/example/path";
187*7877fdebSMatt Macy
188*7877fdebSMatt Macy		bdev = lookup_bdev(path, FMODE_READ);
189eda14cbcSMatt Macy	])
190eda14cbcSMatt Macy])
191eda14cbcSMatt Macy
192eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [
193*7877fdebSMatt Macy	AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg])
194*7877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt],
195*7877fdebSMatt Macy	    [lookup_bdev], [fs/block_dev.c], [
196*7877fdebSMatt Macy		AC_MSG_RESULT(yes)
197*7877fdebSMatt Macy		AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1,
198*7877fdebSMatt Macy		    [lookup_bdev() wants dev_t arg])
199*7877fdebSMatt Macy	], [
200*7877fdebSMatt Macy		AC_MSG_RESULT(no)
201*7877fdebSMatt Macy
202eda14cbcSMatt Macy		AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
203eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg],
204eda14cbcSMatt Macy		    [lookup_bdev], [fs/block_dev.c], [
205eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
206eda14cbcSMatt Macy			AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1,
207eda14cbcSMatt Macy			    [lookup_bdev() wants 1 arg])
208eda14cbcSMatt Macy		], [
209eda14cbcSMatt Macy			AC_MSG_RESULT(no)
210eda14cbcSMatt Macy
211*7877fdebSMatt Macy			AC_MSG_CHECKING([whether lookup_bdev() wants mode arg])
212*7877fdebSMatt Macy			ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode],
213eda14cbcSMatt Macy			    [lookup_bdev], [fs/block_dev.c], [
214eda14cbcSMatt Macy				AC_MSG_RESULT(yes)
215*7877fdebSMatt Macy				AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1,
216*7877fdebSMatt Macy				    [lookup_bdev() wants mode arg])
217eda14cbcSMatt Macy			], [
218eda14cbcSMatt Macy				ZFS_LINUX_TEST_ERROR([lookup_bdev()])
219eda14cbcSMatt Macy			])
220eda14cbcSMatt Macy		])
221eda14cbcSMatt Macy	])
222*7877fdebSMatt Macy])
223eda14cbcSMatt Macy
224eda14cbcSMatt Macydnl #
225eda14cbcSMatt Macydnl # 2.6.30 API change
226eda14cbcSMatt Macydnl #
227eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way
228eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a
229eda14cbcSMatt Macydnl # read-modify-write operation.
230eda14cbcSMatt Macydnl #
231eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because
232eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value.
233eda14cbcSMatt Macydnl #
234eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
235eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [
236eda14cbcSMatt Macy		#include <linux/blkdev.h>
237eda14cbcSMatt Macy	],[
238eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
239eda14cbcSMatt Macy		bdev_physical_block_size(bdev);
240eda14cbcSMatt Macy	])
241eda14cbcSMatt Macy])
242eda14cbcSMatt Macy
243eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
244eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
245eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [
246eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
247eda14cbcSMatt Macy	],[
248eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()])
249eda14cbcSMatt Macy	])
250eda14cbcSMatt Macy])
251eda14cbcSMatt Macy
252eda14cbcSMatt Macydnl #
253eda14cbcSMatt Macydnl # 2.6.30 API change
254eda14cbcSMatt Macydnl # Added bdev_logical_block_size().
255eda14cbcSMatt Macydnl #
256eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
257eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [
258eda14cbcSMatt Macy		#include <linux/blkdev.h>
259eda14cbcSMatt Macy	],[
260eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
261eda14cbcSMatt Macy		bdev_logical_block_size(bdev);
262eda14cbcSMatt Macy	])
263eda14cbcSMatt Macy])
264eda14cbcSMatt Macy
265eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
266eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
267eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [
268eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
269eda14cbcSMatt Macy	],[
270eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()])
271eda14cbcSMatt Macy	])
272eda14cbcSMatt Macy])
273eda14cbcSMatt Macy
274*7877fdebSMatt Macydnl #
275*7877fdebSMatt Macydnl # 5.11 API change
276*7877fdebSMatt Macydnl # Added bdev_whole() helper.
277*7877fdebSMatt Macydnl #
278*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [
279*7877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_whole], [
280*7877fdebSMatt Macy		#include <linux/blkdev.h>
281*7877fdebSMatt Macy	],[
282*7877fdebSMatt Macy		struct block_device *bdev = NULL;
283*7877fdebSMatt Macy		bdev = bdev_whole(bdev);
284*7877fdebSMatt Macy	])
285*7877fdebSMatt Macy])
286*7877fdebSMatt Macy
287*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [
288*7877fdebSMatt Macy	AC_MSG_CHECKING([whether bdev_whole() is available])
289*7877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_whole], [
290*7877fdebSMatt Macy		AC_MSG_RESULT(yes)
291*7877fdebSMatt Macy		AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available])
292*7877fdebSMatt Macy	],[
293*7877fdebSMatt Macy		AC_MSG_RESULT(no)
294*7877fdebSMatt Macy	])
295*7877fdebSMatt Macy])
296*7877fdebSMatt Macy
297eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
298eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
299eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_PUT
300eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
301eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
302eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
303eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
304eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
305*7877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE
306*7877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
307*7877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE
308eda14cbcSMatt Macy])
309eda14cbcSMatt Macy
310eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
311eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
312eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_PUT
313eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_REREAD_PART
314eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
315eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
316eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
317eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
318*7877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE
319*7877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
320*7877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE
321eda14cbcSMatt Macy])
322