summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_subs.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2002-09-25 02:38:43 +0000
committerjeff <jeff@FreeBSD.org>2002-09-25 02:38:43 +0000
commit5c7f8a426d77fd9157454ef8c03ad4298759b909 (patch)
tree92aceb1e68b4986cdcf026c3e92a8d9144c2ce36 /sys/nfsclient/nfs_subs.c
parent906daccf7224474d155117b8c9b209624ea6ec01 (diff)
downloadFreeBSD-src-5c7f8a426d77fd9157454ef8c03ad4298759b909.zip
FreeBSD-src-5c7f8a426d77fd9157454ef8c03ad4298759b909.tar.gz
- Lock access to the buf lists.
- Use vrefcnt() where appropriate. - Add some locking asserts.
Diffstat (limited to 'sys/nfsclient/nfs_subs.c')
-rw-r--r--sys/nfsclient/nfs_subs.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/nfsclient/nfs_subs.c b/sys/nfsclient/nfs_subs.c
index 1305122..c88f51e 100644
--- a/sys/nfsclient/nfs_subs.c
+++ b/sys/nfsclient/nfs_subs.c
@@ -793,6 +793,8 @@ loop:
if (vp->v_mount != mp) /* Paranoia */
goto loop;
nvp = TAILQ_NEXT(vp, v_nmntvnodes);
+ VI_LOCK(vp);
+ mtx_unlock(&mntvnode_mtx);
for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
nbp = TAILQ_NEXT(bp, b_vnbufs);
if (BUF_REFCNT(bp) == 0 &&
@@ -800,6 +802,8 @@ loop:
== (B_DELWRI | B_NEEDCOMMIT))
bp->b_flags &= ~(B_NEEDCOMMIT | B_CLUSTEROK);
}
+ VI_UNLOCK(vp);
+ mtx_lock(&mntvnode_mtx);
}
mtx_unlock(&mntvnode_mtx);
splx(s);
OpenPOWER on IntegriCloud