Date: Tue, 19 Oct 2010 17:36:01 +0300 From: Gleb Kurtsou <gleb.kurtsou@gmail.com> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: freebsd-fs@FreeBSD.org Subject: Re: misc/151111: vnodes leakage during zfs unmount Message-ID: <20101019143601.GA1982@tops> In-Reply-To: <201010181230.o9ICUEAi016474@freefall.freebsd.org> References: <201010181230.o9ICUEAi016474@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On (18/10/2010 12:30), Gleb Smirnoff wrote: > The following reply was made to PR kern/151111; it has been noted by GNATS. > > From: Gleb Smirnoff <glebius@FreeBSD.org> > To: "Oleg A. Mamontov" <oleg@mamontov.net> > Cc: kib@FreeBSD.org, pjd@FreeBSD.org, freebsd-gnats-submit@FreeBSD.org > Subject: Re: misc/151111: vnodes leakage during zfs unmount > Date: Mon, 18 Oct 2010 16:11:55 +0400 > > On Thu, Sep 30, 2010 at 11:56:18AM +0000, Oleg A. Mamontov wrote: > O> for i in `jot 1000`; do zfs mount tank; printf '%4d ' $i; sysctl vfs.numvnodes; zfs umount tank; done > O> ######################## > O> 1 vfs.numvnodes: 708 > O> 2 vfs.numvnodes: 709 > O> 3 vfs.numvnodes: 710 > O> 4 vfs.numvnodes: 711 > O> 5 vfs.numvnodes: 712 > O> > O> .. > O> > O> 995 vfs.numvnodes: 1702 > O> 996 vfs.numvnodes: 1703 > O> 997 vfs.numvnodes: 1704 > O> 998 vfs.numvnodes: 1705 > O> 999 vfs.numvnodes: 1706 > O> 1000 vfs.numvnodes: 1707 In my tests zfs vnodes are getting properly gc'ed. Most likely maxvnodes limit is not hit during the test, thus vnodes are not reclaimed. Try making all available vnodes used, e.g. by running 'find /usr >/dev/null' before the test. Running the test you'll see vfs.numvnodes going up and down. It's more visible after lowering kern.maxvnodes. I've used kern.maxvnodes=1000. Default value on my system is ~127000. > Here is my lame investigation of the problem. In the zfs_domount() function > we've got the following code: > > /* Grab extra reference. */ > VERIFY(VFS_ROOT(vfsp, LK_EXCLUSIVE, &vp) == 0); > VOP_UNLOCK(vp, 0); > > I suppose this code is expected to put an extra reference on the > vfsp->mnt_vnodecovered vnode. Do I mistake here? If I don't then this is > the source of leak. > > Debugging shows that zfs_zget(), called subsequently from zfs_root(), > does not find an existing znode/vnode and allocates a new one, see at the > end of zfs_zget() function. This vnode gots a reference and is forgotten. > > Sorry, if I am being mistaken :) > > -- > Totus tuus, Glebius. > _______________________________________________ > freebsd-fs@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-fs > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101019143601.GA1982>