]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm, slab: dissolve shutdown_cache() into its caller
authorVlastimil Babka <vbabka@suse.cz>
Wed, 7 Aug 2024 10:31:14 +0000 (12:31 +0200)
committerVlastimil Babka <vbabka@suse.cz>
Tue, 27 Aug 2024 12:12:50 +0000 (14:12 +0200)
There's only one caller of shutdown_cache() so move the code into it.
Preparatory patch for further changes, no functional change.

Reviewed-by: Jann Horn <jannh@google.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
mm/slab_common.c

index 40b582a014b8f2f9a27027c1345972c699205e2e..b76d65d7fe331bcc6ed0253cd57c88a19c6ea645 100644 (file)
@@ -540,27 +540,6 @@ static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work)
        }
 }
 
-static int shutdown_cache(struct kmem_cache *s)
-{
-       /* free asan quarantined objects */
-       kasan_cache_shutdown(s);
-
-       if (__kmem_cache_shutdown(s) != 0)
-               return -EBUSY;
-
-       list_del(&s->list);
-
-       if (s->flags & SLAB_TYPESAFE_BY_RCU) {
-               list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
-               schedule_work(&slab_caches_to_rcu_destroy_work);
-       } else {
-               kfence_shutdown_cache(s);
-               debugfs_slab_release(s);
-       }
-
-       return 0;
-}
-
 void slab_kmem_cache_release(struct kmem_cache *s)
 {
        __kmem_cache_release(s);
@@ -585,9 +564,26 @@ void kmem_cache_destroy(struct kmem_cache *s)
        if (s->refcount)
                goto out_unlock;
 
-       err = shutdown_cache(s);
+       /* free asan quarantined objects */
+       kasan_cache_shutdown(s);
+
+       err = __kmem_cache_shutdown(s);
        WARN(err, "%s %s: Slab cache still has objects when called from %pS",
             __func__, s->name, (void *)_RET_IP_);
+
+       if (err)
+               goto out_unlock;
+
+       list_del(&s->list);
+
+       if (rcu_set) {
+               list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
+               schedule_work(&slab_caches_to_rcu_destroy_work);
+       } else {
+               kfence_shutdown_cache(s);
+               debugfs_slab_release(s);
+       }
+
 out_unlock:
        mutex_unlock(&slab_mutex);
        cpus_read_unlock();