summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vfsops.c
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2003-11-05 04:30:08 +0000
committerkan <kan@FreeBSD.org>2003-11-05 04:30:08 +0000
commit36d60f3bb735f38bbec69f4cc40ef27a24629c54 (patch)
treed6d549e791dd7c4a627af5beb25ec44a2fcdd02d /sys/nfsclient/nfs_vfsops.c
parent932794c27cf2ec2241eadf3b4891463fa9eb2432 (diff)
downloadFreeBSD-src-36d60f3bb735f38bbec69f4cc40ef27a24629c54.zip
FreeBSD-src-36d60f3bb735f38bbec69f4cc40ef27a24629c54.tar.gz
Remove mntvnode_mtx and replace it with per-mountpoint mutex.
Introduce two new macros MNT_ILOCK(mp)/MNT_IUNLOCK(mp) to operate on this mutex transparently. Eventually new mutex will be protecting more fields in struct mount, not only vnode list. Discussed with: jeff
Diffstat (limited to 'sys/nfsclient/nfs_vfsops.c')
-rw-r--r--sys/nfsclient/nfs_vfsops.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 3df0fa3..49980cf 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -931,7 +931,7 @@ nfs_sync(struct mount *mp, int waitfor, struct ucred *cred, struct thread *td)
/*
* Force stale buffer cache information to be flushed.
*/
- mtx_lock(&mntvnode_mtx);
+ MNT_ILOCK(mp);
loop:
for (vp = TAILQ_FIRST(&mp->mnt_nvnodelist);
vp != NULL;
@@ -944,15 +944,15 @@ loop:
goto loop;
vnp = TAILQ_NEXT(vp, v_nmntvnodes);
VI_LOCK(vp);
- mtx_unlock(&mntvnode_mtx);
+ MNT_IUNLOCK(mp);
if (VOP_ISLOCKED(vp, NULL) || TAILQ_EMPTY(&vp->v_dirtyblkhd) ||
waitfor == MNT_LAZY) {
VI_UNLOCK(vp);
- mtx_lock(&mntvnode_mtx);
+ MNT_ILOCK(mp);
continue;
}
if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK, td)) {
- mtx_lock(&mntvnode_mtx);
+ MNT_ILOCK(mp);
goto loop;
}
error = VOP_FSYNC(vp, cred, waitfor, td);
@@ -960,8 +960,9 @@ loop:
allerror = error;
VOP_UNLOCK(vp, 0, td);
vrele(vp);
- mtx_lock(&mntvnode_mtx);
+
+ MNT_ILOCK(mp);
}
- mtx_unlock(&mntvnode_mtx);
+ MNT_IUNLOCK(mp);
return (allerror);
}
OpenPOWER on IntegriCloud