1dnl #
2dnl # 2.6.38 API change
3dnl #
4AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS], [
5	ZFS_LINUX_TEST_SRC([block_device_operations_check_events], [
6		#include <linux/blkdev.h>
7
8		unsigned int blk_check_events(struct gendisk *disk,
9		    unsigned int clearing) { return (0); }
10
11		static const struct block_device_operations
12		    bops __attribute__ ((unused)) = {
13			.check_events	= blk_check_events,
14		};
15	], [], [$NO_UNUSED_BUT_SET_VARIABLE])
16])
17
18AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS], [
19	AC_MSG_CHECKING([whether bops->check_events() exists])
20	ZFS_LINUX_TEST_RESULT([block_device_operations_check_events], [
21		AC_MSG_RESULT(yes)
22	],[
23		ZFS_LINUX_TEST_ERROR([bops->check_events()])
24	])
25])
26
27dnl #
28dnl # 3.10.x API change
29dnl #
30AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [
31	ZFS_LINUX_TEST_SRC([block_device_operations_release_void], [
32		#include <linux/blkdev.h>
33
34		void blk_release(struct gendisk *g, fmode_t mode) { return; }
35
36		static const struct block_device_operations
37		    bops __attribute__ ((unused)) = {
38			.open		= NULL,
39			.release	= blk_release,
40			.ioctl		= NULL,
41			.compat_ioctl	= NULL,
42		};
43	], [], [$NO_UNUSED_BUT_SET_VARIABLE])
44])
45
46AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [
47	AC_MSG_CHECKING([whether bops->release() is void])
48	ZFS_LINUX_TEST_RESULT([block_device_operations_release_void], [
49		AC_MSG_RESULT(yes)
50	],[
51		ZFS_LINUX_TEST_ERROR([bops->release()])
52	])
53])
54
55dnl #
56dnl # 5.13 API change
57dnl # block_device_operations->revalidate_disk() was removed
58dnl #
59AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [
60	ZFS_LINUX_TEST_SRC([block_device_operations_revalidate_disk], [
61		#include <linux/blkdev.h>
62
63		int blk_revalidate_disk(struct gendisk *disk) {
64			return(0);
65		}
66
67		static const struct block_device_operations
68		    bops __attribute__ ((unused)) = {
69			.revalidate_disk	= blk_revalidate_disk,
70		};
71	], [], [$NO_UNUSED_BUT_SET_VARIABLE])
72])
73
74AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [
75	AC_MSG_CHECKING([whether bops->revalidate_disk() exists])
76	ZFS_LINUX_TEST_RESULT([block_device_operations_revalidate_disk], [
77		AC_DEFINE([HAVE_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [1],
78			[Define if revalidate_disk() in block_device_operations])
79		AC_MSG_RESULT(yes)
80	],[
81		AC_MSG_RESULT(no)
82	])
83])
84
85AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS], [
86	ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS
87	ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID
88	ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK
89])
90
91AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS], [
92	ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS
93	ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID
94	ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK
95])
96