Date: Fri, 16 Jul 2010 20:23:24 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: cvs-src-old@freebsd.org Subject: cvs commit: src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_znode.c src/sys/fs/cd9660 cd9660_vfsops.c src/sys/fs/udf udf_vfsops.c src/sys/ufs/ffs ffs_softdep.c ffs_vfsops.c Message-ID: <201007162024.o6GKO7OJ094856@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
jhb 2010-07-16 20:23:24 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_znode.c sys/fs/cd9660 cd9660_vfsops.c sys/fs/udf udf_vfsops.c sys/ufs/ffs ffs_softdep.c ffs_vfsops.c Log: SVN rev 210173 on 2010-07-16 20:23:24Z by jhb When the MNTK_EXTENDED_SHARED mount option was added, some filesystems were changed to defer the setting of VN_LOCK_ASHARE() (which clears LK_NOSHARE in the vnode lock's flags) until after they had determined if the vnode was a FIFO. This occurs after the vnode has been inserted into a VFS hash or some similar table, so it is possible for another thread to find this vnode via vget() on an i-node number and block on the vnode lock. If the lockmgr interlock (vnode interlock for vnode locks) is not held when clearing the LK_NOSHARE flag, then the lk_flags field can be clobbered. As a result the thread blocked on the vnode lock may never get woken up. Fix this by holding the vnode interlock while modifying the lock flags in this case. The softupdates code also toggles LK_NOSHARE in one function to close a race with snapshots. Fix this code to grab the interlock while fiddling with lk_flags. Revision Changes Path 1.15.2.10 +4 -1 src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c 1.150.2.6 +3 -1 src/sys/fs/cd9660/cd9660_vfsops.c 1.48.2.9 +4 -1 src/sys/fs/udf/udf_vfsops.c 1.211.2.10 +6 -0 src/sys/ufs/ffs/ffs_softdep.c 1.329.2.22 +2 -0 src/sys/ufs/ffs/ffs_vfsops.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007162024.o6GKO7OJ094856>