From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx188.postini.com [74.125.245.188]) by kanga.kvack.org (Postfix) with SMTP id EC4A36B004D for ; Thu, 10 May 2012 22:07:38 -0400 (EDT) Received: by dakp5 with SMTP id p5so3388193dak.14 for ; Thu, 10 May 2012 19:07:37 -0700 (PDT) Date: Fri, 11 May 2012 10:08:21 +0800 From: "majianpeng" Subject: [PATCH] slub: missing test for partial pages flush work in flush_all Message-ID: <201205111008157652383@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: slub-maintainer , gilad Cc: linux-mm Subject: [PATCH] slub: missing test for partial pages flush work in flush_all Find some kernel message like: SLUB raid5-md127: kmem_cache_destroy called for cache that still has objects. Pid: 6143, comm: mdadm Tainted: G O 3.4.0-rc6+ #75 Call Trace: [] kmem_cache_destroy+0x328/0x400 [] free_conf+0x2d/0xf0 [raid456] [] stop+0x41/0x60 [raid456] [] md_stop+0x1a/0x60 [md_mod] [] do_md_stop+0x74/0x470 [md_mod] [] md_ioctl+0xff/0x11f0 [md_mod] [] blkdev_ioctl+0xd8/0x7a0 [] block_ioctl+0x3b/0x40 [] do_vfs_ioctl+0x96/0x560 [] sys_ioctl+0x91/0xa0 [] system_call_fastpath+0x16/0x1b Then using kmemleak can found those messages: unreferenced object 0xffff8800b6db7380 (size 112): comm "mdadm", pid 5783, jiffies 4294810749 (age 90.589s) hex dump (first 32 bytes): 01 01 db b6 ad 4e ad de ff ff ff ff ff ff ff ff .....N.......... ff ff ff ff ff ff ff ff 98 40 4a 82 ff ff ff ff .........@J..... backtrace: [] kmemleak_alloc+0x21/0x50 [] kmem_cache_alloc+0xeb/0x1b0 [] kmem_cache_open+0x2f1/0x430 [] kmem_cache_create+0x158/0x320 [] setup_conf+0x649/0x770 [raid456] [] run+0x68b/0x840 [raid456] [] md_run+0x529/0x940 [md_mod] [] do_md_run+0x18/0xc0 [md_mod] [] md_ioctl+0xba8/0x11f0 [md_mod] [] blkdev_ioctl+0xd8/0x7a0 [] block_ioctl+0x3b/0x40 [] do_vfs_ioctl+0x96/0x560 [] sys_ioctl+0x91/0xa0 [] system_call_fastpath+0x16/0x1b [] 0xffffffffffffffff This bug introduced by Commit a8364d5555b2030d093cde0f0795.The commit did not include checks for per cpu partial pages being present on a cpu. Signed-off-by: majianpeng --- mm/slub.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index ffe13fd..6fce08f 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info) struct kmem_cache *s = info; struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu); - return !!(c->page); + return c->page || c->partial; } static void flush_all(struct kmem_cache *s) -- 1.7.5.4 Thanks all. majianpeng 2012-05-09 -------------- majianpeng 2012-05-11 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: email@kvack.org