From owner-cvs-src@FreeBSD.ORG Wed Apr 16 11:33:32 2008 Return-Path: Delivered-To: cvs-src@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ACC03106564A; Wed, 16 Apr 2008 11:33:32 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9B2C78FC19; Wed, 16 Apr 2008 11:33:32 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m3GBXW1t012544; Wed, 16 Apr 2008 11:33:32 GMT (envelope-from kib@repoman.freebsd.org) Received: (from kib@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m3GBXWma012543; Wed, 16 Apr 2008 11:33:32 GMT (envelope-from kib) Message-Id: <200804161133.m3GBXWma012543@repoman.freebsd.org> From: Konstantin Belousov Date: Wed, 16 Apr 2008 11:33:32 +0000 (UTC) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Cc: Subject: cvs commit: src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys zfs_znode.h src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_vnops.c zfs_znode.c src/sys/fs/msdosfs denode.h msdosfs_vnops.c src/sys/fs/smbfs smbfs_node.h smbfs_vnops.c src/sys/fs/tmpfs tmpfs.h tmpfs_vfsops.c tmpfs_vnops.c ... X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Apr 2008 11:33:32 -0000 kib 2008-04-16 11:33:32 UTC FreeBSD src repository Modified files: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys zfs_znode.h sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_vnops.c zfs_znode.c sys/fs/msdosfs denode.h msdosfs_vnops.c sys/fs/smbfs smbfs_node.h smbfs_vnops.c sys/fs/tmpfs tmpfs.h tmpfs_vfsops.c tmpfs_vnops.c sys/gnu/fs/ext2fs ext2_vnops.c inode.h sys/gnu/fs/xfs/FreeBSD xfs_vnops.c sys/kern kern_lockf.c vfs_default.c vfs_subr.c sys/nfs4client nfs4_vnops.c sys/nfsclient nfs_lock.c nfs_vnops.c nfsnode.h sys/sys lockf.h vnode.h sys/ufs/ufs inode.h ufs_vnops.c Log: Move the head of byte-level advisory lock list from the filesystem-specific vnode data to the struct vnode. Provide the default implementation for the vop_advlock and vop_advlockasync. Purge the locks on the vnode reclaim by using the lf_purgelocks(). The default implementation is augmented for the nfs and smbfs. In the nfs_advlock, push the Giant inside the nfs_dolock. Before the change, the vop_advlock and vop_advlockasync have taken the unlocked vnode and dereferenced the fs-private inode data, racing with with the vnode reclamation due to forced unmount. Now, the vop_getattr under the shared vnode lock is used to obtain the inode size, and later, in the lf_advlockasync, after locking the vnode interlock, the VI_DOOMED flag is checked to prevent an operation on the doomed vnode. The implementation of the lf_purgelocks() is submitted by dfr. Reported by: kris Tested by: kris, pho Discussed with: jeff, dfr MFC after: 2 weeks Revision Changes Path 1.3 +0 -1 src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h 1.31 +0 -39 src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c 1.15 +0 -1 src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c 1.39 +0 -1 src/sys/fs/msdosfs/denode.h 1.185 +0 -35 src/sys/fs/msdosfs/msdosfs_vnops.c 1.8 +0 -1 src/sys/fs/smbfs/smbfs_node.h 1.69 +4 -4 src/sys/fs/smbfs/smbfs_vnops.c 1.13 +0 -3 src/sys/fs/tmpfs/tmpfs.h 1.18 +0 -1 src/sys/fs/tmpfs/tmpfs_vfsops.c 1.18 +0 -32 src/sys/fs/tmpfs/tmpfs_vnops.c 1.113 +0 -20 src/sys/gnu/fs/ext2fs/ext2_vnops.c 1.45 +0 -1 src/sys/gnu/fs/ext2fs/inode.h 1.9 +4 -4 src/sys/gnu/fs/xfs/FreeBSD/xfs_vnops.c 1.62 +96 -1 src/sys/kern/kern_lockf.c 1.144 +40 -1 src/sys/kern/vfs_default.c 1.728 +5 -0 src/sys/kern/vfs_subr.c 1.44 +29 -11 src/sys/nfs4client/nfs4_vnops.c 1.47 +18 -8 src/sys/nfsclient/nfs_lock.c 1.284 +23 -19 src/sys/nfsclient/nfs_vnops.c 1.62 +0 -1 src/sys/nfsclient/nfsnode.h 1.22 +6 -0 src/sys/sys/lockf.h 1.336 +3 -0 src/sys/sys/vnode.h 1.52 +0 -1 src/sys/ufs/ufs/inode.h 1.297 +0 -41 src/sys/ufs/ufs/ufs_vnops.c