aboutsummaryrefslogtreecommitdiff
path: root/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c')
-rw-r--r--sys/gnu/fs/xfs/FreeBSD/xfs_vnode.c15
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);