nullfs: use VOP_NEED_INACTIVE

Reviewed by:	kib
Tested by:	pho (previous version)
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Mateusz Guzik 2019-08-30 00:30:03 +00:00
parent 35d3dd8b12
commit 13c73428dc
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351617

View File

@ -732,14 +732,13 @@ null_unlock(struct vop_unlock_args *ap)
* ours.
*/
static int
null_inactive(struct vop_inactive_args *ap __unused)
null_want_recycle(struct vnode *vp)
{
struct vnode *vp, *lvp;
struct vnode *lvp;
struct null_node *xp;
struct mount *mp;
struct null_mount *xmp;
vp = ap->a_vp;
xp = VTONULL(vp);
lvp = NULLVPTOLOWERVP(vp);
mp = vp->v_mount;
@ -753,12 +752,31 @@ null_inactive(struct vop_inactive_args *ap __unused)
* deleted, then free up the vnode so as not to tie up
* the lower vnodes.
*/
return (1);
}
return (0);
}
static int
null_inactive(struct vop_inactive_args *ap)
{
struct vnode *vp;
vp = ap->a_vp;
if (null_want_recycle(vp)) {
vp->v_object = NULL;
vrecycle(vp);
}
return (0);
}
static int
null_need_inactive(struct vop_need_inactive_args *ap)
{
return (null_want_recycle(ap->a_vp));
}
/*
* Now, the nullfs vnode and, due to the sharing lock, the lower
* vnode, are exclusively locked, and we shall destroy the null vnode.
@ -907,7 +925,7 @@ struct vop_vector null_vnodeops = {
.vop_getattr = null_getattr,
.vop_getwritemount = null_getwritemount,
.vop_inactive = null_inactive,
.vop_need_inactive = vop_stdneed_inactive,
.vop_need_inactive = null_need_inactive,
.vop_islocked = vop_stdislocked,
.vop_lock1 = null_lock,
.vop_lookup = null_lookup,