1dnl #
2dnl # 2.6.38 API change,
3dnl # Added blkdev_get_by_path()
4dnl #
5AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH], [
6	ZFS_LINUX_TEST_SRC([blkdev_get_by_path], [
7		#include <linux/fs.h>
8		#include <linux/blkdev.h>
9	], [
10		struct block_device *bdev __attribute__ ((unused)) = NULL;
11		const char *path = "path";
12		fmode_t mode = 0;
13		void *holder = NULL;
14
15		bdev = blkdev_get_by_path(path, mode, holder);
16	])
17])
18
19dnl #
20dnl # 6.5.x API change,
21dnl # blkdev_get_by_path() takes 4 args
22dnl #
23AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG], [
24	ZFS_LINUX_TEST_SRC([blkdev_get_by_path_4arg], [
25		#include <linux/fs.h>
26		#include <linux/blkdev.h>
27	], [
28		struct block_device *bdev __attribute__ ((unused)) = NULL;
29		const char *path = "path";
30		fmode_t mode = 0;
31		void *holder = NULL;
32		struct blk_holder_ops h;
33
34		bdev = blkdev_get_by_path(path, mode, holder, &h);
35	])
36])
37
38AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [
39	AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 3 args])
40	ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [
41		AC_MSG_RESULT(yes)
42	], [
43		AC_MSG_RESULT(no)
44		AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 4 args])
45		ZFS_LINUX_TEST_RESULT([blkdev_get_by_path_4arg], [
46			AC_DEFINE(HAVE_BLKDEV_GET_BY_PATH_4ARG, 1,
47				[blkdev_get_by_path() exists and takes 4 args])
48			AC_MSG_RESULT(yes)
49		], [
50			ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()])
51		])
52	])
53])
54
55dnl #
56dnl # 6.5.x API change
57dnl # blk_mode_t was added as a type to supercede some places where fmode_t
58dnl # is used
59dnl #
60AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T], [
61	ZFS_LINUX_TEST_SRC([blk_mode_t], [
62		#include <linux/fs.h>
63		#include <linux/blkdev.h>
64	], [
65		blk_mode_t m __attribute((unused)) = (blk_mode_t)0;
66	])
67])
68
69AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T], [
70	AC_MSG_CHECKING([whether blk_mode_t is defined])
71	ZFS_LINUX_TEST_RESULT([blk_mode_t], [
72		AC_MSG_RESULT(yes)
73		AC_DEFINE(HAVE_BLK_MODE_T, 1, [blk_mode_t is defined])
74	], [
75		AC_MSG_RESULT(no)
76	])
77])
78
79dnl #
80dnl # 2.6.38 API change,
81dnl # Added blkdev_put()
82dnl #
83AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [
84	ZFS_LINUX_TEST_SRC([blkdev_put], [
85		#include <linux/fs.h>
86		#include <linux/blkdev.h>
87	], [
88		struct block_device *bdev = NULL;
89		fmode_t mode = 0;
90
91		blkdev_put(bdev, mode);
92	])
93])
94
95dnl #
96dnl # 6.5.x API change.
97dnl # blkdev_put() takes (void* holder) as arg 2
98dnl #
99AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER], [
100	ZFS_LINUX_TEST_SRC([blkdev_put_holder], [
101		#include <linux/fs.h>
102		#include <linux/blkdev.h>
103	], [
104		struct block_device *bdev = NULL;
105		void *holder = NULL;
106
107		blkdev_put(bdev, holder);
108	])
109])
110
111AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [
112	AC_MSG_CHECKING([whether blkdev_put() exists])
113	ZFS_LINUX_TEST_RESULT([blkdev_put], [
114		AC_MSG_RESULT(yes)
115	], [
116		AC_MSG_CHECKING([whether blkdev_put() accepts void* as arg 2])
117		ZFS_LINUX_TEST_RESULT([blkdev_put_holder], [
118			AC_MSG_RESULT(yes)
119			AC_DEFINE(HAVE_BLKDEV_PUT_HOLDER, 1,
120				[blkdev_put() accepts void* as arg 2])
121		], [
122			ZFS_LINUX_TEST_ERROR([blkdev_put()])
123		])
124	])
125])
126
127dnl #
128dnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the
129dnl # 3.10.0 CentOS 7.x enterprise kernels.
130dnl #
131AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [
132	ZFS_LINUX_TEST_SRC([blkdev_reread_part], [
133		#include <linux/fs.h>
134		#include <linux/blkdev.h>
135	], [
136		struct block_device *bdev = NULL;
137		int error;
138
139		error = blkdev_reread_part(bdev);
140	])
141])
142
143AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [
144	AC_MSG_CHECKING([whether blkdev_reread_part() exists])
145	ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [
146		AC_MSG_RESULT(yes)
147		AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1,
148		    [blkdev_reread_part() exists])
149	], [
150		AC_MSG_RESULT(no)
151	])
152])
153
154dnl #
155dnl # check_disk_change() was removed in 5.10
156dnl #
157AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE], [
158	ZFS_LINUX_TEST_SRC([check_disk_change], [
159		#include <linux/fs.h>
160		#include <linux/blkdev.h>
161	], [
162		struct block_device *bdev = NULL;
163		bool error;
164
165		error = check_disk_change(bdev);
166	])
167])
168
169AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE], [
170	AC_MSG_CHECKING([whether check_disk_change() exists])
171	ZFS_LINUX_TEST_RESULT([check_disk_change], [
172		AC_MSG_RESULT(yes)
173		AC_DEFINE(HAVE_CHECK_DISK_CHANGE, 1,
174		    [check_disk_change() exists])
175	], [
176		AC_MSG_RESULT(no)
177	])
178])
179
180dnl #
181dnl # 6.5.x API change
182dnl # disk_check_media_change() was added
183dnl #
184AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [
185	ZFS_LINUX_TEST_SRC([disk_check_media_change], [
186		#include <linux/fs.h>
187		#include <linux/blkdev.h>
188	], [
189		struct block_device *bdev = NULL;
190		bool error;
191
192		error = disk_check_media_change(bdev->bd_disk);
193	])
194])
195
196AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [
197	AC_MSG_CHECKING([whether disk_check_media_change() exists])
198	ZFS_LINUX_TEST_RESULT([disk_check_media_change], [
199		AC_MSG_RESULT(yes)
200		AC_DEFINE(HAVE_DISK_CHECK_MEDIA_CHANGE, 1,
201		    [disk_check_media_change() exists])
202	], [
203		AC_MSG_RESULT(no)
204	])
205])
206
207dnl #
208dnl # bdev_kobj() is introduced from 5.12
209dnl #
210AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ], [
211	ZFS_LINUX_TEST_SRC([bdev_kobj], [
212		#include <linux/fs.h>
213		#include <linux/blkdev.h>
214		#include <linux/kobject.h>
215	], [
216		struct block_device *bdev = NULL;
217		struct kobject *disk_kobj;
218		disk_kobj = bdev_kobj(bdev);
219	])
220])
221
222AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ], [
223	AC_MSG_CHECKING([whether bdev_kobj() exists])
224	ZFS_LINUX_TEST_RESULT([bdev_kobj], [
225		AC_MSG_RESULT(yes)
226		AC_DEFINE(HAVE_BDEV_KOBJ, 1,
227		    [bdev_kobj() exists])
228	], [
229		AC_MSG_RESULT(no)
230	])
231])
232
233dnl #
234dnl # part_to_dev() was removed in 5.12
235dnl #
236AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV], [
237	ZFS_LINUX_TEST_SRC([part_to_dev], [
238		#include <linux/fs.h>
239		#include <linux/blkdev.h>
240	], [
241		struct hd_struct *p = NULL;
242		struct device *pdev;
243		pdev = part_to_dev(p);
244	])
245])
246
247AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV], [
248	AC_MSG_CHECKING([whether part_to_dev() exists])
249	ZFS_LINUX_TEST_RESULT([part_to_dev], [
250		AC_MSG_RESULT(yes)
251		AC_DEFINE(HAVE_PART_TO_DEV, 1,
252		    [part_to_dev() exists])
253	], [
254		AC_MSG_RESULT(no)
255	])
256])
257
258dnl #
259dnl # 5.10 API, check_disk_change() is removed, in favor of
260dnl # bdev_check_media_change(), which doesn't force revalidation
261dnl #
262AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
263	ZFS_LINUX_TEST_SRC([bdev_check_media_change], [
264		#include <linux/fs.h>
265		#include <linux/blkdev.h>
266	], [
267		struct block_device *bdev = NULL;
268		int error;
269
270		error = bdev_check_media_change(bdev);
271	])
272])
273
274AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [
275	AC_MSG_CHECKING([whether bdev_check_media_change() exists])
276	ZFS_LINUX_TEST_RESULT([bdev_check_media_change], [
277		AC_MSG_RESULT(yes)
278		AC_DEFINE(HAVE_BDEV_CHECK_MEDIA_CHANGE, 1,
279		    [bdev_check_media_change() exists])
280	], [
281		AC_MSG_RESULT(no)
282	])
283])
284
285dnl #
286dnl # 2.6.22 API change
287dnl # Single argument invalidate_bdev()
288dnl #
289AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [
290	ZFS_LINUX_TEST_SRC([invalidate_bdev], [
291		#include <linux/buffer_head.h>
292		#include <linux/blkdev.h>
293	],[
294		struct block_device *bdev = NULL;
295		invalidate_bdev(bdev);
296	])
297])
298
299AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [
300	AC_MSG_CHECKING([whether invalidate_bdev() exists])
301	ZFS_LINUX_TEST_RESULT([invalidate_bdev], [
302		AC_MSG_RESULT(yes)
303	],[
304		ZFS_LINUX_TEST_ERROR([invalidate_bdev()])
305	])
306])
307
308dnl #
309dnl # 5.11 API, lookup_bdev() takes dev_t argument.
310dnl # 2.6.27 API, lookup_bdev() was first exported.
311dnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument.
312dnl #
313AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [
314	ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [
315		#include <linux/blkdev.h>
316	], [
317		int error __attribute__ ((unused));
318		const char path[] = "/example/path";
319		dev_t dev;
320
321		error = lookup_bdev(path, &dev);
322	])
323
324	ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [
325		#include <linux/fs.h>
326		#include <linux/blkdev.h>
327	], [
328		struct block_device *bdev __attribute__ ((unused));
329		const char path[] = "/example/path";
330
331		bdev = lookup_bdev(path);
332	])
333
334	ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [
335		#include <linux/fs.h>
336	], [
337		struct block_device *bdev __attribute__ ((unused));
338		const char path[] = "/example/path";
339
340		bdev = lookup_bdev(path, FMODE_READ);
341	])
342])
343
344AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [
345	AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg])
346	ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt],
347	    [lookup_bdev], [fs/block_dev.c], [
348		AC_MSG_RESULT(yes)
349		AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1,
350		    [lookup_bdev() wants dev_t arg])
351	], [
352		AC_MSG_RESULT(no)
353
354		AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg])
355		ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg],
356		    [lookup_bdev], [fs/block_dev.c], [
357			AC_MSG_RESULT(yes)
358			AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1,
359			    [lookup_bdev() wants 1 arg])
360		], [
361			AC_MSG_RESULT(no)
362
363			AC_MSG_CHECKING([whether lookup_bdev() wants mode arg])
364			ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode],
365			    [lookup_bdev], [fs/block_dev.c], [
366				AC_MSG_RESULT(yes)
367				AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1,
368				    [lookup_bdev() wants mode arg])
369			], [
370				ZFS_LINUX_TEST_ERROR([lookup_bdev()])
371			])
372		])
373	])
374])
375
376dnl #
377dnl # 2.6.30 API change
378dnl #
379dnl # The bdev_physical_block_size() interface was added to provide a way
380dnl # to determine the smallest write which can be performed without a
381dnl # read-modify-write operation.
382dnl #
383dnl # Unfortunately, this interface isn't entirely reliable because
384dnl # drives are sometimes known to misreport this value.
385dnl #
386AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
387	ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [
388		#include <linux/blkdev.h>
389	],[
390		struct block_device *bdev __attribute__ ((unused)) = NULL;
391		bdev_physical_block_size(bdev);
392	])
393])
394
395AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [
396	AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
397	ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [
398		AC_MSG_RESULT(yes)
399	],[
400		ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()])
401	])
402])
403
404dnl #
405dnl # 2.6.30 API change
406dnl # Added bdev_logical_block_size().
407dnl #
408AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
409	ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [
410		#include <linux/blkdev.h>
411	],[
412		struct block_device *bdev __attribute__ ((unused)) = NULL;
413		bdev_logical_block_size(bdev);
414	])
415])
416
417AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [
418	AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
419	ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [
420		AC_MSG_RESULT(yes)
421	],[
422		ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()])
423	])
424])
425
426dnl #
427dnl # 5.11 API change
428dnl # Added bdev_whole() helper.
429dnl #
430AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [
431	ZFS_LINUX_TEST_SRC([bdev_whole], [
432		#include <linux/blkdev.h>
433	],[
434		struct block_device *bdev = NULL;
435		bdev = bdev_whole(bdev);
436	])
437])
438
439AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [
440	AC_MSG_CHECKING([whether bdev_whole() is available])
441	ZFS_LINUX_TEST_RESULT([bdev_whole], [
442		AC_MSG_RESULT(yes)
443		AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available])
444	],[
445		AC_MSG_RESULT(no)
446	])
447])
448
449dnl #
450dnl # 5.20 API change,
451dnl # Removed bdevname(), snprintf(.., %pg) should be used.
452dnl #
453AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [
454	ZFS_LINUX_TEST_SRC([bdevname], [
455		#include <linux/fs.h>
456		#include <linux/blkdev.h>
457	], [
458		struct block_device *bdev __attribute__ ((unused)) = NULL;
459		char path[BDEVNAME_SIZE];
460
461		(void) bdevname(bdev, path);
462	])
463])
464
465AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [
466	AC_MSG_CHECKING([whether bdevname() exists])
467	ZFS_LINUX_TEST_RESULT([bdevname], [
468		AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available])
469		AC_MSG_RESULT(yes)
470	], [
471		AC_MSG_RESULT(no)
472	])
473])
474
475dnl #
476dnl # 5.19 API: blkdev_issue_secure_erase()
477dnl # 3.10 API: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE)
478dnl #
479AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_SECURE_ERASE], [
480	ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [
481		#include <linux/blkdev.h>
482	],[
483		struct block_device *bdev = NULL;
484		sector_t sector = 0;
485		sector_t nr_sects = 0;
486		int error __attribute__ ((unused));
487
488		error = blkdev_issue_secure_erase(bdev,
489		    sector, nr_sects, GFP_KERNEL);
490	])
491
492	ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [
493		#include <linux/blkdev.h>
494	],[
495		struct block_device *bdev = NULL;
496		sector_t sector = 0;
497		sector_t nr_sects = 0;
498		unsigned long flags = 0;
499		int error __attribute__ ((unused));
500
501		error = blkdev_issue_discard(bdev,
502		    sector, nr_sects, GFP_KERNEL, flags);
503	])
504])
505
506AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_SECURE_ERASE], [
507	AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available])
508	ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [
509		AC_MSG_RESULT(yes)
510		AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1,
511		    [blkdev_issue_secure_erase() is available])
512	],[
513		AC_MSG_RESULT(no)
514
515		AC_MSG_CHECKING([whether blkdev_issue_discard() is available])
516		ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [
517			AC_MSG_RESULT(yes)
518			AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD, 1,
519			    [blkdev_issue_discard() is available])
520		],[
521			ZFS_LINUX_TEST_ERROR([blkdev_issue_discard()])
522		])
523	])
524])
525
526dnl #
527dnl # 5.13 API change
528dnl # blkdev_get_by_path() no longer handles ERESTARTSYS
529dnl #
530dnl # Unfortunately we're forced to rely solely on the kernel version
531dnl # number in order to determine the expected behavior.  This was an
532dnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607.
533dnl #
534AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [
535	AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS])
536	AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [
537		AC_MSG_RESULT(yes)
538		AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1,
539			[blkdev_get_by_path() handles ERESTARTSYS])
540	],[
541		AC_MSG_RESULT(no)
542	],[
543		AC_MSG_RESULT(no)
544	])
545])
546
547dnl #
548dnl # 6.5.x API change
549dnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT
550dnl #
551AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [
552	ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [
553		#include <linux/blkdev.h>
554	],[
555		blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT;
556	])
557])
558
559AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [
560	AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined])
561		ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [
562			AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined])
563			AC_MSG_RESULT(yes)
564		], [
565			AC_MSG_RESULT(no)
566		])
567	])
568])
569
570AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [
571	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
572	ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG
573	ZFS_AC_KERNEL_SRC_BLKDEV_PUT
574	ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER
575	ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
576	ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV
577	ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV
578	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
579	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
580	ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE
581	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
582	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE
583	ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME
584	ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_SECURE_ERASE
585	ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ
586	ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV
587	ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE
588	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT
589	ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T
590])
591
592AC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [
593	ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
594	ZFS_AC_KERNEL_BLKDEV_PUT
595	ZFS_AC_KERNEL_BLKDEV_REREAD_PART
596	ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV
597	ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV
598	ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE
599	ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE
600	ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE
601	ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE
602	ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE
603	ZFS_AC_KERNEL_BLKDEV_BDEVNAME
604	ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS
605	ZFS_AC_KERNEL_BLKDEV_ISSUE_SECURE_ERASE
606	ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ
607	ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV
608	ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE
609	ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT
610	ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T
611])
612