svn commit: r255800 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Sun Sep 22 20:29:04 UTC 2013
Author: kib
Date: Sun Sep 22 20:29:03 2013
New Revision: 255800
URL: http://svnweb.freebsd.org/changeset/base/255800
Log:
Revert r255797. The LK_UPGRADE | LK_NOWAIT drops the lock.
Approved by: re (marius, implicit)
Modified:
head/sys/kern/vfs_bio.c
Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c Sun Sep 22 20:22:08 2013 (r255799)
+++ head/sys/kern/vfs_bio.c Sun Sep 22 20:29:03 2013 (r255800)
@@ -2624,8 +2624,6 @@ flushbufqueues(struct vnode *lvp, int ta
int hasdeps;
int flushed;
int queue;
- int error;
- bool unlock;
flushed = 0;
queue = QUEUE_DIRTY;
@@ -2701,16 +2699,7 @@ flushbufqueues(struct vnode *lvp, int ta
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 ta
notbufdflushes++;
}
vn_finished_write(mp);
- if (unlock)
- VOP_UNLOCK(vp, 0);
+ VOP_UNLOCK(vp, 0);
flushwithdeps += hasdeps;
flushed++;
More information about the svn-src-all
mailing list