vnode_if.src revision 116698
11541Srgrimes#
21541Srgrimes# Copyright (c) 1992, 1993
31541Srgrimes#	The Regents of the University of California.  All rights reserved.
41541Srgrimes#
51541Srgrimes# Redistribution and use in source and binary forms, with or without
61541Srgrimes# modification, are permitted provided that the following conditions
71541Srgrimes# are met:
81541Srgrimes# 1. Redistributions of source code must retain the above copyright
91541Srgrimes#    notice, this list of conditions and the following disclaimer.
101541Srgrimes# 2. Redistributions in binary form must reproduce the above copyright
111541Srgrimes#    notice, this list of conditions and the following disclaimer in the
121541Srgrimes#    documentation and/or other materials provided with the distribution.
131541Srgrimes# 3. All advertising materials mentioning features or use of this software
141541Srgrimes#    must display the following acknowledgement:
151541Srgrimes#	This product includes software developed by the University of
161541Srgrimes#	California, Berkeley and its contributors.
171541Srgrimes# 4. Neither the name of the University nor the names of its contributors
181541Srgrimes#    may be used to endorse or promote products derived from this software
191541Srgrimes#    without specific prior written permission.
201541Srgrimes#
211541Srgrimes# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
221541Srgrimes# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
231541Srgrimes# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
241541Srgrimes# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
251541Srgrimes# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
261541Srgrimes# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
271541Srgrimes# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
281541Srgrimes# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
291541Srgrimes# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
301541Srgrimes# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
311541Srgrimes# SUCH DAMAGE.
321541Srgrimes#
3322521Sdyson#	@(#)vnode_if.src	8.12 (Berkeley) 5/14/95
3450477Speter# $FreeBSD: head/sys/kern/vnode_if.src 116698 2003-06-22 22:45:24Z rwatson $
351541Srgrimes#
3622521Sdyson
3722521Sdyson#
3822521Sdyson# Above each of the vop descriptors is a specification of the locking
3922521Sdyson# protocol used by each vop call.  The first column is the name of
4022521Sdyson# the variable, the remaining three columns are in, out and error
4122521Sdyson# respectively.  The "in" column defines the lock state on input,
4222521Sdyson# the "out" column defines the state on succesful return, and the
4322521Sdyson# "error" column defines the locking state on error exit.
4422521Sdyson#
4522521Sdyson# The locking value can take the following values:
4654444Seivind# L: locked; not converted to type of lock.
4754444Seivind# A: any lock type.
4854444Seivind# S: locked with shared lock.
4954444Seivind# E: locked with exclusive lock for this process.
5054444Seivind# O: locked with exclusive lock for other process.
5145058Seivind# U: unlocked.
5222521Sdyson# -: not applicable.  vnode does not yet (or no longer) exists.
5322521Sdyson# =: the same on input and output, may be either L or U.
5422521Sdyson# X: locked if not nil.
5522521Sdyson#
56116615Sse# The paramater named "vpp" is assumed to be always used with double
57116615Sse# indirection (**vpp) and that name is hard-codeed in vnode_if.awk !
58116615Sse#
59116615Sse# If other such parameters are introduced, they have to be added to
60116615Sse# the AWK script at the head of the definition of "add_debug_code()".
61116615Sse#
6222521Sdyson
6322521Sdyson#
64103980Sjeff# islocked	vp	= = =
6551679Seivind#
6651679Seivindvop_islocked {
6751679Seivind	IN struct vnode *vp;
6883366Sjulian	IN struct thread *td;
6951679Seivind};
7051679Seivind
7151679Seivind#
7299691Sjeff# lookup	dvp	L ? ?
7399691Sjeff# lookup	vpp	- L -
7499691Sjeff#! lookup	pre	vop_lookup_pre
7599691Sjeff#! lookup	post	vop_lookup_post
7622521Sdyson#
7722521Sdyson# XXX - the lookup locking protocol defies simple description and depends
7822521Sdyson#	on the flags and operation fields in the (cnp) structure.  Note
7922521Sdyson#	especially that *vpp may equal dvp and both may be locked.
8022521Sdyson#
811541Srgrimesvop_lookup {
821541Srgrimes	IN struct vnode *dvp;
831541Srgrimes	INOUT struct vnode **vpp;
841541Srgrimes	IN struct componentname *cnp;
851541Srgrimes};
861541Srgrimes
8722521Sdyson#
8828732Sphk#% cachedlookup	dvp	L ? ?
8928732Sphk#% cachedlookup	vpp	- L -
9028732Sphk#
9128732Sphk# This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
9228732Sphk#
9328732Sphkvop_cachedlookup {
9428732Sphk	IN struct vnode *dvp;
9528732Sphk	INOUT struct vnode **vpp;
9628732Sphk	IN struct componentname *cnp;
9728732Sphk};
9828732Sphk
9928732Sphk#
10035823Smsmith#% create	dvp	L L L
10122521Sdyson#% create	vpp	- L -
10222521Sdyson#
1031541Srgrimesvop_create {
10435823Smsmith	IN struct vnode *dvp;
1051541Srgrimes	OUT struct vnode **vpp;
1061541Srgrimes	IN struct componentname *cnp;
1071541Srgrimes	IN struct vattr *vap;
1081541Srgrimes};
1091541Srgrimes
11022521Sdyson#
11122521Sdyson#% whiteout	dvp	L L L
11222521Sdyson#
11322521Sdysonvop_whiteout {
11435823Smsmith	IN struct vnode *dvp;
11522521Sdyson	IN struct componentname *cnp;
11622521Sdyson	IN int flags;
11722521Sdyson};
11822521Sdyson
11922521Sdyson#
12035823Smsmith#% mknod	dvp	L L L
12180295Sassar#% mknod	vpp	- L -
12222521Sdyson#
1231541Srgrimesvop_mknod {
12435823Smsmith	IN struct vnode *dvp;
12553101Seivind	OUT struct vnode **vpp;
1261541Srgrimes	IN struct componentname *cnp;
1271541Srgrimes	IN struct vattr *vap;
1281541Srgrimes};
1291541Srgrimes
13022521Sdyson#
13122521Sdyson#% open		vp	L L L
13222521Sdyson#
1331541Srgrimesvop_open {
1341541Srgrimes	IN struct vnode *vp;
1351541Srgrimes	IN int mode;
1361541Srgrimes	IN struct ucred *cred;
13783366Sjulian	IN struct thread *td;
1381541Srgrimes};
1391541Srgrimes
14022521Sdyson#
14122521Sdyson#% close	vp	U U U
14222521Sdyson#
1431541Srgrimesvop_close {
1441541Srgrimes	IN struct vnode *vp;
1451541Srgrimes	IN int fflag;
1461541Srgrimes	IN struct ucred *cred;
14783366Sjulian	IN struct thread *td;
1481541Srgrimes};
1491541Srgrimes
15022521Sdyson#
15122521Sdyson#% access	vp	L L L
15222521Sdyson#
1531541Srgrimesvop_access {
1541541Srgrimes	IN struct vnode *vp;
1551541Srgrimes	IN int mode;
1561541Srgrimes	IN struct ucred *cred;
15783366Sjulian	IN struct thread *td;
1581541Srgrimes};
1591541Srgrimes
16022521Sdyson#
16199554Sjeff#% getattr	vp	L L L
16222521Sdyson#
1631541Srgrimesvop_getattr {
1641541Srgrimes	IN struct vnode *vp;
16554803Srwatson	OUT struct vattr *vap;
1661541Srgrimes	IN struct ucred *cred;
16783366Sjulian	IN struct thread *td;
1681541Srgrimes};
1691541Srgrimes
17022521Sdyson#
17122521Sdyson#% setattr	vp	L L L
17222521Sdyson#
1731541Srgrimesvop_setattr {
1741541Srgrimes	IN struct vnode *vp;
1751541Srgrimes	IN struct vattr *vap;
1761541Srgrimes	IN struct ucred *cred;
17783366Sjulian	IN struct thread *td;
1781541Srgrimes};
1791541Srgrimes
18022521Sdyson#
18122521Sdyson#% read		vp	L L L
18222521Sdyson#
1831541Srgrimesvop_read {
1841541Srgrimes	IN struct vnode *vp;
1851541Srgrimes	INOUT struct uio *uio;
1861541Srgrimes	IN int ioflag;
1871541Srgrimes	IN struct ucred *cred;
1881541Srgrimes};
1891541Srgrimes
19022521Sdyson#
19122521Sdyson#% write	vp	L L L
19222521Sdyson#
1931541Srgrimesvop_write {
1941541Srgrimes	IN struct vnode *vp;
1951541Srgrimes	INOUT struct uio *uio;
1961541Srgrimes	IN int ioflag;
1971541Srgrimes	IN struct ucred *cred;
1981541Srgrimes};
1991541Srgrimes
20022521Sdyson#
20122521Sdyson#% lease	vp	= = =
20222521Sdyson#
20322521Sdysonvop_lease {
20422521Sdyson	IN struct vnode *vp;
20583366Sjulian	IN struct thread *td;
20622521Sdyson	IN struct ucred *cred;
20722521Sdyson	IN int flag;
20822521Sdyson};
20922521Sdyson
21022521Sdyson#
21122521Sdyson#% ioctl	vp	U U U
21222521Sdyson#
2131541Srgrimesvop_ioctl {
2141541Srgrimes	IN struct vnode *vp;
21522521Sdyson	IN u_long command;
2161541Srgrimes	IN caddr_t data;
2171541Srgrimes	IN int fflag;
2181541Srgrimes	IN struct ucred *cred;
21983366Sjulian	IN struct thread *td;
2201541Srgrimes};
2211541Srgrimes
22222521Sdyson#
22329353Speter#% poll	vp	U U U
22422521Sdyson#
22529353Spetervop_poll {
2261541Srgrimes	IN struct vnode *vp;
22729353Speter	IN int events;
2281541Srgrimes	IN struct ucred *cred;
22983366Sjulian	IN struct thread *td;
2301541Srgrimes};
2311541Srgrimes
23222521Sdyson#
23372521Sjlemon#% kqfilter	vp	U U U
23472521Sjlemon#
23572521Sjlemonvop_kqfilter {
23672521Sjlemon	IN struct vnode *vp;
23772521Sjlemon	IN struct knote *kn;
23872521Sjlemon};
23972521Sjlemon
24072521Sjlemon#
24122521Sdyson#% revoke	vp	U U U
24222521Sdyson#
24322521Sdysonvop_revoke {
24422521Sdyson	IN struct vnode *vp;
24522521Sdyson	IN int flags;
24622521Sdyson};
24722521Sdyson
24822521Sdyson#
24922521Sdyson#% fsync	vp	L L L
25022521Sdyson#
2511541Srgrimesvop_fsync {
2521541Srgrimes	IN struct vnode *vp;
2531541Srgrimes	IN struct ucred *cred;
2541541Srgrimes	IN int waitfor;
25583366Sjulian	IN struct thread *td;
2561541Srgrimes};
2571541Srgrimes
25822521Sdyson#
25935823Smsmith#% remove	dvp	L L L
26035823Smsmith#% remove	vp	L L L
26122521Sdyson#
2621541Srgrimesvop_remove {
26335823Smsmith	IN struct vnode *dvp;
26435823Smsmith	IN struct vnode *vp;
2651541Srgrimes	IN struct componentname *cnp;
2661541Srgrimes};
2671541Srgrimes
26822521Sdyson#
26935823Smsmith#% link		tdvp	L L L
270103636Struckman#% link		vp	L L L
27122521Sdyson#
2729842Sdgvop_link {
27335823Smsmith	IN struct vnode *tdvp;
2749842Sdg	IN struct vnode *vp;
2759842Sdg	IN struct componentname *cnp;
2769842Sdg};
2771541Srgrimes
27822521Sdyson#
27999484Sjeff# rename	fdvp	U U U
28099484Sjeff# rename	fvp	U U U
28199484Sjeff# rename	tdvp	L U U
28299484Sjeff# rename	tvp	X U U
28399484Sjeff#! rename	pre	vop_rename_pre
28422521Sdyson#
2851541Srgrimesvop_rename {
2861541Srgrimes	IN WILLRELE struct vnode *fdvp;
2871541Srgrimes	IN WILLRELE struct vnode *fvp;
2881541Srgrimes	IN struct componentname *fcnp;
2891541Srgrimes	IN WILLRELE struct vnode *tdvp;
2901541Srgrimes	IN WILLRELE struct vnode *tvp;
2911541Srgrimes	IN struct componentname *tcnp;
2921541Srgrimes};
2931541Srgrimes
29422521Sdyson#
29535823Smsmith#% mkdir	dvp	L L L
29622521Sdyson#% mkdir	vpp	- L -
29722521Sdyson#
2981541Srgrimesvop_mkdir {
29935823Smsmith	IN struct vnode *dvp;
3001541Srgrimes	OUT struct vnode **vpp;
3011541Srgrimes	IN struct componentname *cnp;
3021541Srgrimes	IN struct vattr *vap;
3031541Srgrimes};
3041541Srgrimes
30522521Sdyson#
30635823Smsmith#% rmdir	dvp	L L L
30735823Smsmith#% rmdir	vp	L L L
30822521Sdyson#
3091541Srgrimesvop_rmdir {
31035823Smsmith	IN struct vnode *dvp;
31135823Smsmith	IN struct vnode *vp;
3121541Srgrimes	IN struct componentname *cnp;
3131541Srgrimes};
3141541Srgrimes
31522521Sdyson#
31635823Smsmith#% symlink	dvp	L L L
31780295Sassar#% symlink	vpp	- L -
31822521Sdyson#
3191541Srgrimesvop_symlink {
32035823Smsmith	IN struct vnode *dvp;
32153131Seivind	OUT struct vnode **vpp;
3221541Srgrimes	IN struct componentname *cnp;
3231541Srgrimes	IN struct vattr *vap;
3241541Srgrimes	IN char *target;
3251541Srgrimes};
3261541Srgrimes
32722521Sdyson#
32822521Sdyson#% readdir	vp	L L L
32922521Sdyson#
3301541Srgrimesvop_readdir {
3311541Srgrimes	IN struct vnode *vp;
3321541Srgrimes	INOUT struct uio *uio;
3331541Srgrimes	IN struct ucred *cred;
3343167Sdfr	INOUT int *eofflag;
33522521Sdyson	OUT int *ncookies;
33622521Sdyson	INOUT u_long **cookies;
3371541Srgrimes};
3381541Srgrimes
33922521Sdyson#
34022521Sdyson#% readlink	vp	L L L
34122521Sdyson#
3421541Srgrimesvop_readlink {
3431541Srgrimes	IN struct vnode *vp;
3441541Srgrimes	INOUT struct uio *uio;
3451541Srgrimes	IN struct ucred *cred;
3461541Srgrimes};
3471541Srgrimes
34822521Sdyson#
34922521Sdyson#% inactive	vp	L U U
35022521Sdyson#
3511541Srgrimesvop_inactive {
3521541Srgrimes	IN struct vnode *vp;
35383366Sjulian	IN struct thread *td;
3541541Srgrimes};
3551541Srgrimes
35622521Sdyson#
35722521Sdyson#% reclaim	vp	U U U
35822521Sdyson#
3591541Srgrimesvop_reclaim {
3601541Srgrimes	IN struct vnode *vp;
36183366Sjulian	IN struct thread *td;
3621541Srgrimes};
3631541Srgrimes
36422521Sdyson#
365102210Sjeff#lock		vp	? ? ?
366102210Sjeff#! lock		pre	vop_lock_pre
367102210Sjeff#! lock		post	vop_lock_post
36822521Sdyson#
3691541Srgrimesvop_lock {
3701541Srgrimes	IN struct vnode *vp;
37122521Sdyson	IN int flags;
37283366Sjulian	IN struct thread *td;
3731541Srgrimes};
3741541Srgrimes
37522521Sdyson#
376102210Sjeff#unlock		vp	L ? L
377102210Sjeff#! unlock	pre	vop_unlock_pre
378102210Sjeff#! unlock	post	vop_unlock_post
37922521Sdyson#
3801541Srgrimesvop_unlock {
3811541Srgrimes	IN struct vnode *vp;
38222521Sdyson	IN int flags;
38383366Sjulian	IN struct thread *td;
3841541Srgrimes};
3851541Srgrimes
38622521Sdyson#
38722521Sdyson#% bmap		vp	L L L
38822521Sdyson#% bmap		vpp	- U -
38922521Sdyson#
3901541Srgrimesvop_bmap {
3911541Srgrimes	IN struct vnode *vp;
39296572Sphk	IN daddr_t bn;
3931541Srgrimes	OUT struct vnode **vpp;
39496572Sphk	IN daddr_t *bnp;
3951541Srgrimes	OUT int *runp;
39610551Sdyson	OUT int *runb;
3971541Srgrimes};
3981541Srgrimes
39922521Sdyson#
40099486Sjeff# strategy	vp	L L L
40199486Sjeff#! strategy	pre	vop_strategy_pre
40222521Sdyson#
40337384Sjulianvop_strategy {
40437384Sjulian	IN struct vnode *vp;
40537384Sjulian	IN struct buf *bp;
40637384Sjulian};
4071541Srgrimes
40822521Sdyson#
409108686Sphk# specstrategy	vp	L L L
410108686Sphk#! specstrategy	pre	vop_strategy_pre
411108686Sphk#
412108686Sphkvop_specstrategy {
413108686Sphk	IN struct vnode *vp;
414108686Sphk	IN struct buf *bp;
415108686Sphk};
416108686Sphk
417108686Sphk#
41862976Smckusick#% getwritemount vp	= = =
41962976Smckusick#
42062976Smckusickvop_getwritemount {
42162976Smckusick	IN struct vnode *vp;
42262976Smckusick	OUT struct mount **mpp;
42362976Smckusick};
42462976Smckusick
42562976Smckusick#
42622521Sdyson#% print	vp	= = =
42722521Sdyson#
4281541Srgrimesvop_print {
4291541Srgrimes	IN struct vnode *vp;
4301541Srgrimes};
4311541Srgrimes
43222521Sdyson#
43322521Sdyson#% pathconf	vp	L L L
43422521Sdyson#
4351541Srgrimesvop_pathconf {
4361541Srgrimes	IN struct vnode *vp;
4371541Srgrimes	IN int name;
43822521Sdyson	OUT register_t *retval;
4391541Srgrimes};
4401541Srgrimes
44122521Sdyson#
44222521Sdyson#% advlock	vp	U U U
44322521Sdyson#
4441541Srgrimesvop_advlock {
4451541Srgrimes	IN struct vnode *vp;
4461541Srgrimes	IN caddr_t id;
4471541Srgrimes	IN int op;
4481541Srgrimes	IN struct flock *fl;
4491541Srgrimes	IN int flags;
4501541Srgrimes};
4511541Srgrimes
45222521Sdyson#
45322521Sdyson#% reallocblks	vp	L L L
45422521Sdyson#
4551541Srgrimesvop_reallocblks {
4561541Srgrimes	IN struct vnode *vp;
4571541Srgrimes	IN struct cluster_save *buflist;
4581541Srgrimes};
4591541Srgrimes
46045058Seivind#
46145058Seivind#% getpages	vp	L L L
46245058Seivind#
46310551Sdysonvop_getpages {
46410551Sdyson	IN struct vnode *vp;
46510551Sdyson	IN vm_page_t *m;
46610551Sdyson	IN int count;
46710551Sdyson	IN int reqpage;
46812767Sdyson	IN vm_ooffset_t offset;
46910551Sdyson};
47010551Sdyson
47145058Seivind#
47245058Seivind#% putpages	vp	L L L
47345058Seivind#
47410551Sdysonvop_putpages {
47510551Sdyson	IN struct vnode *vp;
47610551Sdyson	IN vm_page_t *m;
47710551Sdyson	IN int count;
47810551Sdyson	IN int sync;
47910551Sdyson	IN int *rtvals;
48012767Sdyson	IN vm_ooffset_t offset;
48110551Sdyson};
48211704Sdyson
48322521Sdyson#
48438862Sphk#% freeblks	vp	- - -
48538862Sphk#
48638862Sphk# This call is used by the filesystem to release blocks back to 
48738862Sphk# device-driver.  This is useful if the driver has a lengthy 
48838862Sphk# erase handling or similar.
48938862Sphk#
49038862Sphk
49138862Sphkvop_freeblks {
49238862Sphk	IN struct vnode *vp;
49338862Sphk	IN daddr_t addr;
49438862Sphk	IN daddr_t length;
49538862Sphk};
49638862Sphk
49738862Sphk#
49866184Srwatson#% getacl	vp	L L L
49954803Srwatson#
50054803Srwatsonvop_getacl {
50154803Srwatson	IN struct vnode *vp;
50254803Srwatson	IN acl_type_t type;
50354803Srwatson	OUT struct acl *aclp;
50454803Srwatson	IN struct ucred *cred;
50583366Sjulian	IN struct thread *td;
50654803Srwatson};
50754803Srwatson
50854803Srwatson#
50954803Srwatson#% setacl	vp	L L L
51054803Srwatson#
51154803Srwatsonvop_setacl {
51254803Srwatson	IN struct vnode *vp;
51354803Srwatson	IN acl_type_t type;
51454803Srwatson	IN struct acl *aclp;
51554803Srwatson	IN struct ucred *cred;
51683366Sjulian	IN struct thread *td;
51754803Srwatson};
51854803Srwatson
51954803Srwatson#
52054803Srwatson#% aclcheck	vp	= = =
52154803Srwatson#
52254803Srwatsonvop_aclcheck {
52354803Srwatson	IN struct vnode *vp;
52454803Srwatson	IN acl_type_t type;
52554803Srwatson	IN struct acl *aclp;
52654803Srwatson	IN struct ucred *cred;
52783366Sjulian	IN struct thread *td;
52854803Srwatson};
52954803Srwatson
53054803Srwatson#
531102990Sphk#% closeextattr	vp	L L L
532102990Sphk#
533102990Sphkvop_closeextattr {
534102990Sphk	IN struct vnode *vp;
535102990Sphk	IN int commit;
536102990Sphk	IN struct ucred *cred;
537102990Sphk	IN struct thread *td;
538102990Sphk};
539102990Sphk
540102990Sphk#
54163893Srwatson#% getextattr	vp	L L L
54254803Srwatson#
54354803Srwatsonvop_getextattr {
54454803Srwatson	IN struct vnode *vp;
54574437Srwatson	IN int attrnamespace;
54665119Srwatson	IN const char *name;
54754803Srwatson	INOUT struct uio *uio;
54890448Srwatson	OUT size_t *size;
54954803Srwatson	IN struct ucred *cred;
55083366Sjulian	IN struct thread *td;
55154803Srwatson};
55254803Srwatson
55354803Srwatson#
554115867Srwatson#% listextattr	vp	L L L
555115867Srwatson#
556115867Srwatsonvop_listextattr {
557115867Srwatson	IN struct vnode *vp;
558115867Srwatson	IN int attrnamespace;
559115867Srwatson	INOUT struct uio *uio;
560115867Srwatson	OUT size_t *size;
561115867Srwatson	IN struct ucred *cred;
562115867Srwatson	IN struct thread *td;
563115867Srwatson};
564115867Srwatson
565115867Srwatson#
566102990Sphk#% openextattr	vp	L L L
567102990Sphk#
568102990Sphkvop_openextattr {
569102990Sphk	IN struct vnode *vp;
570102990Sphk	IN struct ucred *cred;
571102990Sphk	IN struct thread *td;
572102990Sphk};
573102990Sphk
574102990Sphk#
575116698Srwatson#% rmextattr	vp	L L L
576116698Srwatson#
577116698Srwatsonvop_rmextattr {
578116698Srwatson	IN struct vnode *vp;
579116698Srwatson	IN int attrnamespace;
580116698Srwatson	IN const char *name;
581116698Srwatson	IN struct ucred *cred;
582116698Srwatson	IN struct thread *td;
583116698Srwatson};
584116698Srwatson
585116698Srwatson#
58654803Srwatson#% setextattr	vp	L L L
58754803Srwatson#
58854803Srwatsonvop_setextattr {
58954803Srwatson	IN struct vnode *vp;
59074437Srwatson	IN int attrnamespace;
59165119Srwatson	IN const char *name;
59254803Srwatson	INOUT struct uio *uio;
59354803Srwatson	IN struct ucred *cred;
59483366Sjulian	IN struct thread *td;
59554803Srwatson};
59665770Sbp
59765770Sbp#
59865770Sbp#% createvobject	vp	L L L
59965770Sbp#
60065770Sbpvop_createvobject {
60165770Sbp	IN struct vnode *vp;
60265770Sbp	IN struct ucred *cred;
60383366Sjulian	IN struct thread *td;
60465770Sbp};
60565770Sbp
60665770Sbp#
60765770Sbp#% destroyvobject	vp	L L L
60865770Sbp#
60965770Sbpvop_destroyvobject {
61065770Sbp	IN struct vnode *vp;
61165770Sbp};
61265770Sbp
61365770Sbp#
61465770Sbp#% getvobject	vp	L L L
61565770Sbp#
61665770Sbpvop_getvobject {
61765770Sbp	IN struct vnode *vp;
61865770Sbp	OUT struct vm_object **objpp;
61965770Sbp};
620100984Srwatson
621100984Srwatson#
622100984Srwatson#% setlabel	vp	L L L
623100984Srwatson#
624100984Srwatsonvop_setlabel {
625100984Srwatson	IN struct vnode *vp;
626100984Srwatson	IN struct label *label;
627100984Srwatson	IN struct ucred *cred;
628100984Srwatson	IN struct thread *td;
629100984Srwatson};
630