version 1.75, 2017/02/17 08:30:00 |
version 1.76, 2017/03/06 10:07:52 |
Line 919 vrecycle(vnode_t *vp) |
|
Line 919 vrecycle(vnode_t *vp) |
|
* On layered file systems waiting for the lock would open a can of |
* On layered file systems waiting for the lock would open a can of |
* deadlocks as the lower vnodes may have other active references. |
* deadlocks as the lower vnodes may have other active references. |
*/ |
*/ |
error = vn_lock(vp, LK_EXCLUSIVE | LK_NOWAIT); |
error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY | LK_NOWAIT); |
|
|
mutex_enter(vp->v_interlock); |
mutex_enter(vp->v_interlock); |
VSTATE_CHANGE(vp, VS_BLOCKED, VS_ACTIVE); |
VSTATE_CHANGE(vp, VS_BLOCKED, VS_ACTIVE); |
|
|
vgone(vnode_t *vp) |
vgone(vnode_t *vp) |
{ |
{ |
|
|
if (vn_lock(vp, LK_EXCLUSIVE) != 0) { |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
VSTATE_ASSERT(vp, VS_RECLAIMED); |
|
vrele(vp); |
|
} |
|
|
|
mutex_enter(vp->v_interlock); |
mutex_enter(vp->v_interlock); |
vcache_reclaim(vp); |
VSTATE_WAIT_STABLE(vp); |
|
if (VSTATE_GET(vp) == VS_ACTIVE) |
|
vcache_reclaim(vp); |
|
VSTATE_ASSERT(vp, VS_RECLAIMED); |
vrelel(vp, 0); |
vrelel(vp, 0); |
} |
} |
|
|