Messages in this thread | | | Subject | Re: [PATCH] slab: initialize unused alien cache entry as NULL at alloc_alien_cache(). | From | Andi Kleen <> | Date | Tue, 22 Dec 2009 13:40:34 +0100 |
| |
Haicheng Li <haicheng.li@linux.intel.com> writes:
> Memory hotplug would online new node in runtime, then reap timer will > add this new node as a reap node. In such case, for each existing > kmem_list, we need to ensure that the alien cache entry corresponding > to this new added node is NULL. Otherwise, it might cause BUG when > reap_alien() affecting the new added node. > > Signed-off-by: Haicheng Li <haicheng.li@linux.intel.com>
Acked-by: Andi Kleen <ak@linux.intel.com> IMHO a 2.6.33 and even stable candidate
-Andi
> --- > mm/slab.c | 7 +++---- > 1 files changed, 3 insertions(+), 4 deletions(-) > > diff --git a/mm/slab.c b/mm/slab.c > index 7dfa481..a9486a0 100644 > --- a/mm/slab.c > +++ b/mm/slab.c > @@ -966,18 +966,17 @@ static void *alternate_node_alloc(struct kmem_cache *, gfp_t); > static struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp) > { > struct array_cache **ac_ptr; > - int memsize = sizeof(void *) * nr_node_ids; > + int memsize = sizeof(void *) * MAX_NUMNODES; > int i; > > if (limit > 1) > limit = 12; > ac_ptr = kmalloc_node(memsize, gfp, node); > if (ac_ptr) { > + memset(ac_ptr, 0, memsize); > for_each_node(i) { > - if (i == node || !node_online(i)) { > - ac_ptr[i] = NULL; > + if (i == node || !node_online(i)) > continue; > - } > ac_ptr[i] = alloc_arraycache(node, limit, 0xbaadf00d, gfp); > if (!ac_ptr[i]) { > for (i--; i >= 0; i--) > -- > 1.6.0.rc1
-- ak@linux.intel.com -- Speaking for myself only.
| |