diff options
Diffstat (limited to 'sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c')
-rw-r--r-- | sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c b/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c index 8e2b1f97274a..3b3f3e5b4916 100644 --- a/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c +++ b/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c @@ -104,13 +104,18 @@ vn_get( vp = vmap->v_vp; - error = vget(vp, 0, curthread); - if (error) { - vdrop(vp); + error = vget(vp, LK_EXCLUSIVE, curthread); + vdrop(vp); + if (error) return (NULL); - } - vdrop(vp); + /* + * Drop the vnode returned by vget here. + * VOP_RECLAIM(9) should block on internal XFS locks so that + * the reclaiming scheme still remains consistent even if the + * vp is not locked. + */ + VOP_UNLOCK(vp, 0); if (vp->v_data != xfs_vp) { vput(vp); return (NULL); |