diff options
author | jeff <jeff@FreeBSD.org> | 2003-02-26 00:24:19 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2003-02-26 00:24:19 +0000 |
commit | 3c4fe935b77d6782fd5368cf16b00203ea1d0fc4 (patch) | |
tree | 91c556af40931f66385f5f021ee7f081f5b1bd4a /sys/nfsclient/nfs_vnops.c | |
parent | 0309ffd2e72172916b8a0e3680da3cb492914835 (diff) | |
download | FreeBSD-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.c | 7 |
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); |