diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 2d1adabf..d0a84794 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -25,15 +25,10 @@ struct shrinker { void *private_data; }; -static inline void shrinker_free(struct shrinker *s) -{ - free(s); -} - +void shrinker_free(struct shrinker *); struct shrinker *shrinker_alloc(unsigned int, const char *, ...); int shrinker_register(struct shrinker *); -void shrinker_unregister(struct shrinker *); void run_shrinkers(gfp_t gfp_mask, bool); diff --git a/linux/shrinker.c b/linux/shrinker.c index 88069769..ca34ebc7 100644 --- a/linux/shrinker.c +++ b/linux/shrinker.c @@ -13,6 +13,16 @@ static LIST_HEAD(shrinker_list); static DEFINE_MUTEX(shrinker_lock); +void shrinker_free(struct shrinker *s) +{ + if (s->list.next) { + mutex_lock(&shrinker_lock); + list_del(&s->list); + mutex_unlock(&shrinker_lock); + } + free(s); +} + struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...) { return calloc(sizeof(struct shrinker), 1); @@ -26,13 +36,6 @@ int shrinker_register(struct shrinker *shrinker) return 0; } -void unregister_shrinker(struct shrinker *shrinker) -{ - mutex_lock(&shrinker_lock); - list_del(&shrinker->list); - mutex_unlock(&shrinker_lock); -} - static void run_shrinkers_allocation_failed(gfp_t gfp_mask) { struct shrinker *shrinker;