summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vnops.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2003-02-26 00:24:19 +0000
committerjeff <jeff@FreeBSD.org>2003-02-26 00:24:19 +0000
commit3c4fe935b77d6782fd5368cf16b00203ea1d0fc4 (patch)
tree91c556af40931f66385f5f021ee7f081f5b1bd4a /sys/nfsclient/nfs_vnops.c
parent0309ffd2e72172916b8a0e3680da3cb492914835 (diff)
downloadFreeBSD-src-3c4fe935b77d6782fd5368cf16b00203ea1d0fc4.zip
FreeBSD-src-3c4fe935b77d6782fd5368cf16b00203ea1d0fc4.tar.gz
- The interlock was not being droped in nfs_flush() if the first part of
an if clause was true. Break the two clauses out into seperate statements since they require different actions. Reported/Tested by: jake Spotted by: jhb
Diffstat (limited to 'sys/nfsclient/nfs_vnops.c')
-rw-r--r--sys/nfsclient/nfs_vnops.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index 718bc00..bc00477 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -2659,8 +2659,11 @@ again:
if (bvecpos >= bvecsize)
break;
if ((bp->b_flags & (B_DELWRI | B_NEEDCOMMIT)) !=
- (B_DELWRI | B_NEEDCOMMIT) ||
- BUF_LOCK(bp,
+ (B_DELWRI | B_NEEDCOMMIT)) {
+ nbp = TAILQ_NEXT(bp, b_vnbufs);
+ continue;
+ }
+ if (BUF_LOCK(bp,
LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK,
VI_MTX(vp))) {
VI_LOCK(vp);
OpenPOWER on IntegriCloud