From fb6a9b7ab2e2ffc9fc208a9723922a614c73494f Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 31 Aug 2016 11:48:02 -0400 Subject: [PATCH] add patch mbcache-fix-to-detect-failure-of-register_shrinker --- mbcache-fix-to-detect-failure-of-register_shrinker | 33 ++++++++++++++++++++++ series | 1 + timestamps | 7 +++-- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 mbcache-fix-to-detect-failure-of-register_shrinker diff --git a/mbcache-fix-to-detect-failure-of-register_shrinker b/mbcache-fix-to-detect-failure-of-register_shrinker new file mode 100644 index 00000000..8d4c0ba1 --- /dev/null +++ b/mbcache-fix-to-detect-failure-of-register_shrinker @@ -0,0 +1,33 @@ +mbcache: fix to detect failure of register_shrinker + +From: Chao Yu + +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 +Reviewed-by: Jan Kara +Signed-off-by: Theodore Ts'o +--- + fs/mbcache.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/fs/mbcache.c b/fs/mbcache.c +index eccda3a..c5bd19f 100644 +--- a/fs/mbcache.c ++++ b/fs/mbcache.c +@@ -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); + diff --git a/series b/series index 23e50a23..7eab8ab8 100644 --- a/series +++ b/series @@ -9,6 +9,7 @@ remove-unused-variables-from-ext4_expand_isize_ea factor-out-loop-for-freeing-inode-xattr-space enforce-online-defrag-restriction-for-encrypted-files +mbcache-fix-to-detect-failure-of-register_shrinker ########################################## # unstable patches diff --git a/timestamps b/timestamps index 64d0f0c6..4ce09490 100755 --- a/timestamps +++ b/timestamps @@ -48,6 +48,7 @@ touch -d @1472499791 remove-unused-variables-from-ext4_expand_isize_ea touch -d @1472499851 factor-out-loop-for-freeing-inode-xattr-space touch -d @1472499911 enforce-online-defrag-restriction-for-encrypted-files touch -d @1472499971 stable-boundary -touch -d @1472521391 series -touch -d @1472524331 status -touch -d @1472658297 timestamps +touch -d @1472658276 mbcache-fix-to-detect-failure-of-register_shrinker +touch -d @1472658383 series +touch -d @1472658387 status +touch -d @1472658473 timestamps -- 2.11.4.GIT