From 4b8b33db8ab3d11223c1226ea62c38a4549967b1 Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 13 Mar 2003 07:04:11 +0000 Subject: - Lock the buf before inspecting its contents. --- sys/nfsclient/nfs_vnops.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'sys/nfsclient/nfs_vnops.c') diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c index 2a137b7..253f0c7 100644 --- a/sys/nfsclient/nfs_vnops.c +++ b/sys/nfsclient/nfs_vnops.c @@ -2658,18 +2658,16 @@ again: for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { if (bvecpos >= bvecsize) break; - if ((bp->b_flags & (B_DELWRI | B_NEEDCOMMIT)) != - (B_DELWRI | B_NEEDCOMMIT)) { + if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL)) { nbp = TAILQ_NEXT(bp, b_vnbufs); continue; } - if (BUF_LOCK(bp, - LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, - VI_MTX(vp))) { - VI_LOCK(vp); + if ((bp->b_flags & (B_DELWRI | B_NEEDCOMMIT)) != + (B_DELWRI | B_NEEDCOMMIT)) { nbp = TAILQ_NEXT(bp, b_vnbufs); continue; } + VI_UNLOCK(vp); bremfree(bp); /* * Work out if all buffers are using the same cred -- cgit v1.1