From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: linux-nfs-owner@vger.kernel.org Received: from aserp1040.oracle.com ([141.146.126.69]:22561 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751735Ab3JKOTt (ORCPT ); Fri, 11 Oct 2013 10:19:49 -0400 From: Chuck Lever To: linux-kernel@vger.kernel.org Cc: linux-nfs@vger.kernel.org Subject: [PATCH] register_shrinker: shrinker->nr_deferred is never freed Date: Fri, 11 Oct 2013 10:19:47 -0400 Message-Id: <20131011141946.17927.42942.stgit@nfsvm18.us.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Sender: linux-nfs-owner@vger.kernel.org List-ID: kmemleak reports a leak after every mount-umount cycle: unreferenced object 0xffff88006b339150 (size 8): comm "mount.nfs", pid 752, jiffies 4294802777 (age 1515.620s) hex dump (first 8 bytes): 00 00 00 00 00 00 00 00 ........ backtrace: [] kmemleak_alloc+0x79/0xb0 [] __kmalloc+0x1e1/0x380 [] register_shrinker+0x40/0x90 [] sget+0x680/0x6a0 [] nfs_fs_mount_common+0x7c/0x180 [nfs] [] nfs_xdev_mount+0xc1/0x100 [nfs] [] mount_fs+0x7b/0x1a0 [] vfs_kern_mount+0x6a/0xf0 [] nfs_do_submount+0xe5/0x140 [nfs] [] nfs4_submount+0x806/0x890 [nfsv4] [] nfs_d_automount+0xb2/0x1b0 [nfs] [] follow_managed+0x1a4/0x300 [] lookup_slow+0x7a/0xa9 [] link_path_walk+0x243/0x8b0 [] path_lookupat+0x5b/0x7c0 [] filename_lookup+0x2b/0xc0 Commit 1d3d4437 adds logic to kmalloc an array (nr_deferred) in register_shrinker(), but this array is not freed when the shrinker is released. Signed-off-by: Chuck Lever --- mm/vmscan.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/vmscan.c b/mm/vmscan.c index 53f2f82..eea668d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -211,6 +211,7 @@ void unregister_shrinker(struct shrinker *shrinker) down_write(&shrinker_rwsem); list_del(&shrinker->list); up_write(&shrinker_rwsem); + kfree(shrinker->nr_deferred); } EXPORT_SYMBOL(unregister_shrinker);