xref: /freebsd/sys/contrib/openzfs/config/kernel-blkdev.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
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
571719886fSMartin Matuskadnl #
581719886fSMartin Matuskadnl # 6.9.x API change
591719886fSMartin Matuskadnl # bdev_file_open_by_path() replaced bdev_open_by_path(),
601719886fSMartin Matuskadnl # and returns struct file*
611719886fSMartin Matuskadnl #
621719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH], [
631719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_file_open_by_path], [
641719886fSMartin Matuska		#include <linux/fs.h>
651719886fSMartin Matuska		#include <linux/blkdev.h>
661719886fSMartin Matuska	], [
671719886fSMartin Matuska		struct file *file __attribute__ ((unused)) = NULL;
681719886fSMartin Matuska		const char *path = "path";
691719886fSMartin Matuska		fmode_t mode = 0;
701719886fSMartin Matuska		void *holder = NULL;
711719886fSMartin Matuska		struct blk_holder_ops h;
721719886fSMartin Matuska
731719886fSMartin Matuska		file = bdev_file_open_by_path(path, mode, holder, &h);
741719886fSMartin Matuska	])
751719886fSMartin Matuska])
761719886fSMartin 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			], [
961719886fSMartin Matuska				AC_MSG_RESULT(no)
971719886fSMartin Matuska				AC_MSG_CHECKING([whether bdev_file_open_by_path() exists])
981719886fSMartin Matuska				ZFS_LINUX_TEST_RESULT([bdev_file_open_by_path], [
991719886fSMartin Matuska					AC_DEFINE(HAVE_BDEV_FILE_OPEN_BY_PATH, 1,
1001719886fSMartin Matuska						[bdev_file_open_by_path() exists])
1011719886fSMartin Matuska					AC_MSG_RESULT(yes)
1021719886fSMartin Matuska				], [
1031719886fSMartin Matuska					AC_MSG_RESULT(no)
104eda14cbcSMatt Macy					ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()])
105eda14cbcSMatt Macy				])
106eda14cbcSMatt Macy			])
107315ee00fSMartin Matuska		])
108fd45b686SMartin Matuska	])
1091719886fSMartin 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
1811719886fSMartin Matuskadnl #
1821719886fSMartin Matuskadnl # 6.9.x API change
1831719886fSMartin Matuskadnl #
1841719886fSMartin Matuskadnl # bdev_release() now private, but because bdev_file_open_by_path() returns
1851719886fSMartin Matuskadnl # struct file*, we can just use fput(). So the blkdev_put test no longer
1861719886fSMartin Matuskadnl # fails if not found.
1871719886fSMartin Matuskadnl #
1881719886fSMartin 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)
1931719886fSMartin 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			], [
2091719886fSMartin 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.
399eda14cbcSMatt Macydnl #
400eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [
4017877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [
4027877fdebSMatt Macy		#include <linux/blkdev.h>
4037877fdebSMatt Macy	], [
4047877fdebSMatt Macy		int error __attribute__ ((unused));
4057877fdebSMatt Macy		const char path[] = "/example/path";
4067877fdebSMatt Macy		dev_t dev;
4077877fdebSMatt Macy
4087877fdebSMatt Macy		error = lookup_bdev(path, &dev);
4097877fdebSMatt Macy	])
4107877fdebSMatt Macy
411eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [
412eda14cbcSMatt Macy		#include <linux/fs.h>
413eda14cbcSMatt Macy		#include <linux/blkdev.h>
414eda14cbcSMatt Macy	], [
4157877fdebSMatt Macy		struct block_device *bdev __attribute__ ((unused));
4167877fdebSMatt Macy		const char path[] = "/example/path";
4177877fdebSMatt Macy
4187877fdebSMatt Macy		bdev = lookup_bdev(path);
419eda14cbcSMatt Macy	])
420eda14cbcSMatt Macy])
421eda14cbcSMatt Macy
422eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [
4237877fdebSMatt Macy	AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg])
4247877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt],
4257877fdebSMatt Macy	    [lookup_bdev], [fs/block_dev.c], [
4267877fdebSMatt Macy		AC_MSG_RESULT(yes)
4277877fdebSMatt Macy		AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1,
4287877fdebSMatt Macy		    [lookup_bdev() wants dev_t arg])
4297877fdebSMatt Macy	], [
4307877fdebSMatt Macy		AC_MSG_RESULT(no)
4317877fdebSMatt Macy
432eda14cbcSMatt Macy		AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
433eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg],
434eda14cbcSMatt Macy		    [lookup_bdev], [fs/block_dev.c], [
435eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
436eda14cbcSMatt Macy			AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1,
437eda14cbcSMatt Macy			    [lookup_bdev() wants 1 arg])
438eda14cbcSMatt Macy		], [
439eda14cbcSMatt Macy			ZFS_LINUX_TEST_ERROR([lookup_bdev()])
440eda14cbcSMatt Macy		])
441eda14cbcSMatt Macy	])
442eda14cbcSMatt Macy])
443eda14cbcSMatt Macy
444eda14cbcSMatt Macydnl #
445eda14cbcSMatt Macydnl # 2.6.30 API change
446eda14cbcSMatt Macydnl #
447eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way
448eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a
449eda14cbcSMatt Macydnl # read-modify-write operation.
450eda14cbcSMatt Macydnl #
451eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because
452eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value.
453eda14cbcSMatt Macydnl #
454eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
455eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [
456eda14cbcSMatt Macy		#include <linux/blkdev.h>
457eda14cbcSMatt Macy	],[
458eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
459eda14cbcSMatt Macy		bdev_physical_block_size(bdev);
460eda14cbcSMatt Macy	])
461eda14cbcSMatt Macy])
462eda14cbcSMatt Macy
463eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
464eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
465eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [
466eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
467eda14cbcSMatt Macy	],[
468eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()])
469eda14cbcSMatt Macy	])
470eda14cbcSMatt Macy])
471eda14cbcSMatt Macy
472eda14cbcSMatt Macydnl #
473eda14cbcSMatt Macydnl # 2.6.30 API change
474eda14cbcSMatt Macydnl # Added bdev_logical_block_size().
475eda14cbcSMatt Macydnl #
476eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
477eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [
478eda14cbcSMatt Macy		#include <linux/blkdev.h>
479eda14cbcSMatt Macy	],[
480eda14cbcSMatt Macy		struct block_device *bdev __attribute__ ((unused)) = NULL;
481eda14cbcSMatt Macy		bdev_logical_block_size(bdev);
482eda14cbcSMatt Macy	])
483eda14cbcSMatt Macy])
484eda14cbcSMatt Macy
485eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
486eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
487eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [
488eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
489eda14cbcSMatt Macy	],[
490eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()])
491eda14cbcSMatt Macy	])
492eda14cbcSMatt Macy])
493eda14cbcSMatt Macy
4947877fdebSMatt Macydnl #
4957877fdebSMatt Macydnl # 5.11 API change
4967877fdebSMatt Macydnl # Added bdev_whole() helper.
4977877fdebSMatt Macydnl #
4987877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [
4997877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([bdev_whole], [
5007877fdebSMatt Macy		#include <linux/blkdev.h>
5017877fdebSMatt Macy	],[
5027877fdebSMatt Macy		struct block_device *bdev = NULL;
5037877fdebSMatt Macy		bdev = bdev_whole(bdev);
5047877fdebSMatt Macy	])
5057877fdebSMatt Macy])
5067877fdebSMatt Macy
5077877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [
5087877fdebSMatt Macy	AC_MSG_CHECKING([whether bdev_whole() is available])
5097877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([bdev_whole], [
5107877fdebSMatt Macy		AC_MSG_RESULT(yes)
5117877fdebSMatt Macy		AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available])
5127877fdebSMatt Macy	],[
5137877fdebSMatt Macy		AC_MSG_RESULT(no)
5147877fdebSMatt Macy	])
5157877fdebSMatt Macy])
5167877fdebSMatt Macy
517681ce946SMartin Matuskadnl #
518*75e1fea6SMartin Matuskadnl # 5.16 API change
519*75e1fea6SMartin Matuskadnl # Added bdev_nr_bytes() helper.
520*75e1fea6SMartin Matuskadnl #
521*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES], [
522*75e1fea6SMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_nr_bytes], [
523*75e1fea6SMartin Matuska		#include <linux/blkdev.h>
524*75e1fea6SMartin Matuska	],[
525*75e1fea6SMartin Matuska		struct block_device *bdev = NULL;
526*75e1fea6SMartin Matuska		loff_t nr_bytes __attribute__ ((unused)) = 0;
527*75e1fea6SMartin Matuska		nr_bytes = bdev_nr_bytes(bdev);
528*75e1fea6SMartin Matuska	])
529*75e1fea6SMartin Matuska])
530*75e1fea6SMartin Matuska
531*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES], [
532*75e1fea6SMartin Matuska	AC_MSG_CHECKING([whether bdev_nr_bytes() is available])
533*75e1fea6SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdev_nr_bytes], [
534*75e1fea6SMartin Matuska		AC_MSG_RESULT(yes)
535*75e1fea6SMartin Matuska		AC_DEFINE(HAVE_BDEV_NR_BYTES, 1, [bdev_nr_bytes() is available])
536*75e1fea6SMartin Matuska	],[
537*75e1fea6SMartin Matuska		AC_MSG_RESULT(no)
538*75e1fea6SMartin Matuska	])
539*75e1fea6SMartin Matuska])
540*75e1fea6SMartin Matuska
541*75e1fea6SMartin Matuskadnl #
542271171e0SMartin Matuskadnl # 5.20 API change,
543271171e0SMartin Matuskadnl # Removed bdevname(), snprintf(.., %pg) should be used.
544271171e0SMartin Matuskadnl #
545271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [
546271171e0SMartin Matuska	ZFS_LINUX_TEST_SRC([bdevname], [
547271171e0SMartin Matuska		#include <linux/fs.h>
548271171e0SMartin Matuska		#include <linux/blkdev.h>
549271171e0SMartin Matuska	], [
550271171e0SMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
551271171e0SMartin Matuska		char path[BDEVNAME_SIZE];
552271171e0SMartin Matuska
553271171e0SMartin Matuska		(void) bdevname(bdev, path);
554271171e0SMartin Matuska	])
555271171e0SMartin Matuska])
556271171e0SMartin Matuska
557271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [
558271171e0SMartin Matuska	AC_MSG_CHECKING([whether bdevname() exists])
559271171e0SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdevname], [
560271171e0SMartin Matuska		AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available])
561271171e0SMartin Matuska		AC_MSG_RESULT(yes)
562271171e0SMartin Matuska	], [
563271171e0SMartin Matuska		AC_MSG_RESULT(no)
564271171e0SMartin Matuska	])
565271171e0SMartin Matuska])
566271171e0SMartin Matuska
567271171e0SMartin Matuskadnl #
5681719886fSMartin Matuskadnl # TRIM support: discard and secure erase. We make use of asynchronous
5691719886fSMartin Matuskadnl #               functions when available.
570e3aa18adSMartin Matuskadnl #
5711719886fSMartin Matuskadnl # 3.10:
5721719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
5731719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
5741719886fSMartin Matuskadnl #   async discard: [not available]
5751719886fSMartin Matuskadnl #   async erase:   [not available]
5761719886fSMartin Matuskadnl #
5771719886fSMartin Matuskadnl # 4.7:
5781719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
5791719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
5801719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(..., 0)
5811719886fSMartin Matuskadnl #   async erase:   __blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
5821719886fSMartin Matuskadnl #
5831719886fSMartin Matuskadnl # 5.19:
5841719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(...)
5851719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_secure_erase(...)
5861719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(...)
5871719886fSMartin Matuskadnl #   async erase:   [not available]
5881719886fSMartin Matuskadnl #
5891719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD], [
5901719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_noflags], [
591e3aa18adSMartin Matuska		#include <linux/blkdev.h>
592e3aa18adSMartin Matuska	],[
593e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
594e3aa18adSMartin Matuska		sector_t sector = 0;
595e3aa18adSMartin Matuska		sector_t nr_sects = 0;
596e3aa18adSMartin Matuska		int error __attribute__ ((unused));
597e3aa18adSMartin Matuska
5981719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
599e3aa18adSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
600e3aa18adSMartin Matuska	])
6011719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [
6021719886fSMartin Matuska		#include <linux/blkdev.h>
6031719886fSMartin Matuska	],[
6041719886fSMartin Matuska		struct block_device *bdev = NULL;
6051719886fSMartin Matuska		sector_t sector = 0;
6061719886fSMartin Matuska		sector_t nr_sects = 0;
6071719886fSMartin Matuska		unsigned long flags = 0;
6081719886fSMartin Matuska		int error __attribute__ ((unused));
609e3aa18adSMartin Matuska
6101719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
6111719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags);
6121719886fSMartin Matuska	])
6131719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_noflags], [
6141719886fSMartin Matuska		#include <linux/blkdev.h>
6151719886fSMartin Matuska	],[
6161719886fSMartin Matuska		struct block_device *bdev = NULL;
6171719886fSMartin Matuska		sector_t sector = 0;
6181719886fSMartin Matuska		sector_t nr_sects = 0;
6191719886fSMartin Matuska		struct bio *biop = NULL;
6201719886fSMartin Matuska		int error __attribute__ ((unused));
6211719886fSMartin Matuska
6221719886fSMartin Matuska		error = __blkdev_issue_discard(bdev,
6231719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, &biop);
6241719886fSMartin Matuska	])
625a4e5e010SMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_flags], [
626a4e5e010SMartin Matuska		#include <linux/blkdev.h>
627a4e5e010SMartin Matuska	],[
628a4e5e010SMartin Matuska		struct block_device *bdev = NULL;
629a4e5e010SMartin Matuska		sector_t sector = 0;
630a4e5e010SMartin Matuska		sector_t nr_sects = 0;
631a4e5e010SMartin Matuska		unsigned long flags = 0;
632a4e5e010SMartin Matuska		struct bio *biop = NULL;
633a4e5e010SMartin Matuska		int error __attribute__ ((unused));
634a4e5e010SMartin Matuska
635a4e5e010SMartin Matuska		error = __blkdev_issue_discard(bdev,
636a4e5e010SMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags, &biop);
637a4e5e010SMartin Matuska	])
6381719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [
639e3aa18adSMartin Matuska		#include <linux/blkdev.h>
640e3aa18adSMartin Matuska	],[
641e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
642e3aa18adSMartin Matuska		sector_t sector = 0;
643e3aa18adSMartin Matuska		sector_t nr_sects = 0;
644e3aa18adSMartin Matuska		int error __attribute__ ((unused));
645e3aa18adSMartin Matuska
6461719886fSMartin Matuska		error = blkdev_issue_secure_erase(bdev,
6471719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
648e3aa18adSMartin Matuska	])
649e3aa18adSMartin Matuska])
650e3aa18adSMartin Matuska
6511719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD], [
6521719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard() is available])
6531719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_noflags], [
6541719886fSMartin Matuska		AC_MSG_RESULT(yes)
6551719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_NOFLAGS, 1,
6561719886fSMartin Matuska		    [blkdev_issue_discard() is available])
6571719886fSMartin Matuska	],[
6581719886fSMartin Matuska		AC_MSG_RESULT(no)
6591719886fSMartin Matuska	])
6601719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard(flags) is available])
6611719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [
6621719886fSMartin Matuska		AC_MSG_RESULT(yes)
6631719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_FLAGS, 1,
6641719886fSMartin Matuska		    [blkdev_issue_discard(flags) is available])
6651719886fSMartin Matuska	],[
6661719886fSMartin Matuska		AC_MSG_RESULT(no)
6671719886fSMartin Matuska	])
6681719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard() is available])
6691719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_noflags], [
6701719886fSMartin Matuska		AC_MSG_RESULT(yes)
6711719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_NOFLAGS, 1,
6721719886fSMartin Matuska		    [__blkdev_issue_discard() is available])
6731719886fSMartin Matuska	],[
6741719886fSMartin Matuska		AC_MSG_RESULT(no)
6751719886fSMartin Matuska	])
6761719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard(flags) is available])
6771719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_flags], [
6781719886fSMartin Matuska		AC_MSG_RESULT(yes)
6791719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_FLAGS, 1,
6801719886fSMartin Matuska		    [__blkdev_issue_discard(flags) is available])
6811719886fSMartin Matuska	],[
6821719886fSMartin Matuska		AC_MSG_RESULT(no)
6831719886fSMartin Matuska	])
684e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available])
685e3aa18adSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [
686e3aa18adSMartin Matuska		AC_MSG_RESULT(yes)
687e3aa18adSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1,
688e3aa18adSMartin Matuska		    [blkdev_issue_secure_erase() is available])
689e3aa18adSMartin Matuska	],[
690e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
691e3aa18adSMartin Matuska	])
692a4e5e010SMartin Matuska])
693e3aa18adSMartin Matuska
694e3aa18adSMartin Matuskadnl #
695681ce946SMartin Matuskadnl # 5.13 API change
696681ce946SMartin Matuskadnl # blkdev_get_by_path() no longer handles ERESTARTSYS
697681ce946SMartin Matuskadnl #
698681ce946SMartin Matuskadnl # Unfortunately we're forced to rely solely on the kernel version
699681ce946SMartin Matuskadnl # number in order to determine the expected behavior.  This was an
700681ce946SMartin Matuskadnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607.
701681ce946SMartin Matuskadnl #
702681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [
703681ce946SMartin Matuska	AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS])
704681ce946SMartin Matuska	AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [
705681ce946SMartin Matuska		AC_MSG_RESULT(yes)
706681ce946SMartin Matuska		AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1,
707681ce946SMartin Matuska			[blkdev_get_by_path() handles ERESTARTSYS])
708681ce946SMartin Matuska	],[
709681ce946SMartin Matuska		AC_MSG_RESULT(no)
710681ce946SMartin Matuska	],[
711681ce946SMartin Matuska		AC_MSG_RESULT(no)
712681ce946SMartin Matuska	])
713681ce946SMartin Matuska])
714681ce946SMartin Matuska
715315ee00fSMartin Matuskadnl #
716315ee00fSMartin Matuskadnl # 6.5.x API change
717315ee00fSMartin Matuskadnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT
718315ee00fSMartin Matuskadnl #
719315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [
720315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [
721315ee00fSMartin Matuska		#include <linux/blkdev.h>
722315ee00fSMartin Matuska	],[
723315ee00fSMartin Matuska		blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT;
724315ee00fSMartin Matuska	])
725315ee00fSMartin Matuska])
726315ee00fSMartin Matuska
727315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [
728315ee00fSMartin Matuska	AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined])
729315ee00fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [
730315ee00fSMartin Matuska			AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined])
731315ee00fSMartin Matuska			AC_MSG_RESULT(yes)
732315ee00fSMartin Matuska		], [
733315ee00fSMartin Matuska			AC_MSG_RESULT(no)
734315ee00fSMartin Matuska		])
735315ee00fSMartin Matuska	])
736315ee00fSMartin Matuska])
737315ee00fSMartin Matuska
738eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
739eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
740315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG
741fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH
7421719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH
743eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_PUT
744315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER
745fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE
746eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
747eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
748eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
749eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
750eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7517877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE
7527877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7537877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE
754*75e1fea6SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES
755271171e0SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME
7561719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD
757be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ
758be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV
759315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE
760315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT
761315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T
762eda14cbcSMatt Macy])
763eda14cbcSMatt Macy
764eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
765eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
766eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_PUT
767eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_REREAD_PART
768eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
769eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
770eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
771eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7727877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE
7737877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7747877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE
775*75e1fea6SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES
776271171e0SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEVNAME
777681ce946SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS
7781719886fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD
779be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ
780be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV
781315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE
782315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT
783315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T
784eda14cbcSMatt Macy])
785