diff options
author | kib <kib@FreeBSD.org> | 2013-09-22 20:29:03 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2013-09-22 20:29:03 +0000 |
commit | 752a7a786f64701363c2727c927615419313b0d0 (patch) | |
tree | 571a3a59cb1d6308dca6a7119468c3e655aa315e /sys/kern/vfs_bio.c | |
parent | 5252c8b0bf99df2fc687ffe7579e180673c0b619 (diff) | |
download | FreeBSD-src-752a7a786f64701363c2727c927615419313b0d0.zip FreeBSD-src-752a7a786f64701363c2727c927615419313b0d0.tar.gz |
Revert r255797. The LK_UPGRADE | LK_NOWAIT drops the lock.
Approved by: re (marius, implicit)
Diffstat (limited to 'sys/kern/vfs_bio.c')
-rw-r--r-- | sys/kern/vfs_bio.c | 16 |
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++; |