mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 00:39:30 -04:00
drivers: lustre: obdclass: check result of register_shrinker()
lu_global_init() does not check result of register_shrinker() which was tagged __must_check recently, reported by sparse. Patch also fixes missed cleanup of resources allocated prior to register_shrinker() invocation and not freed after any failure. Signed-off-by: Aliaksei Karaliou <akaraliou.dev@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d85db086cf
commit
ab33cb5ad1
@@ -1932,8 +1932,10 @@ int lu_global_init(void)
|
||||
|
||||
LU_CONTEXT_KEY_INIT(&lu_global_key);
|
||||
result = lu_context_key_register(&lu_global_key);
|
||||
if (result != 0)
|
||||
if (result != 0) {
|
||||
lu_ref_global_fini();
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* At this level, we don't know what tags are needed, so allocate them
|
||||
@@ -1943,17 +1945,31 @@ int lu_global_init(void)
|
||||
down_write(&lu_sites_guard);
|
||||
result = lu_env_init(&lu_shrink_env, LCT_SHRINKER);
|
||||
up_write(&lu_sites_guard);
|
||||
if (result != 0)
|
||||
if (result != 0) {
|
||||
lu_context_key_degister(&lu_global_key);
|
||||
lu_ref_global_fini();
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* seeks estimation: 3 seeks to read a record from oi, one to read
|
||||
* inode, one for ea. Unfortunately setting this high value results in
|
||||
* lu_object/inode cache consuming all the memory.
|
||||
*/
|
||||
register_shrinker(&lu_site_shrinker);
|
||||
result = register_shrinker(&lu_site_shrinker);
|
||||
if (result != 0) {
|
||||
/* Order explained in lu_global_fini(). */
|
||||
lu_context_key_degister(&lu_global_key);
|
||||
|
||||
return result;
|
||||
down_write(&lu_sites_guard);
|
||||
lu_env_fini(&lu_shrink_env);
|
||||
up_write(&lu_sites_guard);
|
||||
|
||||
lu_ref_global_fini();
|
||||
return result;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1961,7 +1977,8 @@ int lu_global_init(void)
|
||||
*/
|
||||
void lu_global_fini(void)
|
||||
{
|
||||
unregister_shrinker(&lu_site_shrinker);
|
||||
if (lu_site_shrinker.nr_deferred)
|
||||
unregister_shrinker(&lu_site_shrinker);
|
||||
lu_context_key_degister(&lu_global_key);
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user