* [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
@ 2026-05-12 8:55 wangxuewen
2026-05-12 9:10 ` Muchun Song
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: wangxuewen @ 2026-05-12 8:55 UTC (permalink / raw)
To: akpm, david, qi.zheng, roman.gushchin, muchun.song
Cc: linux-mm, linux-kernel, wangxuewen, wangxuewen
Use guard(mutex) to automatically handle shrinker_mutex locking and
unlocking in shrinker_memcg_alloc(). This removes the explicit
mutex_unlock() call, the goto-based error path, and the redundant
ret variable, resulting in cleaner and more concise code.
Signed-off-by: wangxuewen <wangxuewen@kylinos.cn>
---
mm/shrinker.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/mm/shrinker.c b/mm/shrinker.c
index 76b3f750cf65..1274130323bf 100644
--- a/mm/shrinker.c
+++ b/mm/shrinker.c
@@ -222,22 +222,19 @@ static int shrinker_memcg_alloc(struct shrinker *shrinker)
if (mem_cgroup_kmem_disabled() && !(shrinker->flags & SHRINKER_NONSLAB))
return -ENOSYS;
- mutex_lock(&shrinker_mutex);
+ guard(mutex)(&shrinker_mutex);
id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL);
if (id < 0)
- goto unlock;
+ return id;
if (id >= shrinker_nr_max) {
if (expand_shrinker_info(id)) {
idr_remove(&shrinker_idr, id);
- goto unlock;
+ return -ENOMEM;
}
}
shrinker->id = id;
- ret = 0;
-unlock:
- mutex_unlock(&shrinker_mutex);
- return ret;
+ return 0;
}
static void shrinker_memcg_remove(struct shrinker *shrinker)
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
2026-05-12 8:55 [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard() wangxuewen
@ 2026-05-12 9:10 ` Muchun Song
2026-05-13 7:55 ` wangxuewen
2026-05-12 9:12 ` Qi Zheng
2026-05-15 3:15 ` kernel test robot
2 siblings, 1 reply; 5+ messages in thread
From: Muchun Song @ 2026-05-12 9:10 UTC (permalink / raw)
To: wangxuewen
Cc: akpm, david, qi.zheng, roman.gushchin, linux-mm, linux-kernel,
wangxuewen
> On May 12, 2026, at 16:55, wangxuewen <18810879172@163.com> wrote:
>
> Use guard(mutex) to automatically handle shrinker_mutex locking and
> unlocking in shrinker_memcg_alloc(). This removes the explicit
> mutex_unlock() call, the goto-based error path, and the redundant
> ret variable, resulting in cleaner and more concise code.
>
> Signed-off-by: wangxuewen <wangxuewen@kylinos.cn>
> ---
> mm/shrinker.c | 11 ++++-------
> 1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/mm/shrinker.c b/mm/shrinker.c
> index 76b3f750cf65..1274130323bf 100644
> --- a/mm/shrinker.c
> +++ b/mm/shrinker.c
> @@ -222,22 +222,19 @@ static int shrinker_memcg_alloc(struct shrinker *shrinker)
> if (mem_cgroup_kmem_disabled() && !(shrinker->flags & SHRINKER_NONSLAB))
> return -ENOSYS;
>
> - mutex_lock(&shrinker_mutex);
> + guard(mutex)(&shrinker_mutex);
> id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL);
> if (id < 0)
> - goto unlock;
> + return id;
>
> if (id >= shrinker_nr_max) {
> if (expand_shrinker_info(id)) {
> idr_remove(&shrinker_idr, id);
> - goto unlock;
> + return -ENOMEM;
> }
> }
> shrinker->id = id;
> - ret = 0;
> -unlock:
> - mutex_unlock(&shrinker_mutex);
> - return ret;
One small thing: since ret is no longer used after this change,
it should be dropped from the declaration to avoid an unused-variable
warning:
- int id, ret = -ENOMEM;
+ int id;
Otherwise looks good to me.
Thanks,
Muchun
> + return 0;
> }
>
> static void shrinker_memcg_remove(struct shrinker *shrinker)
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
2026-05-12 8:55 [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard() wangxuewen
2026-05-12 9:10 ` Muchun Song
@ 2026-05-12 9:12 ` Qi Zheng
2026-05-15 3:15 ` kernel test robot
2 siblings, 0 replies; 5+ messages in thread
From: Qi Zheng @ 2026-05-12 9:12 UTC (permalink / raw)
To: wangxuewen, akpm, david, roman.gushchin, muchun.song
Cc: linux-mm, linux-kernel, wangxuewen
On 5/12/26 4:55 PM, wangxuewen wrote:
> Use guard(mutex) to automatically handle shrinker_mutex locking and
> unlocking in shrinker_memcg_alloc(). This removes the explicit
> mutex_unlock() call, the goto-based error path, and the redundant
> ret variable, resulting in cleaner and more concise code.
I'm inclined to use guard() only for newly added code. If we were to
convert existing code, there would be countless places across the
kernel that need updating.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
2026-05-12 9:10 ` Muchun Song
@ 2026-05-13 7:55 ` wangxuewen
0 siblings, 0 replies; 5+ messages in thread
From: wangxuewen @ 2026-05-13 7:55 UTC (permalink / raw)
To: Muchun Song
Cc: akpm, david, qi.zheng, roman.gushchin, linux-mm, linux-kernel,
wangxuewen
Hi,Muchun Song,
Thanks for your review.
I've updated the patch to v2 following your suggestions.
This change is only a local cleanup for this specific function, not part
of any large-scale conversion to use the guard() mechanism.
Please review v2, thank you.
在 2026/5/12 17:10, Muchun Song 写道:
>
>
>> On May 12, 2026, at 16:55, wangxuewen <18810879172@163.com> wrote:
>>
>> Use guard(mutex) to automatically handle shrinker_mutex locking and
>> unlocking in shrinker_memcg_alloc(). This removes the explicit
>> mutex_unlock() call, the goto-based error path, and the redundant
>> ret variable, resulting in cleaner and more concise code.
>>
>> Signed-off-by: wangxuewen <wangxuewen@kylinos.cn>
>> ---
>> mm/shrinker.c | 11 ++++-------
>> 1 file changed, 4 insertions(+), 7 deletions(-)
>>
>> diff --git a/mm/shrinker.c b/mm/shrinker.c
>> index 76b3f750cf65..1274130323bf 100644
>> --- a/mm/shrinker.c
>> +++ b/mm/shrinker.c
>> @@ -222,22 +222,19 @@ static int shrinker_memcg_alloc(struct shrinker *shrinker)
>> if (mem_cgroup_kmem_disabled() && !(shrinker->flags & SHRINKER_NONSLAB))
>> return -ENOSYS;
>>
>> - mutex_lock(&shrinker_mutex);
>> + guard(mutex)(&shrinker_mutex);
>> id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL);
>> if (id < 0)
>> - goto unlock;
>> + return id;
>>
>> if (id >= shrinker_nr_max) {
>> if (expand_shrinker_info(id)) {
>> idr_remove(&shrinker_idr, id);
>> - goto unlock;
>> + return -ENOMEM;
>> }
>> }
>> shrinker->id = id;
>> - ret = 0;
>> -unlock:
>> - mutex_unlock(&shrinker_mutex);
>> - return ret;
>
> One small thing: since ret is no longer used after this change,
> it should be dropped from the declaration to avoid an unused-variable
> warning:
>
> - int id, ret = -ENOMEM;
> + int id;
>
> Otherwise looks good to me.
>
> Thanks,
> Muchun
>
>> + return 0;
>> }
>>
>> static void shrinker_memcg_remove(struct shrinker *shrinker)
>> --
>> 2.25.1
>>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
2026-05-12 8:55 [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard() wangxuewen
2026-05-12 9:10 ` Muchun Song
2026-05-12 9:12 ` Qi Zheng
@ 2026-05-15 3:15 ` kernel test robot
2 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2026-05-15 3:15 UTC (permalink / raw)
To: wangxuewen, akpm, david, qi.zheng, roman.gushchin, muchun.song
Cc: oe-kbuild-all, linux-mm, linux-kernel, wangxuewen
Hi wangxuewen,
kernel test robot noticed the following build warnings:
[auto build test WARNING on v7.1-rc3]
[also build test WARNING on linus/master next-20260508]
[cannot apply to akpm-mm/mm-everything]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/wangxuewen/mm-shrinker-simplify-shrinker_memcg_alloc-using-guard/20260515-014803
base: v7.1-rc3
patch link: https://lore.kernel.org/r/20260512085546.368911-1-18810879172%40163.com
patch subject: [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard()
config: sh-allyesconfig (https://download.01.org/0day-ci/archive/20260515/202605151100.lH0pRo2I-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260515/202605151100.lH0pRo2I-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605151100.lH0pRo2I-lkp@intel.com/
All warnings (new ones prefixed by >>):
mm/shrinker.c: In function 'shrinker_memcg_alloc':
>> mm/shrinker.c:218:17: warning: unused variable 'ret' [-Wunused-variable]
218 | int id, ret = -ENOMEM;
| ^~~
vim +/ret +218 mm/shrinker.c
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 215
48a7a0996a0089f Qi Zheng 2023-09-11 216 static int shrinker_memcg_alloc(struct shrinker *shrinker)
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 217 {
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 @218 int id, ret = -ENOMEM;
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 219
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 220 if (mem_cgroup_disabled())
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 221 return -ENOSYS;
03375203e1da8f4 Michal Koutný 2026-02-25 222 if (mem_cgroup_kmem_disabled() && !(shrinker->flags & SHRINKER_NONSLAB))
03375203e1da8f4 Michal Koutný 2026-02-25 223 return -ENOSYS;
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 224
5ce02a6f6282d95 wangxuewen 2026-05-12 225 guard(mutex)(&shrinker_mutex);
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 226 id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL);
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 227 if (id < 0)
5ce02a6f6282d95 wangxuewen 2026-05-12 228 return id;
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 229
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 230 if (id >= shrinker_nr_max) {
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 231 if (expand_shrinker_info(id)) {
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 232 idr_remove(&shrinker_idr, id);
5ce02a6f6282d95 wangxuewen 2026-05-12 233 return -ENOMEM;
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 234 }
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 235 }
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 236 shrinker->id = id;
5ce02a6f6282d95 wangxuewen 2026-05-12 237 return 0;
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 238 }
96f7b2b9bbb1d68 Qi Zheng 2023-09-11 239
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-15 3:21 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-12 8:55 [PATCH v1] mm/shrinker: simplify shrinker_memcg_alloc() using guard() wangxuewen
2026-05-12 9:10 ` Muchun Song
2026-05-13 7:55 ` wangxuewen
2026-05-12 9:12 ` Qi Zheng
2026-05-15 3:15 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox