Messages in this thread | | | Date | Tue, 14 Sep 2010 20:36:44 +0300 | From | Pekka Enberg <> | Subject | Re: [PATCH 1/2] SLUB: Fix merged slab cache names |
| |
On 14.9.2010 20.26, Christoph Lameter wrote: > On Tue, 14 Sep 2010, Pekka Enberg wrote: > >> diff --git a/include/linux/slab.h b/include/linux/slab.h >> index 59260e2..df201cf 100644 >> --- a/include/linux/slab.h >> +++ b/include/linux/slab.h >> @@ -76,6 +76,8 @@ >> # define SLAB_FAILSLAB 0x00000000UL >> #endif >> >> +#define SLAB_DYNAMIC_NAME 0x04000000UL /* s->name is kmalloc()'d */ >> + > Put this into mm/slub.c as slub only flag? What is the difference from > refcount == 1? I can put it in mm/slub.c but I was worried about someone reusing the bit for something else.
Do you mean refcount == 2? You don't know during kmem cache release time if someone was merged to the cache or not. >> @@ -3218,6 +3221,18 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size, >> down_write(&slub_lock); >> s = find_mergeable(size, align, flags, name, ctor); >> if (s) { >> + if (!(s->flags& SLAB_DYNAMIC_NAME)) { >> + const char *new_name; >> + >> + new_name = kstrdup(s->name, GFP_KERNEL); > Ok. Keeping the original name. Why dont we do strdup by default and always > do a kfree(s->name) on close? > I tried that. It gets very nasty during bootstrap.
| |