xref: /freebsd/sys/contrib/openzfs/config/kernel-blkdev.m4 (revision 1719886f6d08408b834d270c59ffcfd821c8f63a)
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
19315ee00fSMartin Matuskadnl #
20315ee00fSMartin Matuskadnl # 6.5.x API change,
21315ee00fSMartin Matuskadnl # blkdev_get_by_path() takes 4 args
22315ee00fSMartin Matuskadnl #
23315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG], [
24315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_get_by_path_4arg], [
25315ee00fSMartin Matuska		#include <linux/fs.h>
26315ee00fSMartin Matuska		#include <linux/blkdev.h>
27315ee00fSMartin Matuska	], [
28315ee00fSMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
29315ee00fSMartin Matuska		const char *path = "path";
30315ee00fSMartin Matuska		fmode_t mode = 0;
31315ee00fSMartin Matuska		void *holder = NULL;
32315ee00fSMartin Matuska		struct blk_holder_ops h;
33315ee00fSMartin Matuska
34315ee00fSMartin Matuska		bdev = blkdev_get_by_path(path, mode, holder, &h);
35315ee00fSMartin Matuska	])
36315ee00fSMartin Matuska])
37315ee00fSMartin Matuska
38fd45b686SMartin Matuskadnl #
39fd45b686SMartin Matuskadnl # 6.8.x API change
40fd45b686SMartin Matuskadnl # bdev_open_by_path() replaces blkdev_get_by_path()
41fd45b686SMartin Matuskadnl #
42fd45b686SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH], [
43fd45b686SMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_open_by_path], [
44fd45b686SMartin Matuska		#include <linux/fs.h>
45fd45b686SMartin Matuska		#include <linux/blkdev.h>
46fd45b686SMartin Matuska	], [
47fd45b686SMartin Matuska		struct bdev_handle *bdh __attribute__ ((unused)) = NULL;
48fd45b686SMartin Matuska		const char *path = "path";
49fd45b686SMartin Matuska		fmode_t mode = 0;
50fd45b686SMartin Matuska		void *holder = NULL;
51fd45b686SMartin Matuska		struct blk_holder_ops h;
52fd45b686SMartin Matuska
53fd45b686SMartin Matuska		bdh = bdev_open_by_path(path, mode, holder, &h);
54fd45b686SMartin Matuska	])
55fd45b686SMartin Matuska])
56fd45b686SMartin Matuska
57*1719886fSMartin Matuskadnl #
58*1719886fSMartin Matuskadnl # 6.9.x API change
59*1719886fSMartin Matuskadnl # bdev_file_open_by_path() replaced bdev_open_by_path(),
60*1719886fSMartin Matuskadnl # and returns struct file*
61*1719886fSMartin Matuskadnl #
62*1719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH], [
63*1719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_file_open_by_path], [
64*1719886fSMartin Matuska		#include <linux/fs.h>
65*1719886fSMartin Matuska		#include <linux/blkdev.h>
66*1719886fSMartin Matuska	], [
67*1719886fSMartin Matuska		struct file *file __attribute__ ((unused)) = NULL;
68*1719886fSMartin Matuska		const char *path = "path";
69*1719886fSMartin Matuska		fmode_t mode = 0;
70*1719886fSMartin Matuska		void *holder = NULL;
71*1719886fSMartin Matuska		struct blk_holder_ops h;
72*1719886fSMartin Matuska
73*1719886fSMartin Matuska		file = bdev_file_open_by_path(path, mode, holder, &h);
74*1719886fSMartin Matuska	])
75*1719886fSMartin Matuska])
76*1719886fSMartin Matuska
77eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [
78315ee00fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 3 args])
79eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [
80eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
81eda14cbcSMatt Macy	], [
82315ee00fSMartin Matuska		AC_MSG_RESULT(no)
83315ee00fSMartin Matuska		AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 4 args])
84315ee00fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blkdev_get_by_path_4arg], [
85315ee00fSMartin Matuska			AC_DEFINE(HAVE_BLKDEV_GET_BY_PATH_4ARG, 1,
86315ee00fSMartin Matuska				[blkdev_get_by_path() exists and takes 4 args])
87315ee00fSMartin Matuska			AC_MSG_RESULT(yes)
88315ee00fSMartin Matuska		], [
89fd45b686SMartin Matuska			AC_MSG_RESULT(no)
90fd45b686SMartin Matuska			AC_MSG_CHECKING([whether bdev_open_by_path() exists])
91fd45b686SMartin Matuska			ZFS_LINUX_TEST_RESULT([bdev_open_by_path], [
92fd45b686SMartin Matuska				AC_DEFINE(HAVE_BDEV_OPEN_BY_PATH, 1,
93fd45b686SMartin Matuska					[bdev_open_by_path() exists])
94fd45b686SMartin Matuska				AC_MSG_RESULT(yes)
95fd45b686SMartin Matuska			], [
96*1719886fSMartin Matuska				AC_MSG_RESULT(no)
97*1719886fSMartin Matuska				AC_MSG_CHECKING([whether bdev_file_open_by_path() exists])
98*1719886fSMartin Matuska				ZFS_LINUX_TEST_RESULT([bdev_file_open_by_path], [
99*1719886fSMartin Matuska					AC_DEFINE(HAVE_BDEV_FILE_OPEN_BY_PATH, 1,
100*1719886fSMartin Matuska						[bdev_file_open_by_path() exists])
101*1719886fSMartin Matuska					AC_MSG_RESULT(yes)
102*1719886fSMartin Matuska				], [
103*1719886fSMartin Matuska					AC_MSG_RESULT(no)
104eda14cbcSMatt Macy					ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()])
105eda14cbcSMatt Macy				])
106eda14cbcSMatt Macy			])
107315ee00fSMartin Matuska		])
108fd45b686SMartin Matuska	])
109*1719886fSMartin Matuska])
110315ee00fSMartin Matuska
111315ee00fSMartin Matuskadnl #
112315ee00fSMartin Matuskadnl # 6.5.x API change
113315ee00fSMartin Matuskadnl # blk_mode_t was added as a type to supercede some places where fmode_t
114315ee00fSMartin Matuskadnl # is used
115315ee00fSMartin Matuskadnl #
116315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T], [
117315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_mode_t], [
118315ee00fSMartin Matuska		#include <linux/fs.h>
119315ee00fSMartin Matuska		#include <linux/blkdev.h>
120315ee00fSMartin Matuska	], [
121315ee00fSMartin Matuska		blk_mode_t m __attribute((unused)) = (blk_mode_t)0;
122315ee00fSMartin Matuska	])
123315ee00fSMartin Matuska])
124315ee00fSMartin Matuska
125315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T], [
126315ee00fSMartin Matuska	AC_MSG_CHECKING([whether blk_mode_t is defined])
127315ee00fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_mode_t], [
128315ee00fSMartin Matuska		AC_MSG_RESULT(yes)
129315ee00fSMartin Matuska		AC_DEFINE(HAVE_BLK_MODE_T, 1, [blk_mode_t is defined])
130315ee00fSMartin Matuska	], [
131315ee00fSMartin Matuska		AC_MSG_RESULT(no)
132315ee00fSMartin Matuska	])
133315ee00fSMartin Matuska])
134eda14cbcSMatt Macy
135eda14cbcSMatt Macydnl #
136eda14cbcSMatt Macydnl # 2.6.38 API change,
137eda14cbcSMatt Macydnl # Added blkdev_put()
138eda14cbcSMatt Macydnl #
139eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [
140eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkdev_put], [
141eda14cbcSMatt Macy		#include <linux/fs.h>
142eda14cbcSMatt Macy		#include <linux/blkdev.h>
143eda14cbcSMatt Macy	], [
144eda14cbcSMatt Macy		struct block_device *bdev = NULL;
145eda14cbcSMatt Macy		fmode_t mode = 0;
146eda14cbcSMatt Macy
147eda14cbcSMatt Macy		blkdev_put(bdev, mode);
148eda14cbcSMatt Macy	])
149eda14cbcSMatt Macy])
150eda14cbcSMatt Macy
151315ee00fSMartin Matuskadnl #
152315ee00fSMartin Matuskadnl # 6.5.x API change.
153315ee00fSMartin Matuskadnl # blkdev_put() takes (void* holder) as arg 2
154315ee00fSMartin Matuskadnl #
155315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER], [
156315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_put_holder], [
157315ee00fSMartin Matuska		#include <linux/fs.h>
158315ee00fSMartin Matuska		#include <linux/blkdev.h>
159315ee00fSMartin Matuska	], [
160315ee00fSMartin Matuska		struct block_device *bdev = NULL;
161315ee00fSMartin Matuska		void *holder = NULL;
162315ee00fSMartin Matuska
163315ee00fSMartin Matuska		blkdev_put(bdev, holder);
164315ee00fSMartin Matuska	])
165315ee00fSMartin Matuska])
166315ee00fSMartin Matuska
167fd45b686SMartin Matuskadnl #
168fd45b686SMartin Matuskadnl # 6.8.x API change
169fd45b686SMartin Matuskadnl # bdev_release() replaces blkdev_put()
170fd45b686SMartin Matuskadnl #
171fd45b686SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE], [
172fd45b686SMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_release], [
173fd45b686SMartin Matuska		#include <linux/fs.h>
174fd45b686SMartin Matuska		#include <linux/blkdev.h>
175fd45b686SMartin Matuska	], [
176fd45b686SMartin Matuska		struct bdev_handle *bdh = NULL;
177fd45b686SMartin Matuska		bdev_release(bdh);
178fd45b686SMartin Matuska	])
179fd45b686SMartin Matuska])
180fd45b686SMartin Matuska
181*1719886fSMartin Matuskadnl #
182*1719886fSMartin Matuskadnl # 6.9.x API change
183*1719886fSMartin Matuskadnl #
184*1719886fSMartin Matuskadnl # bdev_release() now private, but because bdev_file_open_by_path() returns
185*1719886fSMartin Matuskadnl # struct file*, we can just use fput(). So the blkdev_put test no longer
186*1719886fSMartin Matuskadnl # fails if not found.
187*1719886fSMartin Matuskadnl #
188*1719886fSMartin Matuska
189eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [
190eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkdev_put() exists])
191eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_put], [
192eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
193*1719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_PUT, 1, [blkdev_put() exists])
194eda14cbcSMatt Macy	], [
195fd45b686SMartin Matuska		AC_MSG_RESULT(no)
196315ee00fSMartin Matuska		AC_MSG_CHECKING([whether blkdev_put() accepts void* as arg 2])
197315ee00fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blkdev_put_holder], [
198315ee00fSMartin Matuska			AC_MSG_RESULT(yes)
199315ee00fSMartin Matuska			AC_DEFINE(HAVE_BLKDEV_PUT_HOLDER, 1,
200315ee00fSMartin Matuska				[blkdev_put() accepts void* as arg 2])
201315ee00fSMartin Matuska		], [
202fd45b686SMartin Matuska			AC_MSG_RESULT(no)
203fd45b686SMartin Matuska			AC_MSG_CHECKING([whether bdev_release() exists])
204fd45b686SMartin Matuska			ZFS_LINUX_TEST_RESULT([bdev_release], [
205fd45b686SMartin Matuska				AC_MSG_RESULT(yes)
206fd45b686SMartin Matuska				AC_DEFINE(HAVE_BDEV_RELEASE, 1,
207fd45b686SMartin Matuska					[bdev_release() exists])
208fd45b686SMartin Matuska			], [
209*1719886fSMartin Matuska				AC_MSG_RESULT(no)
210eda14cbcSMatt Macy			])
211eda14cbcSMatt Macy		])
212315ee00fSMartin Matuska	])
213fd45b686SMartin Matuska])
214eda14cbcSMatt Macy
215eda14cbcSMatt Macydnl #
216eda14cbcSMatt Macydnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the
217eda14cbcSMatt Macydnl # 3.10.0 CentOS 7.x enterprise kernels.
218eda14cbcSMatt Macydnl #
219eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [
220eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkdev_reread_part], [
221eda14cbcSMatt Macy		#include <linux/fs.h>
222eda14cbcSMatt Macy		#include <linux/blkdev.h>
223eda14cbcSMatt Macy	], [
224eda14cbcSMatt Macy		struct block_device *bdev = NULL;
225eda14cbcSMatt Macy		int error;
226eda14cbcSMatt Macy
227eda14cbcSMatt Macy		error = blkdev_reread_part(bdev);
228eda14cbcSMatt Macy	])
229eda14cbcSMatt Macy])
230eda14cbcSMatt Macy
231eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [
232eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkdev_reread_part() exists])
233eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [
234eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
235eda14cbcSMatt Macy		AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1,
236eda14cbcSMatt Macy		    [blkdev_reread_part() exists])
237eda14cbcSMatt Macy	], [
238eda14cbcSMatt Macy		AC_MSG_RESULT(no)
239eda14cbcSMatt Macy	])
240eda14cbcSMatt Macy])
241eda14cbcSMatt Macy
242eda14cbcSMatt Macydnl #
2437877fdebSMatt Macydnl # check_disk_change() was removed in 5.10
2447877fdebSMatt Macydnl #
2457877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE], [
2467877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([check_disk_change], [
2477877fdebSMatt Macy		#include <linux/fs.h>
2487877fdebSMatt Macy		#include <linux/blkdev.h>
2497877fdebSMatt Macy	], [
2507877fdebSMatt Macy		struct block_device *bdev = NULL;
2517877fdebSMatt Macy		bool error;
2527877fdebSMatt Macy
2537877fdebSMatt Macy		error = check_disk_change(bdev);
2547877fdebSMatt Macy	])
2557877fdebSMatt Macy])
2567877fdebSMatt Macy
2577877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE], [
2587877fdebSMatt Macy	AC_MSG_CHECKING([whether check_disk_change() exists])
2597877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([check_disk_change], [
2607877fdebSMatt Macy		AC_MSG_RESULT(yes)
2617877fdebSMatt Macy		AC_DEFINE(HAVE_CHECK_DISK_CHANGE, 1,
2627877fdebSMatt Macy		    [check_disk_change() exists])
2637877fdebSMatt Macy	], [
2647877fdebSMatt Macy		AC_MSG_RESULT(no)
2657877fdebSMatt Macy	])
2667877fdebSMatt Macy])
2677877fdebSMatt Macy
2687877fdebSMatt Macydnl #
269315ee00fSMartin Matuskadnl # 6.5.x API change
270315ee00fSMartin Matuskadnl # disk_check_media_change() was added
271315ee00fSMartin Matuskadnl #
272315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [
273315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([disk_check_media_change], [
274315ee00fSMartin Matuska		#include <linux/fs.h>
275315ee00fSMartin Matuska		#include <linux/blkdev.h>
276315ee00fSMartin Matuska	], [
277315ee00fSMartin Matuska		struct block_device *bdev = NULL;
278315ee00fSMartin Matuska		bool error;
279315ee00fSMartin Matuska
280315ee00fSMartin Matuska		error = disk_check_media_change(bdev->bd_disk);
281315ee00fSMartin Matuska	])
282315ee00fSMartin Matuska])
283315ee00fSMartin Matuska
284315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [
285315ee00fSMartin Matuska	AC_MSG_CHECKING([whether disk_check_media_change() exists])
286315ee00fSMartin Matuska	ZFS_LINUX_TEST_RESULT([disk_check_media_change], [
287315ee00fSMartin Matuska		AC_MSG_RESULT(yes)
288315ee00fSMartin Matuska		AC_DEFINE(HAVE_DISK_CHECK_MEDIA_CHANGE, 1,
289315ee00fSMartin Matuska		    [disk_check_media_change() exists])
290315ee00fSMartin Matuska	], [
291315ee00fSMartin Matuska		AC_MSG_RESULT(no)
292315ee00fSMartin Matuska	])
293315ee00fSMartin Matuska])
294315ee00fSMartin Matuska
295315ee00fSMartin Matuskadnl #
296be181ee2SMartin Matuskadnl # bdev_kobj() is introduced from 5.12
297be181ee2SMartin Matuskadnl #
298be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ], [
299be181ee2SMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_kobj], [
300be181ee2SMartin Matuska		#include <linux/fs.h>
301be181ee2SMartin Matuska		#include <linux/blkdev.h>
302be181ee2SMartin Matuska		#include <linux/kobject.h>
303be181ee2SMartin Matuska	], [
304be181ee2SMartin Matuska		struct block_device *bdev = NULL;
305be181ee2SMartin Matuska		struct kobject *disk_kobj;
306be181ee2SMartin Matuska		disk_kobj = bdev_kobj(bdev);
307be181ee2SMartin Matuska	])
308be181ee2SMartin Matuska])
309be181ee2SMartin Matuska
310be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ], [
311be181ee2SMartin Matuska	AC_MSG_CHECKING([whether bdev_kobj() exists])
312be181ee2SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdev_kobj], [
313be181ee2SMartin Matuska		AC_MSG_RESULT(yes)
314be181ee2SMartin Matuska		AC_DEFINE(HAVE_BDEV_KOBJ, 1,
315be181ee2SMartin Matuska		    [bdev_kobj() exists])
316be181ee2SMartin Matuska	], [
317be181ee2SMartin Matuska		AC_MSG_RESULT(no)
318be181ee2SMartin Matuska	])
319be181ee2SMartin Matuska])
320be181ee2SMartin Matuska
321be181ee2SMartin Matuskadnl #
322be181ee2SMartin Matuskadnl # part_to_dev() was removed in 5.12
323be181ee2SMartin Matuskadnl #
324be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV], [
325be181ee2SMartin Matuska	ZFS_LINUX_TEST_SRC([part_to_dev], [
326be181ee2SMartin Matuska		#include <linux/fs.h>
327be181ee2SMartin Matuska		#include <linux/blkdev.h>
328be181ee2SMartin Matuska	], [
329be181ee2SMartin Matuska		struct hd_struct *p = NULL;
330be181ee2SMartin Matuska		struct device *pdev;
331be181ee2SMartin Matuska		pdev = part_to_dev(p);
332be181ee2SMartin Matuska	])
333be181ee2SMartin Matuska])
334be181ee2SMartin Matuska
335be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV], [
336be181ee2SMartin Matuska	AC_MSG_CHECKING([whether part_to_dev() exists])
337be181ee2SMartin Matuska	ZFS_LINUX_TEST_RESULT([part_to_dev], [
338be181ee2SMartin Matuska		AC_MSG_RESULT(yes)
339be181ee2SMartin Matuska		AC_DEFINE(HAVE_PART_TO_DEV, 1,
340be181ee2SMartin Matuska		    [part_to_dev() exists])
341be181ee2SMartin Matuska	], [
342be181ee2SMartin Matuska		AC_MSG_RESULT(no)
343be181ee2SMartin Matuska	])
344be181ee2SMartin Matuska])
345be181ee2SMartin Matuska
346be181ee2SMartin Matuskadnl #
3477877fdebSMatt Macydnl # 5.10 API, check_disk_change() is removed, in favor of
3487877fdebSMatt Macydnl # bdev_check_media_change(), which doesn't force revalidation
3497877fdebSMatt Macydnl #
3507877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
3517877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_check_media_change], [
3527877fdebSMatt Macy		#include <linux/fs.h>
3537877fdebSMatt Macy		#include <linux/blkdev.h>
3547877fdebSMatt Macy	], [
3557877fdebSMatt Macy		struct block_device *bdev = NULL;
3567877fdebSMatt Macy		int error;
3577877fdebSMatt Macy
3587877fdebSMatt Macy		error = bdev_check_media_change(bdev);
3597877fdebSMatt Macy	])
3607877fdebSMatt Macy])
3617877fdebSMatt Macy
3627877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
36321b492edSMartin Matuska	AC_MSG_CHECKING([whether bdev_check_media_change() exists])
3647877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_check_media_change], [
3657877fdebSMatt Macy		AC_MSG_RESULT(yes)
3667877fdebSMatt Macy		AC_DEFINE(HAVE_BDEV_CHECK_MEDIA_CHANGE, 1,
3677877fdebSMatt Macy		    [bdev_check_media_change() exists])
3687877fdebSMatt Macy	], [
3697877fdebSMatt Macy		AC_MSG_RESULT(no)
3707877fdebSMatt Macy	])
3717877fdebSMatt Macy])
3727877fdebSMatt Macy
3737877fdebSMatt Macydnl #
374eda14cbcSMatt Macydnl # 2.6.22 API change
375eda14cbcSMatt Macydnl # Single argument invalidate_bdev()
376eda14cbcSMatt Macydnl #
377eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [
378eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([invalidate_bdev], [
379eda14cbcSMatt Macy		#include <linux/buffer_head.h>
380eda14cbcSMatt Macy		#include <linux/blkdev.h>
381eda14cbcSMatt Macy	],[
382eda14cbcSMatt Macy		struct block_device *bdev = NULL;
383eda14cbcSMatt Macy		invalidate_bdev(bdev);
384eda14cbcSMatt Macy	])
385eda14cbcSMatt Macy])
386eda14cbcSMatt Macy
387eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [
388eda14cbcSMatt Macy	AC_MSG_CHECKING([whether invalidate_bdev() exists])
389eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([invalidate_bdev], [
390eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
391eda14cbcSMatt Macy	],[
392eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([invalidate_bdev()])
393eda14cbcSMatt Macy	])
394eda14cbcSMatt Macy])
395eda14cbcSMatt Macy
396eda14cbcSMatt Macydnl #
3977877fdebSMatt Macydnl # 5.11 API, lookup_bdev() takes dev_t argument.
3987877fdebSMatt Macydnl # 2.6.27 API, lookup_bdev() was first exported.
3997877fdebSMatt Macydnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument.
400eda14cbcSMatt Macydnl #
401eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [
4027877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [
4037877fdebSMatt Macy		#include <linux/blkdev.h>
4047877fdebSMatt Macy	], [
4057877fdebSMatt Macy		int error __attribute__ ((unused));
4067877fdebSMatt Macy		const char path[] = "/example/path";
4077877fdebSMatt Macy		dev_t dev;
4087877fdebSMatt Macy
4097877fdebSMatt Macy		error = lookup_bdev(path, &dev);
4107877fdebSMatt Macy	])
4117877fdebSMatt Macy
412eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [
413eda14cbcSMatt Macy		#include <linux/fs.h>
414eda14cbcSMatt Macy		#include <linux/blkdev.h>
415eda14cbcSMatt Macy	], [
4167877fdebSMatt Macy		struct block_device *bdev __attribute__ ((unused));
4177877fdebSMatt Macy		const char path[] = "/example/path";
4187877fdebSMatt Macy
4197877fdebSMatt Macy		bdev = lookup_bdev(path);
420eda14cbcSMatt Macy	])
421eda14cbcSMatt Macy
4227877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [
423eda14cbcSMatt Macy		#include <linux/fs.h>
424eda14cbcSMatt Macy	], [
4257877fdebSMatt Macy		struct block_device *bdev __attribute__ ((unused));
4267877fdebSMatt Macy		const char path[] = "/example/path";
4277877fdebSMatt Macy
4287877fdebSMatt Macy		bdev = lookup_bdev(path, FMODE_READ);
429eda14cbcSMatt Macy	])
430eda14cbcSMatt Macy])
431eda14cbcSMatt Macy
432eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [
4337877fdebSMatt Macy	AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg])
4347877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt],
4357877fdebSMatt Macy	    [lookup_bdev], [fs/block_dev.c], [
4367877fdebSMatt Macy		AC_MSG_RESULT(yes)
4377877fdebSMatt Macy		AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1,
4387877fdebSMatt Macy		    [lookup_bdev() wants dev_t arg])
4397877fdebSMatt Macy	], [
4407877fdebSMatt Macy		AC_MSG_RESULT(no)
4417877fdebSMatt Macy
442eda14cbcSMatt Macy		AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
443eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg],
444eda14cbcSMatt Macy		    [lookup_bdev], [fs/block_dev.c], [
445eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
446eda14cbcSMatt Macy			AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1,
447eda14cbcSMatt Macy			    [lookup_bdev() wants 1 arg])
448eda14cbcSMatt Macy		], [
449eda14cbcSMatt Macy			AC_MSG_RESULT(no)
450eda14cbcSMatt Macy
4517877fdebSMatt Macy			AC_MSG_CHECKING([whether lookup_bdev() wants mode arg])
4527877fdebSMatt Macy			ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode],
453eda14cbcSMatt Macy			    [lookup_bdev], [fs/block_dev.c], [
454eda14cbcSMatt Macy				AC_MSG_RESULT(yes)
4557877fdebSMatt Macy				AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1,
4567877fdebSMatt Macy				    [lookup_bdev() wants mode arg])
457eda14cbcSMatt Macy			], [
458eda14cbcSMatt Macy				ZFS_LINUX_TEST_ERROR([lookup_bdev()])
459eda14cbcSMatt Macy			])
460eda14cbcSMatt Macy		])
461eda14cbcSMatt Macy	])
4627877fdebSMatt Macy])
463eda14cbcSMatt Macy
464eda14cbcSMatt Macydnl #
465eda14cbcSMatt Macydnl # 2.6.30 API change
466eda14cbcSMatt Macydnl #
467eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way
468eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a
469eda14cbcSMatt Macydnl # read-modify-write operation.
470eda14cbcSMatt Macydnl #
471eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because
472eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value.
473eda14cbcSMatt Macydnl #
474eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
475eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [
476eda14cbcSMatt Macy		#include <linux/blkdev.h>
477eda14cbcSMatt Macy	],[
478eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
479eda14cbcSMatt Macy		bdev_physical_block_size(bdev);
480eda14cbcSMatt Macy	])
481eda14cbcSMatt Macy])
482eda14cbcSMatt Macy
483eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
484eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
485eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [
486eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
487eda14cbcSMatt Macy	],[
488eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()])
489eda14cbcSMatt Macy	])
490eda14cbcSMatt Macy])
491eda14cbcSMatt Macy
492eda14cbcSMatt Macydnl #
493eda14cbcSMatt Macydnl # 2.6.30 API change
494eda14cbcSMatt Macydnl # Added bdev_logical_block_size().
495eda14cbcSMatt Macydnl #
496eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
497eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [
498eda14cbcSMatt Macy		#include <linux/blkdev.h>
499eda14cbcSMatt Macy	],[
500eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
501eda14cbcSMatt Macy		bdev_logical_block_size(bdev);
502eda14cbcSMatt Macy	])
503eda14cbcSMatt Macy])
504eda14cbcSMatt Macy
505eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
506eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
507eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [
508eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
509eda14cbcSMatt Macy	],[
510eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()])
511eda14cbcSMatt Macy	])
512eda14cbcSMatt Macy])
513eda14cbcSMatt Macy
5147877fdebSMatt Macydnl #
5157877fdebSMatt Macydnl # 5.11 API change
5167877fdebSMatt Macydnl # Added bdev_whole() helper.
5177877fdebSMatt Macydnl #
5187877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [
5197877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_whole], [
5207877fdebSMatt Macy		#include <linux/blkdev.h>
5217877fdebSMatt Macy	],[
5227877fdebSMatt Macy		struct block_device *bdev = NULL;
5237877fdebSMatt Macy		bdev = bdev_whole(bdev);
5247877fdebSMatt Macy	])
5257877fdebSMatt Macy])
5267877fdebSMatt Macy
5277877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [
5287877fdebSMatt Macy	AC_MSG_CHECKING([whether bdev_whole() is available])
5297877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_whole], [
5307877fdebSMatt Macy		AC_MSG_RESULT(yes)
5317877fdebSMatt Macy		AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available])
5327877fdebSMatt Macy	],[
5337877fdebSMatt Macy		AC_MSG_RESULT(no)
5347877fdebSMatt Macy	])
5357877fdebSMatt Macy])
5367877fdebSMatt Macy
537681ce946SMartin Matuskadnl #
538271171e0SMartin Matuskadnl # 5.20 API change,
539271171e0SMartin Matuskadnl # Removed bdevname(), snprintf(.., %pg) should be used.
540271171e0SMartin Matuskadnl #
541271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [
542271171e0SMartin Matuska	ZFS_LINUX_TEST_SRC([bdevname], [
543271171e0SMartin Matuska		#include <linux/fs.h>
544271171e0SMartin Matuska		#include <linux/blkdev.h>
545271171e0SMartin Matuska	], [
546271171e0SMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
547271171e0SMartin Matuska		char path[BDEVNAME_SIZE];
548271171e0SMartin Matuska
549271171e0SMartin Matuska		(void) bdevname(bdev, path);
550271171e0SMartin Matuska	])
551271171e0SMartin Matuska])
552271171e0SMartin Matuska
553271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [
554271171e0SMartin Matuska	AC_MSG_CHECKING([whether bdevname() exists])
555271171e0SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdevname], [
556271171e0SMartin Matuska		AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available])
557271171e0SMartin Matuska		AC_MSG_RESULT(yes)
558271171e0SMartin Matuska	], [
559271171e0SMartin Matuska		AC_MSG_RESULT(no)
560271171e0SMartin Matuska	])
561271171e0SMartin Matuska])
562271171e0SMartin Matuska
563271171e0SMartin Matuskadnl #
564*1719886fSMartin Matuskadnl # TRIM support: discard and secure erase. We make use of asynchronous
565*1719886fSMartin Matuskadnl #               functions when available.
566e3aa18adSMartin Matuskadnl #
567*1719886fSMartin Matuskadnl # 3.10:
568*1719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
569*1719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
570*1719886fSMartin Matuskadnl #   async discard: [not available]
571*1719886fSMartin Matuskadnl #   async erase:   [not available]
572*1719886fSMartin Matuskadnl #
573*1719886fSMartin Matuskadnl # 4.7:
574*1719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
575*1719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
576*1719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(..., 0)
577*1719886fSMartin Matuskadnl #   async erase:   __blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
578*1719886fSMartin Matuskadnl #
579*1719886fSMartin Matuskadnl # 5.19:
580*1719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(...)
581*1719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_secure_erase(...)
582*1719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(...)
583*1719886fSMartin Matuskadnl #   async erase:   [not available]
584*1719886fSMartin Matuskadnl #
585*1719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD], [
586*1719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_noflags], [
587e3aa18adSMartin Matuska		#include <linux/blkdev.h>
588e3aa18adSMartin Matuska	],[
589e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
590e3aa18adSMartin Matuska		sector_t sector = 0;
591e3aa18adSMartin Matuska		sector_t nr_sects = 0;
592e3aa18adSMartin Matuska		int error __attribute__ ((unused));
593e3aa18adSMartin Matuska
594*1719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
595e3aa18adSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
596e3aa18adSMartin Matuska	])
597*1719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [
598*1719886fSMartin Matuska		#include <linux/blkdev.h>
599*1719886fSMartin Matuska	],[
600*1719886fSMartin Matuska		struct block_device *bdev = NULL;
601*1719886fSMartin Matuska		sector_t sector = 0;
602*1719886fSMartin Matuska		sector_t nr_sects = 0;
603*1719886fSMartin Matuska		unsigned long flags = 0;
604*1719886fSMartin Matuska		int error __attribute__ ((unused));
605e3aa18adSMartin Matuska
606*1719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
607*1719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags);
608*1719886fSMartin Matuska	])
609*1719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_noflags], [
610*1719886fSMartin Matuska		#include <linux/blkdev.h>
611*1719886fSMartin Matuska	],[
612*1719886fSMartin Matuska		struct block_device *bdev = NULL;
613*1719886fSMartin Matuska		sector_t sector = 0;
614*1719886fSMartin Matuska		sector_t nr_sects = 0;
615*1719886fSMartin Matuska		struct bio *biop = NULL;
616*1719886fSMartin Matuska		int error __attribute__ ((unused));
617*1719886fSMartin Matuska
618*1719886fSMartin Matuska		error = __blkdev_issue_discard(bdev,
619*1719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, &biop);
620*1719886fSMartin Matuska	])
621a4e5e010SMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_flags], [
622a4e5e010SMartin Matuska		#include <linux/blkdev.h>
623a4e5e010SMartin Matuska	],[
624a4e5e010SMartin Matuska		struct block_device *bdev = NULL;
625a4e5e010SMartin Matuska		sector_t sector = 0;
626a4e5e010SMartin Matuska		sector_t nr_sects = 0;
627a4e5e010SMartin Matuska		unsigned long flags = 0;
628a4e5e010SMartin Matuska		struct bio *biop = NULL;
629a4e5e010SMartin Matuska		int error __attribute__ ((unused));
630a4e5e010SMartin Matuska
631a4e5e010SMartin Matuska		error = __blkdev_issue_discard(bdev,
632a4e5e010SMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags, &biop);
633a4e5e010SMartin Matuska	])
634*1719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [
635e3aa18adSMartin Matuska		#include <linux/blkdev.h>
636e3aa18adSMartin Matuska	],[
637e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
638e3aa18adSMartin Matuska		sector_t sector = 0;
639e3aa18adSMartin Matuska		sector_t nr_sects = 0;
640e3aa18adSMartin Matuska		int error __attribute__ ((unused));
641e3aa18adSMartin Matuska
642*1719886fSMartin Matuska		error = blkdev_issue_secure_erase(bdev,
643*1719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
644e3aa18adSMartin Matuska	])
645e3aa18adSMartin Matuska])
646e3aa18adSMartin Matuska
647*1719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD], [
648*1719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard() is available])
649*1719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_noflags], [
650*1719886fSMartin Matuska		AC_MSG_RESULT(yes)
651*1719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_NOFLAGS, 1,
652*1719886fSMartin Matuska		    [blkdev_issue_discard() is available])
653*1719886fSMartin Matuska	],[
654*1719886fSMartin Matuska		AC_MSG_RESULT(no)
655*1719886fSMartin Matuska	])
656*1719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard(flags) is available])
657*1719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [
658*1719886fSMartin Matuska		AC_MSG_RESULT(yes)
659*1719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_FLAGS, 1,
660*1719886fSMartin Matuska		    [blkdev_issue_discard(flags) is available])
661*1719886fSMartin Matuska	],[
662*1719886fSMartin Matuska		AC_MSG_RESULT(no)
663*1719886fSMartin Matuska	])
664*1719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard() is available])
665*1719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_noflags], [
666*1719886fSMartin Matuska		AC_MSG_RESULT(yes)
667*1719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_NOFLAGS, 1,
668*1719886fSMartin Matuska		    [__blkdev_issue_discard() is available])
669*1719886fSMartin Matuska	],[
670*1719886fSMartin Matuska		AC_MSG_RESULT(no)
671*1719886fSMartin Matuska	])
672*1719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard(flags) is available])
673*1719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_flags], [
674*1719886fSMartin Matuska		AC_MSG_RESULT(yes)
675*1719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_FLAGS, 1,
676*1719886fSMartin Matuska		    [__blkdev_issue_discard(flags) is available])
677*1719886fSMartin Matuska	],[
678*1719886fSMartin Matuska		AC_MSG_RESULT(no)
679*1719886fSMartin Matuska	])
680e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available])
681e3aa18adSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [
682e3aa18adSMartin Matuska		AC_MSG_RESULT(yes)
683e3aa18adSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1,
684e3aa18adSMartin Matuska		    [blkdev_issue_secure_erase() is available])
685e3aa18adSMartin Matuska	],[
686e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
687e3aa18adSMartin Matuska	])
688a4e5e010SMartin Matuska])
689e3aa18adSMartin Matuska
690e3aa18adSMartin Matuskadnl #
691681ce946SMartin Matuskadnl # 5.13 API change
692681ce946SMartin Matuskadnl # blkdev_get_by_path() no longer handles ERESTARTSYS
693681ce946SMartin Matuskadnl #
694681ce946SMartin Matuskadnl # Unfortunately we're forced to rely solely on the kernel version
695681ce946SMartin Matuskadnl # number in order to determine the expected behavior.  This was an
696681ce946SMartin Matuskadnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607.
697681ce946SMartin Matuskadnl #
698681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [
699681ce946SMartin Matuska	AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS])
700681ce946SMartin Matuska	AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [
701681ce946SMartin Matuska		AC_MSG_RESULT(yes)
702681ce946SMartin Matuska		AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1,
703681ce946SMartin Matuska			[blkdev_get_by_path() handles ERESTARTSYS])
704681ce946SMartin Matuska	],[
705681ce946SMartin Matuska		AC_MSG_RESULT(no)
706681ce946SMartin Matuska	],[
707681ce946SMartin Matuska		AC_MSG_RESULT(no)
708681ce946SMartin Matuska	])
709681ce946SMartin Matuska])
710681ce946SMartin Matuska
711315ee00fSMartin Matuskadnl #
712315ee00fSMartin Matuskadnl # 6.5.x API change
713315ee00fSMartin Matuskadnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT
714315ee00fSMartin Matuskadnl #
715315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [
716315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [
717315ee00fSMartin Matuska		#include <linux/blkdev.h>
718315ee00fSMartin Matuska	],[
719315ee00fSMartin Matuska		blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT;
720315ee00fSMartin Matuska	])
721315ee00fSMartin Matuska])
722315ee00fSMartin Matuska
723315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [
724315ee00fSMartin Matuska	AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined])
725315ee00fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [
726315ee00fSMartin Matuska			AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined])
727315ee00fSMartin Matuska			AC_MSG_RESULT(yes)
728315ee00fSMartin Matuska		], [
729315ee00fSMartin Matuska			AC_MSG_RESULT(no)
730315ee00fSMartin Matuska		])
731315ee00fSMartin Matuska	])
732315ee00fSMartin Matuska])
733315ee00fSMartin Matuska
734eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
735eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
736315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG
737fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH
738*1719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH
739eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_PUT
740315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER
741fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE
742eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
743eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
744eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
745eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
746eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7477877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE
7487877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7497877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE
750271171e0SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME
751*1719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD
752be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ
753be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV
754315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE
755315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT
756315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T
757eda14cbcSMatt Macy])
758eda14cbcSMatt Macy
759eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
760eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
761eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_PUT
762eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_REREAD_PART
763eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
764eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
765eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
766eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7677877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE
7687877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7697877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE
770271171e0SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEVNAME
771681ce946SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS
772*1719886fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD
773be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ
774be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV
775315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE
776315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT
777315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T
778eda14cbcSMatt Macy])
779