mm/sl[aou]b: Get rid of __kmem_cache_destroy
[firefly-linux-kernel-4.4.55.git] / mm / slab.c
index 8ca6ec6301fa7c9f7678f0071fc60f3aea6d4e8c..de961b48a6a4a82935112d4b0a065eb566b50d48 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2208,26 +2208,6 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
        }
 }
 
-void __kmem_cache_destroy(struct kmem_cache *cachep)
-{
-       int i;
-       struct kmem_list3 *l3;
-
-       for_each_online_cpu(i)
-           kfree(cachep->array[i]);
-
-       /* NUMA: free the list3 structures */
-       for_each_online_node(i) {
-               l3 = cachep->nodelists[i];
-               if (l3) {
-                       kfree(l3->shared);
-                       free_alien_cache(l3->alien);
-                       kfree(l3);
-               }
-       }
-}
-
-
 /**
  * calculate_slab_order - calculate size (page order) of slabs
  * @cachep: pointer to the cache that is being created
@@ -2364,9 +2344,6 @@ static int __init_refok setup_cpu_cache(struct kmem_cache *cachep, gfp_t gfp)
  * Cannot be called within a int, but can be interrupted.
  * The @ctor is run when new pages are allocated by the cache.
  *
- * @name must be valid until the cache is destroyed. This implies that
- * the module calling this has to destroy the cache before getting unloaded.
- *
  * The flags are
  *
  * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5)
@@ -2591,7 +2568,7 @@ __kmem_cache_create (const char *name, size_t size, size_t align,
        cachep->refcount = 1;
 
        if (setup_cpu_cache(cachep, gfp)) {
-               __kmem_cache_destroy(cachep);
+               __kmem_cache_shutdown(cachep);
                return NULL;
        }
 
@@ -2766,7 +2743,26 @@ EXPORT_SYMBOL(kmem_cache_shrink);
 
 int __kmem_cache_shutdown(struct kmem_cache *cachep)
 {
-       return __cache_shrink(cachep);
+       int i;
+       struct kmem_list3 *l3;
+       int rc = __cache_shrink(cachep);
+
+       if (rc)
+               return rc;
+
+       for_each_online_cpu(i)
+           kfree(cachep->array[i]);
+
+       /* NUMA: free the list3 structures */
+       for_each_online_node(i) {
+               l3 = cachep->nodelists[i];
+               if (l3) {
+                       kfree(l3->shared);
+                       free_alien_cache(l3->alien);
+                       kfree(l3);
+               }
+       }
+       return 0;
 }
 
 /*