diff options
author | Joonsoo Kim <iamjoonsoo.kim@lge.com> | 2014-08-06 19:04:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-06 21:01:14 -0400 |
commit | 1fe00d50a9e81150de5000490b87ed227525cf09 (patch) | |
tree | fb9390e694eb4ed8cfba463c6136d0fdf74e0da7 /mm | |
parent | 97654dfa20caa5e6c1b0a4af715aabaf5d070d69 (diff) |
slab: factor out initialization of array cache
Factor out initialization of array cache to use it in following patch.
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slab.c | 33 |
1 files changed, 19 insertions, 14 deletions
@@ -791,13 +791,8 @@ static void start_cpu_timer(int cpu) | |||
791 | } | 791 | } |
792 | } | 792 | } |
793 | 793 | ||
794 | static struct array_cache *alloc_arraycache(int node, int entries, | 794 | static void init_arraycache(struct array_cache *ac, int limit, int batch) |
795 | int batchcount, gfp_t gfp) | ||
796 | { | 795 | { |
797 | int memsize = sizeof(void *) * entries + sizeof(struct array_cache); | ||
798 | struct array_cache *nc = NULL; | ||
799 | |||
800 | nc = kmalloc_node(memsize, gfp, node); | ||
801 | /* | 796 | /* |
802 | * The array_cache structures contain pointers to free object. | 797 | * The array_cache structures contain pointers to free object. |
803 | * However, when such objects are allocated or transferred to another | 798 | * However, when such objects are allocated or transferred to another |
@@ -805,15 +800,25 @@ static struct array_cache *alloc_arraycache(int node, int entries, | |||
805 | * valid references during a kmemleak scan. Therefore, kmemleak must | 800 | * valid references during a kmemleak scan. Therefore, kmemleak must |
806 | * not scan such objects. | 801 | * not scan such objects. |
807 | */ | 802 | */ |
808 | kmemleak_no_scan(nc); | 803 | kmemleak_no_scan(ac); |
809 | if (nc) { | 804 | if (ac) { |
810 | nc->avail = 0; | 805 | ac->avail = 0; |
811 | nc->limit = entries; | 806 | ac->limit = limit; |
812 | nc->batchcount = batchcount; | 807 | ac->batchcount = batch; |
813 | nc->touched = 0; | 808 | ac->touched = 0; |
814 | spin_lock_init(&nc->lock); | 809 | spin_lock_init(&ac->lock); |
815 | } | 810 | } |
816 | return nc; | 811 | } |
812 | |||
813 | static struct array_cache *alloc_arraycache(int node, int entries, | ||
814 | int batchcount, gfp_t gfp) | ||
815 | { | ||
816 | int memsize = sizeof(void *) * entries + sizeof(struct array_cache); | ||
817 | struct array_cache *ac = NULL; | ||
818 | |||
819 | ac = kmalloc_node(memsize, gfp, node); | ||
820 | init_arraycache(ac, entries, batchcount); | ||
821 | return ac; | ||
817 | } | 822 | } |
818 | 823 | ||
819 | static inline bool is_slab_pfmemalloc(struct page *page) | 824 | static inline bool is_slab_pfmemalloc(struct page *page) |