Skip to content

Commit 4fbb715

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6: SLUB: dynamic per-cache MIN_PARTIAL mm: unexport ksize
2 parents e6ca232 + 5595cff commit 4fbb715

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

include/linux/slub_def.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ struct kmem_cache_cpu {
4646
struct kmem_cache_node {
4747
spinlock_t list_lock; /* Protect partial list and nr_partial */
4848
unsigned long nr_partial;
49+
unsigned long min_partial;
4950
struct list_head partial;
5051
#ifdef CONFIG_SLUB_DEBUG
5152
atomic_long_t nr_slabs;

mm/slab.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4472,4 +4472,3 @@ size_t ksize(const void *objp)
44724472

44734473
return obj_size(virt_to_cache(objp));
44744474
}
4475-
EXPORT_SYMBOL(ksize);

mm/slob.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,6 @@ size_t ksize(const void *block)
519519
else
520520
return sp->page.private;
521521
}
522-
EXPORT_SYMBOL(ksize);
523522

524523
struct kmem_cache {
525524
unsigned int size, align;

mm/slub.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,7 +1329,7 @@ static struct page *get_any_partial(struct kmem_cache *s, gfp_t flags)
13291329
n = get_node(s, zone_to_nid(zone));
13301330

13311331
if (n && cpuset_zone_allowed_hardwall(zone, flags) &&
1332-
n->nr_partial > MIN_PARTIAL) {
1332+
n->nr_partial > n->min_partial) {
13331333
page = get_partial_node(n);
13341334
if (page)
13351335
return page;
@@ -1381,7 +1381,7 @@ static void unfreeze_slab(struct kmem_cache *s, struct page *page, int tail)
13811381
slab_unlock(page);
13821382
} else {
13831383
stat(c, DEACTIVATE_EMPTY);
1384-
if (n->nr_partial < MIN_PARTIAL) {
1384+
if (n->nr_partial < n->min_partial) {
13851385
/*
13861386
* Adding an empty slab to the partial slabs in order
13871387
* to avoid page allocator overhead. This slab needs
@@ -1913,9 +1913,21 @@ static void init_kmem_cache_cpu(struct kmem_cache *s,
19131913
#endif
19141914
}
19151915

1916-
static void init_kmem_cache_node(struct kmem_cache_node *n)
1916+
static void
1917+
init_kmem_cache_node(struct kmem_cache_node *n, struct kmem_cache *s)
19171918
{
19181919
n->nr_partial = 0;
1920+
1921+
/*
1922+
* The larger the object size is, the more pages we want on the partial
1923+
* list to avoid pounding the page allocator excessively.
1924+
*/
1925+
n->min_partial = ilog2(s->size);
1926+
if (n->min_partial < MIN_PARTIAL)
1927+
n->min_partial = MIN_PARTIAL;
1928+
else if (n->min_partial > MAX_PARTIAL)
1929+
n->min_partial = MAX_PARTIAL;
1930+
19191931
spin_lock_init(&n->list_lock);
19201932
INIT_LIST_HEAD(&n->partial);
19211933
#ifdef CONFIG_SLUB_DEBUG
@@ -2087,7 +2099,7 @@ static struct kmem_cache_node *early_kmem_cache_node_alloc(gfp_t gfpflags,
20872099
init_object(kmalloc_caches, n, 1);
20882100
init_tracking(kmalloc_caches, n);
20892101
#endif
2090-
init_kmem_cache_node(n);
2102+
init_kmem_cache_node(n, kmalloc_caches);
20912103
inc_slabs_node(kmalloc_caches, node, page->objects);
20922104

20932105
/*
@@ -2144,7 +2156,7 @@ static int init_kmem_cache_nodes(struct kmem_cache *s, gfp_t gfpflags)
21442156

21452157
}
21462158
s->node[node] = n;
2147-
init_kmem_cache_node(n);
2159+
init_kmem_cache_node(n, s);
21482160
}
21492161
return 1;
21502162
}
@@ -2155,7 +2167,7 @@ static void free_kmem_cache_nodes(struct kmem_cache *s)
21552167

21562168
static int init_kmem_cache_nodes(struct kmem_cache *s, gfp_t gfpflags)
21572169
{
2158-
init_kmem_cache_node(&s->local_node);
2170+
init_kmem_cache_node(&s->local_node, s);
21592171
return 1;
21602172
}
21612173
#endif
@@ -2715,7 +2727,6 @@ size_t ksize(const void *object)
27152727
*/
27162728
return s->size;
27172729
}
2718-
EXPORT_SYMBOL(ksize);
27192730

27202731
void kfree(const void *x)
27212732
{
@@ -2890,7 +2901,7 @@ static int slab_mem_going_online_callback(void *arg)
28902901
ret = -ENOMEM;
28912902
goto out;
28922903
}
2893-
init_kmem_cache_node(n);
2904+
init_kmem_cache_node(n, s);
28942905
s->node[nid] = n;
28952906
}
28962907
out:

0 commit comments

Comments
 (0)