[Cluster-devel] [PATCH v4 11/48] gfs2: dynamically allocate the gfs2-glock shrinker
Qi Zheng <[email protected]>
| Newsgroups | com.redhat.cluster-devel,dev.linux.lists.dm-devel,net.sourceforge.lists.linux-f2fs-devel,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-mtd,org.kernel.vger.kvm,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-bcache,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kernel.vger.linux-raid,org.kernel.vger.linux-xfs,org.kernel.vger.netdev,org.kernel.vger.rcu,org.kvack.linux-mm,org.ozlabs.lists.linux-erofs,org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <[email protected]> |
Use new APIs to dynamically allocate the gfs2-glock shrinker. Signed-off-by: Qi Zheng <[email protected]> Reviewed-by: Muchun Song <[email protected]> --- fs/gfs2/glock.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 1438e7465e30..8d582ba7514f 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -2046,11 +2046,7 @@ static unsigned long gfs2_glock_shrink_count(struct shrinker *shrink, return vfs_pressure_ratio(atomic_read(&lru_count)); } -static struct shrinker glock_shrinker = { - .seeks = DEFAULT_SEEKS, - .count_objects = gfs2_glock_shrink_count, - .scan_objects = gfs2_glock_shrink_scan, -}; +static struct shrinker *glock_shrinker; /** * glock_hash_walk - Call a function for glock in a hash bucket @@ -2472,13 +2468,19 @@ int __init gfs2_glock_init(void) return -ENOMEM; } - ret = register_shrinker(&glock_shrinker, "gfs2-glock"); - if (ret) { + glock_shrinker = shrinker_alloc(0, "gfs2-glock"); + if (!glock_shrinker) { destroy_workqueue(glock_workqueue); rhashtable_destroy(&gl_hash_table); - return ret; + return -ENOMEM; } + glock_shrinker->count_objects = gfs2_glock_shrink_count; + glock_shrinker->scan_objects = gfs2_glock_shrink_scan; + glock_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(glock_shrinker); + for (i = 0; i < GLOCK_WAIT_TABLE_SIZE; i++) init_waitqueue_head(glock_wait_table + i); @@ -2487,7 +2489,7 @@ int __init gfs2_glock_init(void) void gfs2_glock_exit(void) { - unregister_shrinker(&glock_shrinker); + shrinker_free(glock_shrinker); rhashtable_destroy(&gl_hash_table); destroy_workqueue(glock_workqueue); } -- 2.30.2