NFSv4.2: fix wrong shrinker_id
Currently, the list_lru::shrinker_id corresponding to the nfs4_xattr
shrinkers is wrong:
>>> prog["nfs4_xattr_cache_lru"].shrinker_id
(int)0
>>> prog["nfs4_xattr_entry_lru"].shrinker_id
(int)0
>>> prog["nfs4_xattr_large_entry_lru"].shrinker_id
(int)0
>>> prog["nfs4_xattr_cache_shrinker"].id
(int)18
>>> prog["nfs4_xattr_entry_shrinker"].id
(int)19
>>> prog["nfs4_xattr_large_entry_shrinker"].id
(int)20
This is not what we expect, which will cause these shrinkers
not to be found in shrink_slab_memcg().
We should assign shrinker::id before calling list_lru_init_memcg(),
so that the corresponding list_lru::shrinker_id will be assigned
the correct value like below:
>>> prog["nfs4_xattr_cache_lru"].shrinker_id
(int)16
>>> prog["nfs4_xattr_entry_lru"].shrinker_id
(int)17
>>> prog["nfs4_xattr_large_entry_lru"].shrinker_id
(int)18
>>> prog["nfs4_xattr_cache_shrinker"].id
(int)16
>>> prog["nfs4_xattr_entry_shrinker"].id
(int)17
>>> prog["nfs4_xattr_large_entry_shrinker"].id
(int)18
So just do it.
Fixes: 95ad37f90c
("NFSv4.2: add client side xattr caching.")
Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
6ad477a69a
commit
7f7ab33689
@ -991,6 +991,29 @@ static void nfs4_xattr_cache_init_once(void *p)
|
||||
INIT_LIST_HEAD(&cache->dispose);
|
||||
}
|
||||
|
||||
static int nfs4_xattr_shrinker_init(struct shrinker *shrinker,
|
||||
struct list_lru *lru, const char *name)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = register_shrinker(shrinker, name);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = list_lru_init_memcg(lru, shrinker);
|
||||
if (ret)
|
||||
unregister_shrinker(shrinker);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void nfs4_xattr_shrinker_destroy(struct shrinker *shrinker,
|
||||
struct list_lru *lru)
|
||||
{
|
||||
unregister_shrinker(shrinker);
|
||||
list_lru_destroy(lru);
|
||||
}
|
||||
|
||||
int __init nfs4_xattr_cache_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -1002,44 +1025,30 @@ int __init nfs4_xattr_cache_init(void)
|
||||
if (nfs4_xattr_cache_cachep == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = list_lru_init_memcg(&nfs4_xattr_large_entry_lru,
|
||||
&nfs4_xattr_large_entry_shrinker);
|
||||
if (ret)
|
||||
goto out4;
|
||||
|
||||
ret = list_lru_init_memcg(&nfs4_xattr_entry_lru,
|
||||
&nfs4_xattr_entry_shrinker);
|
||||
if (ret)
|
||||
goto out3;
|
||||
|
||||
ret = list_lru_init_memcg(&nfs4_xattr_cache_lru,
|
||||
&nfs4_xattr_cache_shrinker);
|
||||
if (ret)
|
||||
goto out2;
|
||||
|
||||
ret = register_shrinker(&nfs4_xattr_cache_shrinker, "nfs-xattr_cache");
|
||||
ret = nfs4_xattr_shrinker_init(&nfs4_xattr_cache_shrinker,
|
||||
&nfs4_xattr_cache_lru,
|
||||
"nfs-xattr_cache");
|
||||
if (ret)
|
||||
goto out1;
|
||||
|
||||
ret = register_shrinker(&nfs4_xattr_entry_shrinker, "nfs-xattr_entry");
|
||||
ret = nfs4_xattr_shrinker_init(&nfs4_xattr_entry_shrinker,
|
||||
&nfs4_xattr_entry_lru,
|
||||
"nfs-xattr_entry");
|
||||
if (ret)
|
||||
goto out;
|
||||
goto out2;
|
||||
|
||||
ret = register_shrinker(&nfs4_xattr_large_entry_shrinker,
|
||||
"nfs-xattr_large_entry");
|
||||
ret = nfs4_xattr_shrinker_init(&nfs4_xattr_large_entry_shrinker,
|
||||
&nfs4_xattr_large_entry_lru,
|
||||
"nfs-xattr_large_entry");
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
unregister_shrinker(&nfs4_xattr_entry_shrinker);
|
||||
out:
|
||||
unregister_shrinker(&nfs4_xattr_cache_shrinker);
|
||||
out1:
|
||||
list_lru_destroy(&nfs4_xattr_cache_lru);
|
||||
nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker,
|
||||
&nfs4_xattr_entry_lru);
|
||||
out2:
|
||||
list_lru_destroy(&nfs4_xattr_entry_lru);
|
||||
out3:
|
||||
list_lru_destroy(&nfs4_xattr_large_entry_lru);
|
||||
out4:
|
||||
nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker,
|
||||
&nfs4_xattr_cache_lru);
|
||||
out1:
|
||||
kmem_cache_destroy(nfs4_xattr_cache_cachep);
|
||||
|
||||
return ret;
|
||||
@ -1047,11 +1056,11 @@ out4:
|
||||
|
||||
void nfs4_xattr_cache_exit(void)
|
||||
{
|
||||
unregister_shrinker(&nfs4_xattr_large_entry_shrinker);
|
||||
unregister_shrinker(&nfs4_xattr_entry_shrinker);
|
||||
unregister_shrinker(&nfs4_xattr_cache_shrinker);
|
||||
list_lru_destroy(&nfs4_xattr_large_entry_lru);
|
||||
list_lru_destroy(&nfs4_xattr_entry_lru);
|
||||
list_lru_destroy(&nfs4_xattr_cache_lru);
|
||||
nfs4_xattr_shrinker_destroy(&nfs4_xattr_large_entry_shrinker,
|
||||
&nfs4_xattr_large_entry_lru);
|
||||
nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker,
|
||||
&nfs4_xattr_entry_lru);
|
||||
nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker,
|
||||
&nfs4_xattr_cache_lru);
|
||||
kmem_cache_destroy(nfs4_xattr_cache_cachep);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user