On Tue, 14 May 2013 16:38:38 +0400 Andrey Vagin <avagin@xxxxxxxxxx> wrote: > struct memcg_cache_params has a union. Different parts of this union are > used for root and non-root caches. A part with destroying work is used only > for non-root caches. That union is a bit dangerous. Perhaps it would be better to do something like --- a/include/linux/slab.h~a +++ a/include/linux/slab.h @@ -337,15 +337,17 @@ static __always_inline int kmalloc_size( struct memcg_cache_params { bool is_root_cache; union { - struct kmem_cache *memcg_caches[0]; - struct { + struct memcg_root_cache { + struct kmem_cache *caches[0]; + } memcg_root_cache; + struct memcg_child_cache { struct mem_cgroup *memcg; struct list_head list; struct kmem_cache *root_cache; bool dead; atomic_t nr_pages; struct work_struct destroy; - }; + } memcg_child_cache; }; }; And then adopt the convention of selecting either memcg_root_cache or memcg_child_cache at the highest level then passing the more strongly typed pointer to callees. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>