Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 319555
b: refs/heads/master
c: f6e7def
h: refs/heads/master
i:
  319553: a8f624e
  319551: e58ddfe
v: v3
  • Loading branch information
Christoph Lameter authored and Pekka Enberg committed Jun 1, 2012
1 parent f4812b0 commit 757eb1f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c17dda40a6a4ed95f035db38b7ba4fab0d99da44
refs/heads/master: f6e7def7f7d749759e4bf36dcc25ae289a20d868
17 changes: 10 additions & 7 deletions trunk/mm/slub.c
Original file line number Diff line number Diff line change
Expand Up @@ -2208,6 +2208,7 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
unsigned long addr, struct kmem_cache_cpu *c)
{
void *freelist;
struct page *page;
unsigned long flags;

local_irq_save(flags);
Expand All @@ -2220,13 +2221,14 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
c = this_cpu_ptr(s->cpu_slab);
#endif

if (!c->page)
page = c->page;
if (!page)
goto new_slab;
redo:

if (unlikely(!node_match(c, node))) {
stat(s, ALLOC_NODE_MISMATCH);
deactivate_slab(s, c->page, c->freelist);
deactivate_slab(s, page, c->freelist);
c->page = NULL;
c->freelist = NULL;
goto new_slab;
Expand All @@ -2239,7 +2241,7 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,

stat(s, ALLOC_SLOWPATH);

freelist = get_freelist(s, c->page);
freelist = get_freelist(s, page);

if (!freelist) {
c->page = NULL;
Expand All @@ -2264,8 +2266,8 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
new_slab:

if (c->partial) {
c->page = c->partial;
c->partial = c->page->next;
page = c->page = c->partial;
c->partial = page->next;
stat(s, CPU_PARTIAL_ALLOC);
c->freelist = NULL;
goto redo;
Expand All @@ -2281,14 +2283,15 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
return NULL;
}

page = c->page;
if (likely(!kmem_cache_debug(s)))
goto load_freelist;

/* Only entered in the debug case */
if (!alloc_debug_processing(s, c->page, freelist, addr))
if (!alloc_debug_processing(s, page, freelist, addr))
goto new_slab; /* Slab failed checks. Next slab needed */

deactivate_slab(s, c->page, get_freepointer(s, freelist));
deactivate_slab(s, page, get_freepointer(s, freelist));
c->page = NULL;
c->freelist = NULL;
local_irq_restore(flags);
Expand Down

0 comments on commit 757eb1f

Please sign in to comment.