mm, slab: shorten kmalloc cache names for large sizes
[muen/linux.git] / mm / slab_common.c
index 5b19439fd862385a5f860a61a4b2b8859103ad61..7eb8dc136c1cb879b74b4102e201015a85867ee6 100644 (file)
@@ -1050,15 +1050,15 @@ const struct kmalloc_info_struct kmalloc_info[] __initconst = {
        {"kmalloc-16",             16},         {"kmalloc-32",             32},
        {"kmalloc-64",             64},         {"kmalloc-128",           128},
        {"kmalloc-256",           256},         {"kmalloc-512",           512},
-       {"kmalloc-1024",         1024},         {"kmalloc-2048",         2048},
-       {"kmalloc-4096",         4096},         {"kmalloc-8192",         8192},
-       {"kmalloc-16384",       16384},         {"kmalloc-32768",       32768},
-       {"kmalloc-65536",       65536},         {"kmalloc-131072",     131072},
-       {"kmalloc-262144",     262144},         {"kmalloc-524288",     524288},
-       {"kmalloc-1048576",   1048576},         {"kmalloc-2097152",   2097152},
-       {"kmalloc-4194304",   4194304},         {"kmalloc-8388608",   8388608},
-       {"kmalloc-16777216", 16777216},         {"kmalloc-33554432", 33554432},
-       {"kmalloc-67108864", 67108864}
+       {"kmalloc-1k",           1024},         {"kmalloc-2k",           2048},
+       {"kmalloc-4k",           4096},         {"kmalloc-8k",           8192},
+       {"kmalloc-16k",         16384},         {"kmalloc-32k",         32768},
+       {"kmalloc-64k",         65536},         {"kmalloc-128k",       131072},
+       {"kmalloc-256k",       262144},         {"kmalloc-512k",       524288},
+       {"kmalloc-1M",        1048576},         {"kmalloc-2M",        2097152},
+       {"kmalloc-4M",        4194304},         {"kmalloc-8M",        8388608},
+       {"kmalloc-16M",      16777216},         {"kmalloc-32M",      33554432},
+       {"kmalloc-64M",      67108864}
 };
 
 /*
@@ -1108,6 +1108,21 @@ void __init setup_kmalloc_cache_index_table(void)
        }
 }
 
+static const char *
+kmalloc_cache_name(const char *prefix, unsigned int size)
+{
+
+       static const char units[3] = "\0kM";
+       int idx = 0;
+
+       while (size >= 1024 && (size % 1024 == 0)) {
+               size /= 1024;
+               idx++;
+       }
+
+       return kasprintf(GFP_NOWAIT, "%s-%u%c", prefix, size, units[idx]);
+}
+
 static void __init
 new_kmalloc_cache(int idx, int type, slab_flags_t flags)
 {
@@ -1115,7 +1130,7 @@ new_kmalloc_cache(int idx, int type, slab_flags_t flags)
 
        if (type == KMALLOC_RECLAIM) {
                flags |= SLAB_RECLAIM_ACCOUNT;
-               name = kasprintf(GFP_NOWAIT, "kmalloc-rcl-%u",
+               name = kmalloc_cache_name("kmalloc-rcl",
                                                kmalloc_info[idx].size);
                BUG_ON(!name);
        } else {
@@ -1164,8 +1179,7 @@ void __init create_kmalloc_caches(slab_flags_t flags)
 
                if (s) {
                        unsigned int size = kmalloc_size(i);
-                       char *n = kasprintf(GFP_NOWAIT,
-                                "dma-kmalloc-%u", size);
+                       const char *n = kmalloc_cache_name("dma-kmalloc", size);
 
                        BUG_ON(!n);
                        kmalloc_caches[KMALLOC_DMA][i] = create_kmalloc_cache(