xref: /freebsd/sys/contrib/openzfs/config/kernel-blkdev.m4 (revision 75e1fea68aaa613a20dfdcd0c59dd403aca02c49)
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.
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 #
538*75e1fea6SMartin Matuskadnl # 5.16 API change
539*75e1fea6SMartin Matuskadnl # Added bdev_nr_bytes() helper.
540*75e1fea6SMartin Matuskadnl #
541*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES], [
542*75e1fea6SMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_nr_bytes], [
543*75e1fea6SMartin Matuska		#include <linux/blkdev.h>
544*75e1fea6SMartin Matuska	],[
545*75e1fea6SMartin Matuska		struct block_device *bdev = NULL;
546*75e1fea6SMartin Matuska		loff_t nr_bytes __attribute__ ((unused)) = 0;
547*75e1fea6SMartin Matuska		nr_bytes = bdev_nr_bytes(bdev);
548*75e1fea6SMartin Matuska	])
549*75e1fea6SMartin Matuska])
550*75e1fea6SMartin Matuska
551*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES], [
552*75e1fea6SMartin Matuska	AC_MSG_CHECKING([whether bdev_nr_bytes() is available])
553*75e1fea6SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdev_nr_bytes], [
554*75e1fea6SMartin Matuska		AC_MSG_RESULT(yes)
555*75e1fea6SMartin Matuska		AC_DEFINE(HAVE_BDEV_NR_BYTES, 1, [bdev_nr_bytes() is available])
556*75e1fea6SMartin Matuska	],[
557*75e1fea6SMartin Matuska		AC_MSG_RESULT(no)
558*75e1fea6SMartin Matuska	])
559*75e1fea6SMartin Matuska])
560*75e1fea6SMartin Matuska
561*75e1fea6SMartin Matuskadnl #
562271171e0SMartin Matuskadnl # 5.20 API change,
563271171e0SMartin Matuskadnl # Removed bdevname(), snprintf(.., %pg) should be used.
564271171e0SMartin Matuskadnl #
565271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [
566271171e0SMartin Matuska	ZFS_LINUX_TEST_SRC([bdevname], [
567271171e0SMartin Matuska		#include <linux/fs.h>
568271171e0SMartin Matuska		#include <linux/blkdev.h>
569271171e0SMartin Matuska	], [
570271171e0SMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
571271171e0SMartin Matuska		char path[BDEVNAME_SIZE];
572271171e0SMartin Matuska
573271171e0SMartin Matuska		(void) bdevname(bdev, path);
574271171e0SMartin Matuska	])
575271171e0SMartin Matuska])
576271171e0SMartin Matuska
577271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [
578271171e0SMartin Matuska	AC_MSG_CHECKING([whether bdevname() exists])
579271171e0SMartin Matuska	ZFS_LINUX_TEST_RESULT([bdevname], [
580271171e0SMartin Matuska		AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available])
581271171e0SMartin Matuska		AC_MSG_RESULT(yes)
582271171e0SMartin Matuska	], [
583271171e0SMartin Matuska		AC_MSG_RESULT(no)
584271171e0SMartin Matuska	])
585271171e0SMartin Matuska])
586271171e0SMartin Matuska
587271171e0SMartin Matuskadnl #
5881719886fSMartin Matuskadnl # TRIM support: discard and secure erase. We make use of asynchronous
5891719886fSMartin Matuskadnl #               functions when available.
590e3aa18adSMartin Matuskadnl #
5911719886fSMartin Matuskadnl # 3.10:
5921719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
5931719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
5941719886fSMartin Matuskadnl #   async discard: [not available]
5951719886fSMartin Matuskadnl #   async erase:   [not available]
5961719886fSMartin Matuskadnl #
5971719886fSMartin Matuskadnl # 4.7:
5981719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(..., 0)
5991719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
6001719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(..., 0)
6011719886fSMartin Matuskadnl #   async erase:   __blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
6021719886fSMartin Matuskadnl #
6031719886fSMartin Matuskadnl # 5.19:
6041719886fSMartin Matuskadnl #   sync discard:  blkdev_issue_discard(...)
6051719886fSMartin Matuskadnl #   sync erase:    blkdev_issue_secure_erase(...)
6061719886fSMartin Matuskadnl #   async discard: __blkdev_issue_discard(...)
6071719886fSMartin Matuskadnl #   async erase:   [not available]
6081719886fSMartin Matuskadnl #
6091719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD], [
6101719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_noflags], [
611e3aa18adSMartin Matuska		#include <linux/blkdev.h>
612e3aa18adSMartin Matuska	],[
613e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
614e3aa18adSMartin Matuska		sector_t sector = 0;
615e3aa18adSMartin Matuska		sector_t nr_sects = 0;
616e3aa18adSMartin Matuska		int error __attribute__ ((unused));
617e3aa18adSMartin Matuska
6181719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
619e3aa18adSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
620e3aa18adSMartin Matuska	])
6211719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [
6221719886fSMartin Matuska		#include <linux/blkdev.h>
6231719886fSMartin Matuska	],[
6241719886fSMartin Matuska		struct block_device *bdev = NULL;
6251719886fSMartin Matuska		sector_t sector = 0;
6261719886fSMartin Matuska		sector_t nr_sects = 0;
6271719886fSMartin Matuska		unsigned long flags = 0;
6281719886fSMartin Matuska		int error __attribute__ ((unused));
629e3aa18adSMartin Matuska
6301719886fSMartin Matuska		error = blkdev_issue_discard(bdev,
6311719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags);
6321719886fSMartin Matuska	])
6331719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_noflags], [
6341719886fSMartin Matuska		#include <linux/blkdev.h>
6351719886fSMartin Matuska	],[
6361719886fSMartin Matuska		struct block_device *bdev = NULL;
6371719886fSMartin Matuska		sector_t sector = 0;
6381719886fSMartin Matuska		sector_t nr_sects = 0;
6391719886fSMartin Matuska		struct bio *biop = NULL;
6401719886fSMartin Matuska		int error __attribute__ ((unused));
6411719886fSMartin Matuska
6421719886fSMartin Matuska		error = __blkdev_issue_discard(bdev,
6431719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL, &biop);
6441719886fSMartin Matuska	])
645a4e5e010SMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_flags], [
646a4e5e010SMartin Matuska		#include <linux/blkdev.h>
647a4e5e010SMartin Matuska	],[
648a4e5e010SMartin Matuska		struct block_device *bdev = NULL;
649a4e5e010SMartin Matuska		sector_t sector = 0;
650a4e5e010SMartin Matuska		sector_t nr_sects = 0;
651a4e5e010SMartin Matuska		unsigned long flags = 0;
652a4e5e010SMartin Matuska		struct bio *biop = NULL;
653a4e5e010SMartin Matuska		int error __attribute__ ((unused));
654a4e5e010SMartin Matuska
655a4e5e010SMartin Matuska		error = __blkdev_issue_discard(bdev,
656a4e5e010SMartin Matuska		    sector, nr_sects, GFP_KERNEL, flags, &biop);
657a4e5e010SMartin Matuska	])
6581719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [
659e3aa18adSMartin Matuska		#include <linux/blkdev.h>
660e3aa18adSMartin Matuska	],[
661e3aa18adSMartin Matuska		struct block_device *bdev = NULL;
662e3aa18adSMartin Matuska		sector_t sector = 0;
663e3aa18adSMartin Matuska		sector_t nr_sects = 0;
664e3aa18adSMartin Matuska		int error __attribute__ ((unused));
665e3aa18adSMartin Matuska
6661719886fSMartin Matuska		error = blkdev_issue_secure_erase(bdev,
6671719886fSMartin Matuska		    sector, nr_sects, GFP_KERNEL);
668e3aa18adSMartin Matuska	])
669e3aa18adSMartin Matuska])
670e3aa18adSMartin Matuska
6711719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD], [
6721719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard() is available])
6731719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_noflags], [
6741719886fSMartin Matuska		AC_MSG_RESULT(yes)
6751719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_NOFLAGS, 1,
6761719886fSMartin Matuska		    [blkdev_issue_discard() is available])
6771719886fSMartin Matuska	],[
6781719886fSMartin Matuska		AC_MSG_RESULT(no)
6791719886fSMartin Matuska	])
6801719886fSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_discard(flags) is available])
6811719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [
6821719886fSMartin Matuska		AC_MSG_RESULT(yes)
6831719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_FLAGS, 1,
6841719886fSMartin Matuska		    [blkdev_issue_discard(flags) is available])
6851719886fSMartin Matuska	],[
6861719886fSMartin Matuska		AC_MSG_RESULT(no)
6871719886fSMartin Matuska	])
6881719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard() is available])
6891719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_noflags], [
6901719886fSMartin Matuska		AC_MSG_RESULT(yes)
6911719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_NOFLAGS, 1,
6921719886fSMartin Matuska		    [__blkdev_issue_discard() is available])
6931719886fSMartin Matuska	],[
6941719886fSMartin Matuska		AC_MSG_RESULT(no)
6951719886fSMartin Matuska	])
6961719886fSMartin Matuska	AC_MSG_CHECKING([whether __blkdev_issue_discard(flags) is available])
6971719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_flags], [
6981719886fSMartin Matuska		AC_MSG_RESULT(yes)
6991719886fSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_FLAGS, 1,
7001719886fSMartin Matuska		    [__blkdev_issue_discard(flags) is available])
7011719886fSMartin Matuska	],[
7021719886fSMartin Matuska		AC_MSG_RESULT(no)
7031719886fSMartin Matuska	])
704e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available])
705e3aa18adSMartin Matuska	ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [
706e3aa18adSMartin Matuska		AC_MSG_RESULT(yes)
707e3aa18adSMartin Matuska		AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1,
708e3aa18adSMartin Matuska		    [blkdev_issue_secure_erase() is available])
709e3aa18adSMartin Matuska	],[
710e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
711e3aa18adSMartin Matuska	])
712a4e5e010SMartin Matuska])
713e3aa18adSMartin Matuska
714e3aa18adSMartin Matuskadnl #
715681ce946SMartin Matuskadnl # 5.13 API change
716681ce946SMartin Matuskadnl # blkdev_get_by_path() no longer handles ERESTARTSYS
717681ce946SMartin Matuskadnl #
718681ce946SMartin Matuskadnl # Unfortunately we're forced to rely solely on the kernel version
719681ce946SMartin Matuskadnl # number in order to determine the expected behavior.  This was an
720681ce946SMartin Matuskadnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607.
721681ce946SMartin Matuskadnl #
722681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [
723681ce946SMartin Matuska	AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS])
724681ce946SMartin Matuska	AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [
725681ce946SMartin Matuska		AC_MSG_RESULT(yes)
726681ce946SMartin Matuska		AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1,
727681ce946SMartin Matuska			[blkdev_get_by_path() handles ERESTARTSYS])
728681ce946SMartin Matuska	],[
729681ce946SMartin Matuska		AC_MSG_RESULT(no)
730681ce946SMartin Matuska	],[
731681ce946SMartin Matuska		AC_MSG_RESULT(no)
732681ce946SMartin Matuska	])
733681ce946SMartin Matuska])
734681ce946SMartin Matuska
735315ee00fSMartin Matuskadnl #
736315ee00fSMartin Matuskadnl # 6.5.x API change
737315ee00fSMartin Matuskadnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT
738315ee00fSMartin Matuskadnl #
739315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [
740315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [
741315ee00fSMartin Matuska		#include <linux/blkdev.h>
742315ee00fSMartin Matuska	],[
743315ee00fSMartin Matuska		blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT;
744315ee00fSMartin Matuska	])
745315ee00fSMartin Matuska])
746315ee00fSMartin Matuska
747315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [
748315ee00fSMartin Matuska	AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined])
749315ee00fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [
750315ee00fSMartin Matuska			AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined])
751315ee00fSMartin Matuska			AC_MSG_RESULT(yes)
752315ee00fSMartin Matuska		], [
753315ee00fSMartin Matuska			AC_MSG_RESULT(no)
754315ee00fSMartin Matuska		])
755315ee00fSMartin Matuska	])
756315ee00fSMartin Matuska])
757315ee00fSMartin Matuska
758eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
759eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
760315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG
761fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH
7621719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH
763eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_PUT
764315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER
765fd45b686SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE
766eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
767eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
768eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
769eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
770eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7717877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE
7727877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7737877fdebSMatt Macy	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE
774*75e1fea6SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES
775271171e0SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME
7761719886fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD
777be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ
778be181ee2SMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV
779315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE
780315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT
781315ee00fSMartin Matuska	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T
782eda14cbcSMatt Macy])
783eda14cbcSMatt Macy
784eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
785eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
786eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_PUT
787eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_REREAD_PART
788eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
789eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
790eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
791eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
7927877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE
7937877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
7947877fdebSMatt Macy	ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE
795*75e1fea6SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES
796271171e0SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEVNAME
797681ce946SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS
7981719886fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD
799be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ
800be181ee2SMartin Matuska	ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV
801315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE
802315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT
803315ee00fSMartin Matuska	ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T
804eda14cbcSMatt Macy])
805