ANDROID: ashmem: dynamically allocate the android-ashmem shrinker

Old APIs are removed since the upstream commit
f2383e0150 ("mm: shrinker: remove old APIs").
So use the new APIs to dynamically allocate the
android-ashmem shrinker.

Bug: 146449535
Change-Id: I1100b9eb66886c3350c780a759f66f6a3807d52f
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Amit Pundir
2023-11-07 10:47:05 +05:30
committed by Treehugger Robot
parent 95f9b6b044
commit 967e7533ac
+19 -8
View File
@@ -527,15 +527,26 @@ ashmem_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
return lru_count;
}
static struct shrinker ashmem_shrinker = {
.count_objects = ashmem_shrink_count,
.scan_objects = ashmem_shrink_scan,
static struct shrinker *ashmem_shrinker;
static int __init ashmem_init_shrinker(void)
{
ashmem_shrinker = shrinker_alloc(0, "android-ashmem");
if (!ashmem_shrinker)
return -ENOMEM;
ashmem_shrinker->count_objects = ashmem_shrink_count;
ashmem_shrinker->scan_objects = ashmem_shrink_scan;
/*
* XXX (dchinner): I wish people would comment on why they need on
* significant changes to the default value here
*/
.seeks = DEFAULT_SEEKS * 4,
};
ashmem_shrinker->seeks = DEFAULT_SEEKS * 4;
shrinker_register(ashmem_shrinker);
return 0;
}
static int set_prot_mask(struct ashmem_area *asma, unsigned long prot)
{
@@ -860,8 +871,8 @@ static long ashmem_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
.gfp_mask = GFP_KERNEL,
.nr_to_scan = LONG_MAX,
};
ret = ashmem_shrink_count(&ashmem_shrinker, &sc);
ashmem_shrink_scan(&ashmem_shrinker, &sc);
ret = ashmem_shrink_count(ashmem_shrinker, &sc);
ashmem_shrink_scan(ashmem_shrinker, &sc);
}
break;
case ASHMEM_GET_FILE_ID:
@@ -969,7 +980,7 @@ static int __init ashmem_init(void)
goto out_free2;
}
ret = register_shrinker(&ashmem_shrinker, "android-ashmem");
ret = ashmem_init_shrinker();
if (ret) {
pr_err("failed to register shrinker!\n");
goto out_demisc;