]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/shrinker: simplify shrinker_memcg_alloc() using guard()
authorwangxuewen <18810879172@163.com>
Wed, 13 May 2026 07:52:14 +0000 (15:52 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 2 Jun 2026 22:22:17 +0000 (15:22 -0700)
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.

Link: https://lore.kernel.org/20260513075214.2655710-1-18810879172@163.com
Signed-off-by: wangxuewen <wangxuewen@kylinos.cn>
Acked-by: Muchun Song <muchun.song@linux.dev>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Xuewen Wang <wangxuewen@kylinos.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/shrinker.c

index 49256f81199f18087240475d524ec8d855738e11..7082d01c8c9d0d1b8a71be6157f15dff1ef26b7a 100644 (file)
@@ -216,29 +216,26 @@ static DEFINE_IDR(shrinker_idr);
 
 static int shrinker_memcg_alloc(struct shrinker *shrinker)
 {
-       int id, ret = -ENOMEM;
+       int id;
 
        if (mem_cgroup_disabled())
                return -ENOSYS;
        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)