xref: /freebsd/sys/contrib/openzfs/config/kernel-shrink.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 3.1 API change
3eda14cbcSMatt Macydnl # The super_block structure now stores a per-filesystem shrinker.
4eda14cbcSMatt Macydnl # This interface is preferable because it can be used to specifically
5eda14cbcSMatt Macydnl # target only the zfs filesystem for pruning.
6eda14cbcSMatt Macydnl #
7eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_SHRINK], [
8eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([super_block_s_shrink], [
9eda14cbcSMatt Macy		#include <linux/fs.h>
10eda14cbcSMatt Macy
11eda14cbcSMatt Macy		static const struct super_block
12eda14cbcSMatt Macy		    sb __attribute__ ((unused)) = {
13eda14cbcSMatt Macy			.s_shrink.seeks = DEFAULT_SEEKS,
14eda14cbcSMatt Macy			.s_shrink.batch = 0,
15eda14cbcSMatt Macy		};
16eda14cbcSMatt Macy	],[])
17eda14cbcSMatt Macy])
18eda14cbcSMatt Macy
19b356da80SMartin Matuskadnl #
20b356da80SMartin Matuskadnl # 6.7 API change
21b356da80SMartin Matuskadnl # s_shrink is now a pointer.
22b356da80SMartin Matuskadnl #
23b356da80SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_SHRINK_PTR], [
24b356da80SMartin Matuska	ZFS_LINUX_TEST_SRC([super_block_s_shrink_ptr], [
25b356da80SMartin Matuska		#include <linux/fs.h>
26fd45b686SMartin Matuska		static unsigned long shrinker_cb(struct shrinker *shrink,
27b356da80SMartin Matuska		    struct shrink_control *sc) { return 0; }
28b356da80SMartin Matuska		static struct shrinker shrinker = {
29b356da80SMartin Matuska			.count_objects = shrinker_cb,
30b356da80SMartin Matuska			.scan_objects = shrinker_cb,
31b356da80SMartin Matuska			.seeks = DEFAULT_SEEKS,
32b356da80SMartin Matuska		};
33b356da80SMartin Matuska		static const struct super_block
34b356da80SMartin Matuska		    sb __attribute__ ((unused)) = {
35b356da80SMartin Matuska			.s_shrink = &shrinker,
36b356da80SMartin Matuska		};
37b356da80SMartin Matuska	],[])
38b356da80SMartin Matuska])
39b356da80SMartin Matuska
40eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SUPER_BLOCK_S_SHRINK], [
41eda14cbcSMatt Macy	AC_MSG_CHECKING([whether super_block has s_shrink])
42eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([super_block_s_shrink], [
43eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
44b356da80SMartin Matuska		AC_DEFINE(HAVE_SUPER_BLOCK_S_SHRINK, 1,
45b356da80SMartin Matuska			[have super_block s_shrink])
46eda14cbcSMatt Macy	],[
47b356da80SMartin Matuska		AC_MSG_RESULT(no)
48b356da80SMartin Matuska		AC_MSG_CHECKING([whether super_block has s_shrink pointer])
49b356da80SMartin Matuska		ZFS_LINUX_TEST_RESULT([super_block_s_shrink_ptr], [
50b356da80SMartin Matuska			AC_MSG_RESULT(yes)
51b356da80SMartin Matuska			AC_DEFINE(HAVE_SUPER_BLOCK_S_SHRINK_PTR, 1,
52b356da80SMartin Matuska				[have super_block s_shrink pointer])
53b356da80SMartin Matuska		],[
54b356da80SMartin Matuska			AC_MSG_RESULT(no)
55eda14cbcSMatt Macy			ZFS_LINUX_TEST_ERROR([sb->s_shrink()])
56eda14cbcSMatt Macy		])
57eda14cbcSMatt Macy	])
58b356da80SMartin Matuska])
59eda14cbcSMatt Macy
60eda14cbcSMatt Macydnl #
61*7a7741afSMartin Matuskadnl # 6.0 API change
62*7a7741afSMartin Matuskadnl # register_shrinker() becomes a var-arg function that takes
63*7a7741afSMartin Matuskadnl # a printf-style format string as args > 0
64eda14cbcSMatt Macydnl #
65271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_REGISTER_SHRINKER_VARARG], [
66271171e0SMartin Matuska	ZFS_LINUX_TEST_SRC([register_shrinker_vararg], [
67271171e0SMartin Matuska		#include <linux/mm.h>
68fd45b686SMartin Matuska		static unsigned long shrinker_cb(struct shrinker *shrink,
69271171e0SMartin Matuska		    struct shrink_control *sc) { return 0; }
70271171e0SMartin Matuska	],[
71271171e0SMartin Matuska		struct shrinker cache_shrinker = {
72271171e0SMartin Matuska			.count_objects = shrinker_cb,
73271171e0SMartin Matuska			.scan_objects = shrinker_cb,
74271171e0SMartin Matuska			.seeks = DEFAULT_SEEKS,
75271171e0SMartin Matuska		};
76271171e0SMartin Matuska		register_shrinker(&cache_shrinker, "vararg-reg-shrink-test");
77271171e0SMartin Matuska	])
78271171e0SMartin Matuska])
79271171e0SMartin Matuska
80*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_REGISTER_SHRINKER_VARARG],[
81*7a7741afSMartin Matuska	AC_MSG_CHECKING([whether new var-arg register_shrinker() exists])
82*7a7741afSMartin Matuska	ZFS_LINUX_TEST_RESULT([register_shrinker_vararg], [
83*7a7741afSMartin Matuska		AC_MSG_RESULT(yes)
84*7a7741afSMartin Matuska		AC_DEFINE(HAVE_REGISTER_SHRINKER_VARARG, 1,
85*7a7741afSMartin Matuska		    [register_shrinker is vararg])
86eda14cbcSMatt Macy	],[
87*7a7741afSMartin Matuska		AC_MSG_RESULT(no)
88eda14cbcSMatt Macy	])
89eda14cbcSMatt Macy])
90eda14cbcSMatt Macy
91b356da80SMartin Matuskadnl #
92b356da80SMartin Matuskadnl # 6.7 API change
93b356da80SMartin Matuskadnl # register_shrinker has been replaced by shrinker_register.
94b356da80SMartin Matuskadnl #
95b356da80SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_SHRINKER_REGISTER], [
96b356da80SMartin Matuska	ZFS_LINUX_TEST_SRC([shrinker_register], [
97b356da80SMartin Matuska		#include <linux/shrinker.h>
98fd45b686SMartin Matuska		static unsigned long shrinker_cb(struct shrinker *shrink,
99b356da80SMartin Matuska		    struct shrink_control *sc) { return 0; }
100b356da80SMartin Matuska	],[
101b356da80SMartin Matuska		struct shrinker cache_shrinker = {
102b356da80SMartin Matuska			.count_objects = shrinker_cb,
103b356da80SMartin Matuska			.scan_objects = shrinker_cb,
104b356da80SMartin Matuska			.seeks = DEFAULT_SEEKS,
105b356da80SMartin Matuska		};
106b356da80SMartin Matuska		shrinker_register(&cache_shrinker);
107b356da80SMartin Matuska	])
108b356da80SMartin Matuska])
109b356da80SMartin Matuska
110*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SHRINKER_REGISTER], [
111*7a7741afSMartin Matuska	AC_MSG_CHECKING([whether shrinker_register() exists])
112b356da80SMartin Matuska	ZFS_LINUX_TEST_RESULT([shrinker_register], [
113b356da80SMartin Matuska		AC_MSG_RESULT(yes)
114*7a7741afSMartin Matuska		AC_DEFINE(HAVE_SHRINKER_REGISTER, 1, [shrinker_register exists])
115b356da80SMartin Matuska	], [
116b356da80SMartin Matuska		AC_MSG_RESULT(no)
117eda14cbcSMatt Macy	])
118eda14cbcSMatt Macy])
119eda14cbcSMatt Macy
120eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_SHRINKER], [
121eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_SHRINK
122b356da80SMartin Matuska	ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_SHRINK_PTR
123271171e0SMartin Matuska	ZFS_AC_KERNEL_SRC_REGISTER_SHRINKER_VARARG
124b356da80SMartin Matuska	ZFS_AC_KERNEL_SRC_SHRINKER_REGISTER
125eda14cbcSMatt Macy])
126eda14cbcSMatt Macy
127eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SHRINKER], [
128eda14cbcSMatt Macy	ZFS_AC_KERNEL_SUPER_BLOCK_S_SHRINK
129*7a7741afSMartin Matuska	ZFS_AC_KERNEL_REGISTER_SHRINKER_VARARG
130*7a7741afSMartin Matuska	ZFS_AC_KERNEL_SHRINKER_REGISTER
131eda14cbcSMatt Macy])
132