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