diff --git a/[refs] b/[refs] index f99d9ed04b01..33d916e74932 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4053497d6a37715f4b20dcc180a52717b4c8ffba +refs/heads/master: 02d7633fa567be7bf55a993b79d2a31b95ce2227 diff --git a/trunk/mm/slub.c b/trunk/mm/slub.c index a20053a89740..b14ea3ce43b2 100644 --- a/trunk/mm/slub.c +++ b/trunk/mm/slub.c @@ -1514,15 +1514,19 @@ static inline void *acquire_slab(struct kmem_cache *s, freelist = page->freelist; counters = page->counters; new.counters = counters; - if (mode) + if (mode) { new.inuse = page->objects; + new.freelist = NULL; + } else { + new.freelist = freelist; + } VM_BUG_ON(new.frozen); new.frozen = 1; } while (!__cmpxchg_double_slab(s, page, freelist, counters, - NULL, new.counters, + new.freelist, new.counters, "lock and freeze")); remove_partial(n, page); @@ -1564,7 +1568,6 @@ static void *get_partial_node(struct kmem_cache *s, object = t; available = page->objects - page->inuse; } else { - page->freelist = t; available = put_cpu_partial(s, page, 0); stat(s, CPU_PARTIAL_NODE); }