summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vfsops.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2003-10-04 13:44:51 +0000
committerjeff <jeff@FreeBSD.org>2003-10-04 13:44:51 +0000
commit46f6642c5bca121df517d577061a4fb52a124f96 (patch)
tree487476dd61515d18f833992c9d180bc46bf35519 /sys/nfsclient/nfs_vfsops.c
parentc95a875344205952f20ff014cf829029ff0c4b26 (diff)
downloadFreeBSD-src-46f6642c5bca121df517d577061a4fb52a124f96.zip
FreeBSD-src-46f6642c5bca121df517d577061a4fb52a124f96.tar.gz
- Acquire the vnode interlock prior to dropping the mntvnode_mtx.
- Make a note of the lack of XLOCK protection in this code. We would access a vnode while it is changing identities without Giant.
Diffstat (limited to 'sys/nfsclient/nfs_vfsops.c')
-rw-r--r--sys/nfsclient/nfs_vfsops.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 6976012..b44ef6c 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -943,8 +943,9 @@ loop:
if (vp->v_mount != mp)
goto loop;
vnp = TAILQ_NEXT(vp, v_nmntvnodes);
- mtx_unlock(&mntvnode_mtx);
+ /* XXX Not obeying XLOCK. */
VI_LOCK(vp);
+ mtx_unlock(&mntvnode_mtx);
if (VOP_ISLOCKED(vp, NULL) || TAILQ_EMPTY(&vp->v_dirtyblkhd) ||
waitfor == MNT_LAZY) {
VI_UNLOCK(vp);
OpenPOWER on IntegriCloud