xref: /csrg-svn/sys/kern/vnode_if.src (revision 67637)
154647Smckusick#
263183Sbostic# Copyright (c) 1992, 1993
363183Sbostic#	The Regents of the University of California.  All rights reserved.
454647Smckusick#
554647Smckusick# %sccs.include.redist.sh%
654647Smckusick#
7*67637Smckusick#	@(#)vnode_if.src	8.7 (Berkeley) 08/10/94
854647Smckusick#
967113Spendry
1067113Spendry#
1167113Spendry# Above each of the vop descriptors is a specification of the locking
1267113Spendry# protocol used by each vop call.  The first column is the name of
1367113Spendry# the variable, the remaining three columns are in, out and error
1467113Spendry# respectively.  The "in" column defines the lock state on input,
1567113Spendry# the "out" column defines the state on succesful return, and the
1667113Spendry# "error" column defines the locking state on error exit.
1767113Spendry#
1867113Spendry# The locking value can take the following values:
1967113Spendry# L: locked.
2067113Spendry# U: unlocked/
2167113Spendry# -: not applicable.  vnode does not yet (or no longer) exists.
2267113Spendry# =: the same on input and output, may be either L or U.
2367113Spendry# X: locked if not nil.
2467113Spendry#
2567113Spendry
2667113Spendry#
2767113Spendry#% lookup	dvp	L ? ?
2867113Spendry#% lookup	vpp	- L -
2967113Spendry#
3067113Spendry# XXX - the lookup locking protocol defies simple description and depends
3167113Spendry#       on the flags and operation fields in the (cnp) structure.  Note
3267113Spendry#       especially that *vpp may equal dvp and both may be locked.
3367113Spendry#
3454647Smckusickvop_lookup {
3554647Smckusick	IN struct vnode *dvp;
3655087Spendry	INOUT struct vnode **vpp;
3754647Smckusick	IN struct componentname *cnp;
3854647Smckusick};
3954647Smckusick
4067113Spendry#
4167113Spendry#% create	dvp	L U U
4267113Spendry#% create	vpp	- L -
4367113Spendry#
4454647Smckusickvop_create {
4554991Sheideman	IN WILLRELE struct vnode *dvp;
4654647Smckusick	OUT struct vnode **vpp;
4754647Smckusick	IN struct componentname *cnp;
4854647Smckusick	IN struct vattr *vap;
4954647Smckusick};
5054647Smckusick
5167113Spendry#
5267518Spendry#% whiteout	dvp	L L L
5367518Spendry#% whiteout	cnp	- - -
5467518Spendry#% whiteout	flag	- - -
5567518Spendryvop_whiteout {
5667518Spendry	IN WILLRELE struct vnode *dvp;
5767518Spendry	IN struct componentname *cnp;
5867518Spendry	IN int flags;
5967518Spendry};
6067518Spendry
6167518Spendry#
6267113Spendry#% mknod	dvp	L U U
6367113Spendry#% mknod	vpp	- X -
6467113Spendry#
6554647Smckusickvop_mknod {
6654991Sheideman	IN WILLRELE struct vnode *dvp;
6754991Sheideman	OUT WILLRELE struct vnode **vpp;
6854647Smckusick	IN struct componentname *cnp;
6954647Smckusick	IN struct vattr *vap;
7054647Smckusick};
7154647Smckusick
7267113Spendry#
7367113Spendry#% open 	vp	L L L
7467113Spendry#
7554647Smckusickvop_open {
7654647Smckusick	IN struct vnode *vp;
7754647Smckusick	IN int mode;
7854647Smckusick	IN struct ucred *cred;
7954647Smckusick	IN struct proc *p;
8054647Smckusick};
8154647Smckusick
8267113Spendry#
8367113Spendry#% close	vp	U U U
8467113Spendry#
8554647Smckusickvop_close {
8654647Smckusick	IN struct vnode *vp;
8754647Smckusick	IN int fflag;
8854647Smckusick	IN struct ucred *cred;
8954647Smckusick	IN struct proc *p;
9054647Smckusick};
9154647Smckusick
9267113Spendry#
9367113Spendry#% access	vp	L L L
9467113Spendry#
9554647Smckusickvop_access {
9654647Smckusick	IN struct vnode *vp;
9754647Smckusick	IN int mode;
9854647Smckusick	IN struct ucred *cred;
9954647Smckusick	IN struct proc *p;
10054647Smckusick};
10154647Smckusick
10267113Spendry#
10367113Spendry#% getattr	vp	= = =
10467113Spendry#
10554647Smckusickvop_getattr {
10654647Smckusick	IN struct vnode *vp;
10754647Smckusick	IN struct vattr *vap;
10854647Smckusick	IN struct ucred *cred;
10954647Smckusick	IN struct proc *p;
11054647Smckusick};
11154647Smckusick
11267113Spendry#
11367113Spendry#% setattr	vp	L L L
11467113Spendry#
11554647Smckusickvop_setattr {
11654647Smckusick	IN struct vnode *vp;
11754647Smckusick	IN struct vattr *vap;
11854647Smckusick	IN struct ucred *cred;
11954647Smckusick	IN struct proc *p;
12054647Smckusick};
12154647Smckusick
12267113Spendry#
12367113Spendry#% read 	vp	L L L
12467113Spendry#
12554647Smckusickvop_read {
12654647Smckusick	IN struct vnode *vp;
12754647Smckusick	INOUT struct uio *uio;
12854647Smckusick	IN int ioflag;
12954647Smckusick	IN struct ucred *cred;
13054647Smckusick};
13154647Smckusick
13267113Spendry#
13367113Spendry#% write	vp	L L L
13467113Spendry#
13554647Smckusickvop_write {
13654647Smckusick	IN struct vnode *vp;
13754647Smckusick	INOUT struct uio *uio;
13854647Smckusick	IN int ioflag;
13954647Smckusick	IN struct ucred *cred;
14054647Smckusick};
14154647Smckusick
14267113Spendry#
143*67637Smckusick#% lease	vp	= = =
144*67637Smckusick#
145*67637Smckusickvop_lease {
146*67637Smckusick	IN struct vnode *vp;
147*67637Smckusick	IN struct proc *p;
148*67637Smckusick	IN struct ucred *cred;
149*67637Smckusick	IN int flag;
150*67637Smckusick};
151*67637Smckusick
152*67637Smckusick#
15367113Spendry#% ioctl	vp	U U U
15467113Spendry#
15554647Smckusickvop_ioctl {
15654647Smckusick	IN struct vnode *vp;
15754647Smckusick	IN int command;
15854647Smckusick	IN caddr_t data;
15954647Smckusick	IN int fflag;
16054647Smckusick	IN struct ucred *cred;
16154647Smckusick	IN struct proc *p;
16254647Smckusick};
16354647Smckusick
16467113Spendry#
16567113Spendry#% select	vp	U U U
16667113Spendry#
16754647Smckusick# Needs work?  (fflags)
16854647Smckusickvop_select {
16954647Smckusick	IN struct vnode *vp;
17054647Smckusick	IN int which;
17154647Smckusick	IN int fflags;
17254647Smckusick	IN struct ucred *cred;
17354647Smckusick	IN struct proc *p;
17454647Smckusick};
17554647Smckusick
17667113Spendry# XXX - not used
17754647Smckusickvop_mmap {
17854647Smckusick	IN struct vnode *vp;
17954647Smckusick	IN int fflags;
18054647Smckusick	IN struct ucred *cred;
18154647Smckusick	IN struct proc *p;
18254647Smckusick};
18354647Smckusick
18467113Spendry#
18567113Spendry#% fsync	vp	L L L
18667113Spendry#
18754647Smckusickvop_fsync {
18854647Smckusick	IN struct vnode *vp;
18954647Smckusick	IN struct ucred *cred;
19054647Smckusick	IN int waitfor;
19154647Smckusick	IN struct proc *p;
19254647Smckusick};
19354647Smckusick
19467113Spendry# XXX - not used
19554647Smckusick# Needs word: Is newoff right?  What's it mean?
19654647Smckusickvop_seek {
19754647Smckusick	IN struct vnode *vp;
19854647Smckusick	IN off_t oldoff;
19954647Smckusick	IN off_t newoff;
20054647Smckusick	IN struct ucred *cred;
20154647Smckusick};
20254647Smckusick
20367113Spendry#
20467113Spendry#% remove	dvp	L U U
20567113Spendry#% remove	vp	L U U
20667113Spendry#
20754647Smckusickvop_remove {
20854991Sheideman	IN WILLRELE struct vnode *dvp;
20954991Sheideman	IN WILLRELE struct vnode *vp;
21054647Smckusick	IN struct componentname *cnp;
21154647Smckusick};
21254647Smckusick
21367113Spendry#
21467113Spendry#% link 	vp	L U U
21567113Spendry#% link 	tdvp	U U U
21667113Spendry#
21754647Smckusickvop_link {
21854991Sheideman	IN WILLRELE struct vnode *vp;
21954647Smckusick	IN struct vnode *tdvp;
22054647Smckusick	IN struct componentname *cnp;
22154647Smckusick};
22254647Smckusick
22367113Spendry#
22467113Spendry#% rename	fdvp	U U U
22567113Spendry#% rename	fvp	U U U
22667113Spendry#% rename	tdvp	L U U
22767113Spendry#% rename	tvp	X U U
22867113Spendry#
22954647Smckusickvop_rename {
23054991Sheideman	IN WILLRELE struct vnode *fdvp;
23154991Sheideman	IN WILLRELE struct vnode *fvp;
23254647Smckusick	IN struct componentname *fcnp;
23354991Sheideman	IN WILLRELE struct vnode *tdvp;
23454991Sheideman	IN WILLRELE struct vnode *tvp;
23554647Smckusick	IN struct componentname *tcnp;
23654647Smckusick};
23754647Smckusick
23867113Spendry#
23967113Spendry#% mkdir	dvp	L U U
24067113Spendry#% mkdir	vpp	- L -
24167113Spendry#
24254647Smckusickvop_mkdir {
24354991Sheideman	IN WILLRELE struct vnode *dvp;
24454647Smckusick	OUT struct vnode **vpp;
24554647Smckusick	IN struct componentname *cnp;
24654647Smckusick	IN struct vattr *vap;
24754647Smckusick};
24854647Smckusick
24967113Spendry#
25067113Spendry#% rmdir	dvp	L U U
25167113Spendry#% rmdir	vp	L U U
25267113Spendry#
25354647Smckusickvop_rmdir {
25454991Sheideman	IN WILLRELE struct vnode *dvp;
25554991Sheideman	IN WILLRELE struct vnode *vp;
25654647Smckusick	IN struct componentname *cnp;
25754647Smckusick};
25854647Smckusick
25967113Spendry#
26067113Spendry#% symlink	dvp	L U U
26167113Spendry#% symlink	vpp	- U -
26267113Spendry# XXX - note that the return vnode has already been VRELE'ed
26367113Spendry#       by the filesystem layer.  To use it you must use vget,
26467113Spendry#       possibly with a further namei.
26567113Spendry#
26654647Smckusickvop_symlink {
26754991Sheideman	IN WILLRELE struct vnode *dvp;
26854991Sheideman	OUT WILLRELE struct vnode **vpp;
26954647Smckusick	IN struct componentname *cnp;
27054647Smckusick	IN struct vattr *vap;
27154647Smckusick	IN char *target;
27254647Smckusick};
27354647Smckusick
27467113Spendry#
27567113Spendry#% readdir	vp	L L L
27667113Spendry#
27754647Smckusickvop_readdir {
27854647Smckusick	IN struct vnode *vp;
27954647Smckusick	INOUT struct uio *uio;
28054647Smckusick	IN struct ucred *cred;
28167361Smckusick	INOUT int *eofflag;
28267361Smckusick	OUT u_long *cookies;
28367361Smckusick	IN int ncookies;
28454647Smckusick};
28554647Smckusick
28667113Spendry#
28767113Spendry#% readlink	vp	L L L
28867113Spendry#
28954647Smckusickvop_readlink {
29054647Smckusick	IN struct vnode *vp;
29154647Smckusick	INOUT struct uio *uio;
29254647Smckusick	IN struct ucred *cred;
29354647Smckusick};
29454647Smckusick
29567113Spendry#
29667113Spendry#% abortop	dvp	= = =
29767113Spendry#
29854647Smckusickvop_abortop {
29954647Smckusick	IN struct vnode *dvp;
30054647Smckusick	IN struct componentname *cnp;
30154647Smckusick};
30254647Smckusick
30367113Spendry#
30467113Spendry#% inactive	vp	U U U
30567113Spendry#
30654647Smckusickvop_inactive {
30754647Smckusick	IN struct vnode *vp;
30854647Smckusick};
30954647Smckusick
31067113Spendry#
31167113Spendry#% reclaim	vp	U U U
31267113Spendry#
31354647Smckusickvop_reclaim {
31454647Smckusick	IN struct vnode *vp;
31554647Smckusick};
31654647Smckusick
31767113Spendry#
31867113Spendry#% lock 	vp	U L U
31967113Spendry#
32054647Smckusickvop_lock {
32154647Smckusick	IN struct vnode *vp;
32254647Smckusick};
32354647Smckusick
32467113Spendry#
32567113Spendry#% unlock	vp	L U L
32667113Spendry#
32754647Smckusickvop_unlock {
32854647Smckusick	IN struct vnode *vp;
32954647Smckusick};
33054647Smckusick
33167113Spendry#
33267113Spendry#% bmap 	vp	L L L
33367113Spendry#% bmap 	vpp	- U -
33467113Spendry#
33554647Smckusickvop_bmap {
33654647Smckusick	IN struct vnode *vp;
33754647Smckusick	IN daddr_t bn;
33854647Smckusick	OUT struct vnode **vpp;
33954647Smckusick	IN daddr_t *bnp;
34056441Smargo	OUT int *runp;
34154647Smckusick};
34254647Smckusick
34354647Smckusick#vop_strategy {
34454647Smckusick#	IN struct buf *bp;
34554647Smckusick#};
34654647Smckusick
34767113Spendry#
34867113Spendry#% print	vp	= = =
34967113Spendry#
35054647Smckusickvop_print {
35154647Smckusick	IN struct vnode *vp;
35254647Smckusick};
35354647Smckusick
35467113Spendry#
35567113Spendry#% islocked	vp	= = =
35667113Spendry#
35754647Smckusickvop_islocked {
35854647Smckusick	IN struct vnode *vp;
35954647Smckusick};
36054647Smckusick
36167113Spendry#
36267113Spendry#% pathconf	vp	L L L
36367113Spendry#
36460383Smckusickvop_pathconf {
36560383Smckusick	IN struct vnode *vp;
36660383Smckusick	IN int name;
36760383Smckusick	OUT int *retval;
36860383Smckusick};
36960383Smckusick
37067113Spendry#
37167113Spendry#% advlock	vp	U U U
37267113Spendry#
37354647Smckusickvop_advlock {
37454647Smckusick	IN struct vnode *vp;
37554647Smckusick	IN caddr_t id;
37654647Smckusick	IN int op;
37754647Smckusick	IN struct flock *fl;
37854647Smckusick	IN int flags;
37954647Smckusick};
38054647Smckusick
38167113Spendry#
38267113Spendry#% blkatoff	vp	L L L
38367113Spendry#
38454647Smckusickvop_blkatoff {
38554647Smckusick	IN struct vnode *vp;
38654647Smckusick	IN off_t offset;
38754647Smckusick	OUT char **res;
38854647Smckusick	OUT struct buf **bpp;
38954647Smckusick};
39054647Smckusick
39167113Spendry#
39267113Spendry#% valloc	pvp	L L L
39367113Spendry#
39454647Smckusickvop_valloc {
39554647Smckusick	IN struct vnode *pvp;
39654647Smckusick	IN int mode;
39754647Smckusick	IN struct ucred *cred;
39854647Smckusick	OUT struct vnode **vpp;
39954647Smckusick};
40054647Smckusick
40167113Spendry#
40267113Spendry#% reallocblks	vp	L L L
40367113Spendry#
40465976Smckusickvop_reallocblks {
40565976Smckusick	IN struct vnode *vp;
40665976Smckusick	IN struct cluster_save *buflist;
40765976Smckusick};
40865976Smckusick
40967113Spendry#
41067113Spendry#% vfree	pvp	L L L
41167113Spendry#
41254647Smckusickvop_vfree {
41354647Smckusick	IN struct vnode *pvp;
41454647Smckusick	IN ino_t ino;
41554647Smckusick	IN int mode;
41654647Smckusick};
41754647Smckusick
41867113Spendry#
41967113Spendry#% truncate	vp	L L L
42067113Spendry#
42154647Smckusickvop_truncate {
42254647Smckusick	IN struct vnode *vp;
42354647Smckusick	IN off_t length;
42454647Smckusick	IN int flags;
42554647Smckusick	IN struct ucred *cred;
42654647Smckusick	IN struct proc *p;
42754647Smckusick};
42854647Smckusick
42967113Spendry#
43067113Spendry#% update	vp	L L L
43167113Spendry#
43254647Smckusickvop_update {
43354647Smckusick	IN struct vnode *vp;
43464415Sbostic	IN struct timeval *access;
43564415Sbostic	IN struct timeval *modify;
43654647Smckusick	IN int waitfor;
43754647Smckusick};
43854647Smckusick
43954647Smckusick# Needs work: no vp?
44054647Smckusick#vop_bwrite {
44154647Smckusick#	IN struct buf *bp;
44254647Smckusick#};
443