Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Oct 2010 12:30:14 GMT
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        freebsd-fs@FreeBSD.org
Subject:   Re: misc/151111: vnodes leakage during zfs unmount
Message-ID:  <201010181230.o9ICUEAi016474@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
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
 
 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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010181230.o9ICUEAi016474>