VFS: add VOP_GETLOWVNODE()

(cherry picked from commit 4cbe4c48a7e574ec1bb919351d7a57d252b00b62)
This commit is contained in:
Konstantin Belousov 2023-11-18 10:55:48 +02:00
parent 71f01edb54
commit 6bed0f65fb
3 changed files with 35 additions and 0 deletions

View file

@ -1131,6 +1131,23 @@ null_vput_pair(struct vop_vput_pair_args *ap)
return (res);
}
static int
null_getlowvnode(struct vop_getlowvnode_args *ap)
{
struct vnode *vp, *vpl;
vp = ap->a_vp;
if (vn_lock(vp, LK_SHARED) != 0)
return (EBADF);
vpl = NULLVPTOLOWERVP(vp);
vhold(vpl);
VOP_UNLOCK(vp);
VOP_GETLOWVNODE(vpl, ap->a_vplp, ap->a_flags);
vdrop(vpl);
return (0);
}
/*
* Global vfs data structures
*/
@ -1143,6 +1160,7 @@ struct vop_vector null_vnodeops = {
.vop_bmap = VOP_EOPNOTSUPP,
.vop_stat = null_stat,
.vop_getattr = null_getattr,
.vop_getlowvnode = null_getlowvnode,
.vop_getwritemount = null_getwritemount,
.vop_inactive = null_inactive,
.vop_need_inactive = null_need_inactive,

View file

@ -85,6 +85,7 @@ static int vop_stdgetpages_async(struct vop_getpages_async_args *ap);
static int vop_stdread_pgcache(struct vop_read_pgcache_args *ap);
static int vop_stdstat(struct vop_stat_args *ap);
static int vop_stdvput_pair(struct vop_vput_pair_args *ap);
static int vop_stdgetlowvnode(struct vop_getlowvnode_args *ap);
/*
* This vnode table stores what we want to do if the filesystem doesn't
@ -115,6 +116,7 @@ struct vop_vector default_vnodeops = {
.vop_fsync = VOP_NULL,
.vop_stat = vop_stdstat,
.vop_fdatasync = vop_stdfdatasync,
.vop_getlowvnode = vop_stdgetlowvnode,
.vop_getpages = vop_stdgetpages,
.vop_getpages_async = vop_stdgetpages_async,
.vop_getwritemount = vop_stdgetwritemount,
@ -1610,3 +1612,11 @@ vop_stdvput_pair(struct vop_vput_pair_args *ap)
vput(vp);
return (0);
}
static int
vop_stdgetlowvnode(struct vop_getlowvnode_args *ap)
{
vref(ap->a_vp);
*ap->a_vplp = ap->a_vp;
return (0);
}

View file

@ -471,6 +471,13 @@ vop_getwritemount {
OUT struct mount **mpp;
};
%% getwritevnode vp = = =
vop_getlowvnode {
IN struct vnode *vp;
OUT struct vnode **vplp;
IN int flags;
};
%% print vp - - -