mbcache: fix to detect failure of register_shrinker
authorChao Yu <yuchao0@huawei.com>
Wed, 31 Aug 2016 15:44:36 +0000 (11:44 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 31 Aug 2016 15:44:36 +0000 (11:44 -0400)
register_shrinker in mb_cache_create may fail due to no memory. This
patch fixes to do the check of return value of register_shrinker and
handle the error case, otherwise mb_cache_create may return with no
error, but losing the inner shrinker.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/mbcache.c

index eccda3a02de6ff6a914b1636d5e80da0557eadde..c5bd19ffa326a1c8c30dc7d89263640d0aa82739 100644 (file)
@@ -366,7 +366,11 @@ struct mb_cache *mb_cache_create(int bucket_bits)
        cache->c_shrink.count_objects = mb_cache_count;
        cache->c_shrink.scan_objects = mb_cache_scan;
        cache->c_shrink.seeks = DEFAULT_SEEKS;
-       register_shrinker(&cache->c_shrink);
+       if (register_shrinker(&cache->c_shrink)) {
+               kfree(cache->c_hash);
+               kfree(cache);
+               goto err_out;
+       }
 
        INIT_WORK(&cache->c_shrink_work, mb_cache_shrink_worker);