aboutsummaryrefslogtreecommitdiffstats
path: root/module/splat
diff options
context:
space:
mode:
Diffstat (limited to 'module/splat')
-rw-r--r--module/splat/splat-linux.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/module/splat/splat-linux.c b/module/splat/splat-linux.c
index c1dc7ce41..880b30152 100644
--- a/module/splat/splat-linux.c
+++ b/module/splat/splat-linux.c
@@ -44,11 +44,13 @@ SPL_SHRINKER_DECLARE(splat_linux_shrinker, splat_linux_shrinker_fn, 1);
static unsigned long splat_linux_shrinker_size = 0;
static struct file *splat_linux_shrinker_file = NULL;
-static int
+static spl_shrinker_t
__splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
{
static int failsafe = 0;
static unsigned long last_splat_linux_shrinker_size = 0;
+ unsigned long size;
+ spl_shrinker_t count;
/*
* shrinker_size can only decrease or stay the same between callbacks
@@ -61,13 +63,21 @@ __splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
last_splat_linux_shrinker_size = splat_linux_shrinker_size;
if (sc->nr_to_scan) {
- splat_linux_shrinker_size = splat_linux_shrinker_size -
- MIN(sc->nr_to_scan, splat_linux_shrinker_size);
+ size = MIN(sc->nr_to_scan, splat_linux_shrinker_size);
+ splat_linux_shrinker_size -= size;
splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
"Reclaimed %lu objects, size now %lu\n",
- sc->nr_to_scan, splat_linux_shrinker_size);
+ size, splat_linux_shrinker_size);
+
+#ifdef HAVE_SPLIT_SHRINKER_CALLBACK
+ count = size;
+#else
+ count = splat_linux_shrinker_size;
+#endif /* HAVE_SPLIT_SHRINKER_CALLBACK */
+
} else {
+ count = splat_linux_shrinker_size;
splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
"Cache size is %lu\n", splat_linux_shrinker_size);
}
@@ -77,7 +87,7 @@ __splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME,
"Far more calls than expected (%d), size now %lu\n",
failsafe, splat_linux_shrinker_size);
- return -1;
+ return (SHRINK_STOP);
} else {
/*
* We only increment failsafe if it doesn't trigger. This
@@ -89,7 +99,7 @@ __splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc)
/* Shrinker has run, so signal back to test. */
wake_up(&shrinker_wait);
- return (int)splat_linux_shrinker_size;
+ return (count);
}
SPL_SHRINKER_CALLBACK_WRAPPER(splat_linux_shrinker_fn);