fix shrinker_free()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2023-12-19 19:29:25 -05:00
parent 3233d8a0c4
commit fe37b584d3
2 changed files with 11 additions and 13 deletions

View File

@ -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);

View File

@ -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;