summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-09-22 20:29:03 +0000
committerkib <kib@FreeBSD.org>2013-09-22 20:29:03 +0000
commit752a7a786f64701363c2727c927615419313b0d0 (patch)
tree571a3a59cb1d6308dca6a7119468c3e655aa315e
parent5252c8b0bf99df2fc687ffe7579e180673c0b619 (diff)
downloadFreeBSD-src-752a7a786f64701363c2727c927615419313b0d0.zip
FreeBSD-src-752a7a786f64701363c2727c927615419313b0d0.tar.gz
Revert r255797. The LK_UPGRADE | LK_NOWAIT drops the lock.
Approved by: re (marius, implicit)
-rw-r--r--sys/kern/vfs_bio.c16
1 files changed, 2 insertions, 14 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 5219d35..ea8a002 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2624,8 +2624,6 @@ flushbufqueues(struct vnode *lvp, int target, int flushdeps)
int hasdeps;
int flushed;
int queue;
- int error;
- bool unlock;
flushed = 0;
queue = QUEUE_DIRTY;
@@ -2701,16 +2699,7 @@ flushbufqueues(struct vnode *lvp, int target, int flushdeps)
BUF_UNLOCK(bp);
continue;
}
- if (lvp == NULL) {
- unlock = true;
- error = vn_lock(vp, LK_EXCLUSIVE | LK_NOWAIT);
- } else {
- ASSERT_VOP_LOCKED(vp, "getbuf");
- unlock = false;
- error = VOP_ISLOCKED(vp) == LK_EXCLUSIVE ? 0 :
- vn_lock(vp, LK_UPGRADE | LK_NOWAIT);
- }
- if (error == 0) {
+ if (vn_lock(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_CANRECURSE) == 0) {
mtx_unlock(&bqdirty);
CTR3(KTR_BUF, "flushbufqueue(%p) vp %p flags %X",
bp, bp->b_vp, bp->b_flags);
@@ -2722,8 +2711,7 @@ flushbufqueues(struct vnode *lvp, int target, int flushdeps)
notbufdflushes++;
}
vn_finished_write(mp);
- if (unlock)
- VOP_UNLOCK(vp, 0);
+ VOP_UNLOCK(vp, 0);
flushwithdeps += hasdeps;
flushed++;
OpenPOWER on IntegriCloud