Skip to content

Commit 104e2a6

Browse files
committed
Merge branch 'akpm' (patches from Andrew)
Merge slub bulk allocator updates from Andrew Morton: "This missed the merge window because I was waiting for some repairs to come in. Nothing actually uses the bulk allocator yet and the changes to other code paths are pretty small. And the net guys are waiting for this so they can start merging the client code" More comments from Jesper Dangaard Brouer: "The kmem_cache_alloc_bulk() call, in mm/slub.c, were included in previous kernel. The present version contains a bug. Vladimir Davydov noticed it contained a bug, when kernel is compiled with CONFIG_MEMCG_KMEM (see commit 03ec0ed: "slub: fix kmem cgroup bug in kmem_cache_alloc_bulk"). Plus the mem cgroup counterpart in kmem_cache_free_bulk() were missing (see commit 0337451 "slub: add missing kmem cgroup support to kmem_cache_free_bulk"). I don't consider the fix stable-material because there are no in-tree users of the API. But with known bugs (for memcg) I cannot start using the API in the net-tree" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: slab/slub: adjust kmem_cache_alloc_bulk API slub: add missing kmem cgroup support to kmem_cache_free_bulk slub: fix kmem cgroup bug in kmem_cache_alloc_bulk slub: optimize bulk slowpath free by detached freelist slub: support for bulk free with SLUB freelists
2 parents dcfeda9 + 865762a commit 104e2a6

File tree

6 files changed

+182
-76
lines changed

6 files changed

+182
-76
lines changed

include/linux/slab.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ void kmem_cache_free(struct kmem_cache *, void *);
316316
* Note that interrupts must be enabled when calling these functions.
317317
*/
318318
void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
319-
bool kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
319+
int kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
320320

321321
#ifdef CONFIG_NUMA
322322
void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment;

mm/slab.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3419,7 +3419,7 @@ void kmem_cache_free_bulk(struct kmem_cache *s, size_t size, void **p)
34193419
}
34203420
EXPORT_SYMBOL(kmem_cache_free_bulk);
34213421

3422-
bool kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
3422+
int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
34233423
void **p)
34243424
{
34253425
return __kmem_cache_alloc_bulk(s, flags, size, p);

mm/slab.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer,
170170
* may be allocated or freed using these operations.
171171
*/
172172
void __kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
173-
bool __kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
173+
int __kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
174174

175175
#ifdef CONFIG_MEMCG_KMEM
176176
/*

mm/slab_common.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void __kmem_cache_free_bulk(struct kmem_cache *s, size_t nr, void **p)
112112
kmem_cache_free(s, p[i]);
113113
}
114114

115-
bool __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
115+
int __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
116116
void **p)
117117
{
118118
size_t i;
@@ -121,10 +121,10 @@ bool __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
121121
void *x = p[i] = kmem_cache_alloc(s, flags);
122122
if (!x) {
123123
__kmem_cache_free_bulk(s, i, p);
124-
return false;
124+
return 0;
125125
}
126126
}
127-
return true;
127+
return i;
128128
}
129129

130130
#ifdef CONFIG_MEMCG_KMEM

mm/slob.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ void kmem_cache_free_bulk(struct kmem_cache *s, size_t size, void **p)
617617
}
618618
EXPORT_SYMBOL(kmem_cache_free_bulk);
619619

620-
bool kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
620+
int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
621621
void **p)
622622
{
623623
return __kmem_cache_alloc_bulk(s, flags, size, p);

0 commit comments

Comments
 (0)