xref: /csrg-svn/sys/kern/vnode_if.src (revision 67113)
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*67113Spendry#	@(#)vnode_if.src	8.4 (Berkeley) 05/09/94
854647Smckusick#
9*67113Spendry
10*67113Spendry#
11*67113Spendry# Above each of the vop descriptors is a specification of the locking
12*67113Spendry# protocol used by each vop call.  The first column is the name of
13*67113Spendry# the variable, the remaining three columns are in, out and error
14*67113Spendry# respectively.  The "in" column defines the lock state on input,
15*67113Spendry# the "out" column defines the state on succesful return, and the
16*67113Spendry# "error" column defines the locking state on error exit.
17*67113Spendry#
18*67113Spendry# The locking value can take the following values:
19*67113Spendry# L: locked.
20*67113Spendry# U: unlocked/
21*67113Spendry# -: not applicable.  vnode does not yet (or no longer) exists.
22*67113Spendry# =: the same on input and output, may be either L or U.
23*67113Spendry# X: locked if not nil.
24*67113Spendry#
25*67113Spendry
26*67113Spendry#
27*67113Spendry#% lookup	dvp	L ? ?
28*67113Spendry#% lookup	vpp	- L -
29*67113Spendry#
30*67113Spendry# XXX - the lookup locking protocol defies simple description and depends
31*67113Spendry#       on the flags and operation fields in the (cnp) structure.  Note
32*67113Spendry#       especially that *vpp may equal dvp and both may be locked.
33*67113Spendry#
3454647Smckusickvop_lookup {
3554647Smckusick	IN struct vnode *dvp;
3655087Spendry	INOUT struct vnode **vpp;
3754647Smckusick	IN struct componentname *cnp;
3854647Smckusick};
3954647Smckusick
40*67113Spendry#
41*67113Spendry#% create	dvp	L U U
42*67113Spendry#% create	vpp	- L -
43*67113Spendry#
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
51*67113Spendry#
52*67113Spendry#% mknod	dvp	L U U
53*67113Spendry#% mknod	vpp	- X -
54*67113Spendry#
5554647Smckusickvop_mknod {
5654991Sheideman	IN WILLRELE struct vnode *dvp;
5754991Sheideman	OUT WILLRELE struct vnode **vpp;
5854647Smckusick	IN struct componentname *cnp;
5954647Smckusick	IN struct vattr *vap;
6054647Smckusick};
6154647Smckusick
62*67113Spendry#
63*67113Spendry#% open 	vp	L L L
64*67113Spendry#
6554647Smckusickvop_open {
6654647Smckusick	IN struct vnode *vp;
6754647Smckusick	IN int mode;
6854647Smckusick	IN struct ucred *cred;
6954647Smckusick	IN struct proc *p;
7054647Smckusick};
7154647Smckusick
72*67113Spendry#
73*67113Spendry#% close	vp	U U U
74*67113Spendry#
7554647Smckusickvop_close {
7654647Smckusick	IN struct vnode *vp;
7754647Smckusick	IN int fflag;
7854647Smckusick	IN struct ucred *cred;
7954647Smckusick	IN struct proc *p;
8054647Smckusick};
8154647Smckusick
82*67113Spendry#
83*67113Spendry#% access	vp	L L L
84*67113Spendry#
8554647Smckusickvop_access {
8654647Smckusick	IN struct vnode *vp;
8754647Smckusick	IN int mode;
8854647Smckusick	IN struct ucred *cred;
8954647Smckusick	IN struct proc *p;
9054647Smckusick};
9154647Smckusick
92*67113Spendry#
93*67113Spendry#% getattr	vp	= = =
94*67113Spendry#
9554647Smckusickvop_getattr {
9654647Smckusick	IN struct vnode *vp;
9754647Smckusick	IN struct vattr *vap;
9854647Smckusick	IN struct ucred *cred;
9954647Smckusick	IN struct proc *p;
10054647Smckusick};
10154647Smckusick
102*67113Spendry#
103*67113Spendry#% setattr	vp	L L L
104*67113Spendry#
10554647Smckusickvop_setattr {
10654647Smckusick	IN struct vnode *vp;
10754647Smckusick	IN struct vattr *vap;
10854647Smckusick	IN struct ucred *cred;
10954647Smckusick	IN struct proc *p;
11054647Smckusick};
11154647Smckusick
112*67113Spendry#
113*67113Spendry#% read 	vp	L L L
114*67113Spendry#
11554647Smckusickvop_read {
11654647Smckusick	IN struct vnode *vp;
11754647Smckusick	INOUT struct uio *uio;
11854647Smckusick	IN int ioflag;
11954647Smckusick	IN struct ucred *cred;
12054647Smckusick};
12154647Smckusick
122*67113Spendry#
123*67113Spendry#% write	vp	L L L
124*67113Spendry#
12554647Smckusickvop_write {
12654647Smckusick	IN struct vnode *vp;
12754647Smckusick	INOUT struct uio *uio;
12854647Smckusick	IN int ioflag;
12954647Smckusick	IN struct ucred *cred;
13054647Smckusick};
13154647Smckusick
132*67113Spendry#
133*67113Spendry#% ioctl	vp	U U U
134*67113Spendry#
13554647Smckusickvop_ioctl {
13654647Smckusick	IN struct vnode *vp;
13754647Smckusick	IN int command;
13854647Smckusick	IN caddr_t data;
13954647Smckusick	IN int fflag;
14054647Smckusick	IN struct ucred *cred;
14154647Smckusick	IN struct proc *p;
14254647Smckusick};
14354647Smckusick
144*67113Spendry#
145*67113Spendry#% select	vp	U U U
146*67113Spendry#
14754647Smckusick# Needs work?  (fflags)
14854647Smckusickvop_select {
14954647Smckusick	IN struct vnode *vp;
15054647Smckusick	IN int which;
15154647Smckusick	IN int fflags;
15254647Smckusick	IN struct ucred *cred;
15354647Smckusick	IN struct proc *p;
15454647Smckusick};
15554647Smckusick
156*67113Spendry# XXX - not used
15754647Smckusickvop_mmap {
15854647Smckusick	IN struct vnode *vp;
15954647Smckusick	IN int fflags;
16054647Smckusick	IN struct ucred *cred;
16154647Smckusick	IN struct proc *p;
16254647Smckusick};
16354647Smckusick
164*67113Spendry#
165*67113Spendry#% fsync	vp	L L L
166*67113Spendry#
16754647Smckusickvop_fsync {
16854647Smckusick	IN struct vnode *vp;
16954647Smckusick	IN struct ucred *cred;
17054647Smckusick	IN int waitfor;
17154647Smckusick	IN struct proc *p;
17254647Smckusick};
17354647Smckusick
174*67113Spendry# XXX - not used
17554647Smckusick# Needs word: Is newoff right?  What's it mean?
17654647Smckusickvop_seek {
17754647Smckusick	IN struct vnode *vp;
17854647Smckusick	IN off_t oldoff;
17954647Smckusick	IN off_t newoff;
18054647Smckusick	IN struct ucred *cred;
18154647Smckusick};
18254647Smckusick
183*67113Spendry#
184*67113Spendry#% remove	dvp	L U U
185*67113Spendry#% remove	vp	L U U
186*67113Spendry#
18754647Smckusickvop_remove {
18854991Sheideman	IN WILLRELE struct vnode *dvp;
18954991Sheideman	IN WILLRELE struct vnode *vp;
19054647Smckusick	IN struct componentname *cnp;
19154647Smckusick};
19254647Smckusick
193*67113Spendry#
194*67113Spendry#% link 	vp	L U U
195*67113Spendry#% link 	tdvp	U U U
196*67113Spendry#
19754647Smckusickvop_link {
19854991Sheideman	IN WILLRELE struct vnode *vp;
19954647Smckusick	IN struct vnode *tdvp;
20054647Smckusick	IN struct componentname *cnp;
20154647Smckusick};
20254647Smckusick
203*67113Spendry#
204*67113Spendry#% rename	fdvp	U U U
205*67113Spendry#% rename	fvp	U U U
206*67113Spendry#% rename	tdvp	L U U
207*67113Spendry#% rename	tvp	X U U
208*67113Spendry#
20954647Smckusickvop_rename {
21054991Sheideman	IN WILLRELE struct vnode *fdvp;
21154991Sheideman	IN WILLRELE struct vnode *fvp;
21254647Smckusick	IN struct componentname *fcnp;
21354991Sheideman	IN WILLRELE struct vnode *tdvp;
21454991Sheideman	IN WILLRELE struct vnode *tvp;
21554647Smckusick	IN struct componentname *tcnp;
21654647Smckusick};
21754647Smckusick
218*67113Spendry#
219*67113Spendry#% mkdir	dvp	L U U
220*67113Spendry#% mkdir	vpp	- L -
221*67113Spendry#
22254647Smckusickvop_mkdir {
22354991Sheideman	IN WILLRELE struct vnode *dvp;
22454647Smckusick	OUT struct vnode **vpp;
22554647Smckusick	IN struct componentname *cnp;
22654647Smckusick	IN struct vattr *vap;
22754647Smckusick};
22854647Smckusick
229*67113Spendry#
230*67113Spendry#% rmdir	dvp	L U U
231*67113Spendry#% rmdir	vp	L U U
232*67113Spendry#
23354647Smckusickvop_rmdir {
23454991Sheideman	IN WILLRELE struct vnode *dvp;
23554991Sheideman	IN WILLRELE struct vnode *vp;
23654647Smckusick	IN struct componentname *cnp;
23754647Smckusick};
23854647Smckusick
239*67113Spendry#
240*67113Spendry#% symlink	dvp	L U U
241*67113Spendry#% symlink	vpp	- U -
242*67113Spendry# XXX - note that the return vnode has already been VRELE'ed
243*67113Spendry#       by the filesystem layer.  To use it you must use vget,
244*67113Spendry#       possibly with a further namei.
245*67113Spendry#
24654647Smckusickvop_symlink {
24754991Sheideman	IN WILLRELE struct vnode *dvp;
24854991Sheideman	OUT WILLRELE struct vnode **vpp;
24954647Smckusick	IN struct componentname *cnp;
25054647Smckusick	IN struct vattr *vap;
25154647Smckusick	IN char *target;
25254647Smckusick};
25354647Smckusick
254*67113Spendry#
255*67113Spendry#% readdir	vp	L L L
256*67113Spendry#
25754647Smckusickvop_readdir {
25854647Smckusick	IN struct vnode *vp;
25954647Smckusick	INOUT struct uio *uio;
26054647Smckusick	IN struct ucred *cred;
26154647Smckusick};
26254647Smckusick
263*67113Spendry#
264*67113Spendry#% readlink	vp	L L L
265*67113Spendry#
26654647Smckusickvop_readlink {
26754647Smckusick	IN struct vnode *vp;
26854647Smckusick	INOUT struct uio *uio;
26954647Smckusick	IN struct ucred *cred;
27054647Smckusick};
27154647Smckusick
272*67113Spendry#
273*67113Spendry#% abortop	dvp	= = =
274*67113Spendry#
27554647Smckusickvop_abortop {
27654647Smckusick	IN struct vnode *dvp;
27754647Smckusick	IN struct componentname *cnp;
27854647Smckusick};
27954647Smckusick
280*67113Spendry#
281*67113Spendry#% inactive	vp	U U U
282*67113Spendry#
28354647Smckusickvop_inactive {
28454647Smckusick	IN struct vnode *vp;
28554647Smckusick};
28654647Smckusick
287*67113Spendry#
288*67113Spendry#% reclaim	vp	U U U
289*67113Spendry#
29054647Smckusickvop_reclaim {
29154647Smckusick	IN struct vnode *vp;
29254647Smckusick};
29354647Smckusick
294*67113Spendry#
295*67113Spendry#% lock 	vp	U L U
296*67113Spendry#
29754647Smckusickvop_lock {
29854647Smckusick	IN struct vnode *vp;
29954647Smckusick};
30054647Smckusick
301*67113Spendry#
302*67113Spendry#% unlock	vp	L U L
303*67113Spendry#
30454647Smckusickvop_unlock {
30554647Smckusick	IN struct vnode *vp;
30654647Smckusick};
30754647Smckusick
308*67113Spendry#
309*67113Spendry#% bmap 	vp	L L L
310*67113Spendry#% bmap 	vpp	- U -
311*67113Spendry#
31254647Smckusickvop_bmap {
31354647Smckusick	IN struct vnode *vp;
31454647Smckusick	IN daddr_t bn;
31554647Smckusick	OUT struct vnode **vpp;
31654647Smckusick	IN daddr_t *bnp;
31756441Smargo	OUT int *runp;
31854647Smckusick};
31954647Smckusick
32054647Smckusick#vop_strategy {
32154647Smckusick#	IN struct buf *bp;
32254647Smckusick#};
32354647Smckusick
324*67113Spendry#
325*67113Spendry#% print	vp	= = =
326*67113Spendry#
32754647Smckusickvop_print {
32854647Smckusick	IN struct vnode *vp;
32954647Smckusick};
33054647Smckusick
331*67113Spendry#
332*67113Spendry#% islocked	vp	= = =
333*67113Spendry#
33454647Smckusickvop_islocked {
33554647Smckusick	IN struct vnode *vp;
33654647Smckusick};
33754647Smckusick
338*67113Spendry#
339*67113Spendry#% pathconf	vp	L L L
340*67113Spendry#
34160383Smckusickvop_pathconf {
34260383Smckusick	IN struct vnode *vp;
34360383Smckusick	IN int name;
34460383Smckusick	OUT int *retval;
34560383Smckusick};
34660383Smckusick
347*67113Spendry#
348*67113Spendry#% advlock	vp	U U U
349*67113Spendry#
35054647Smckusickvop_advlock {
35154647Smckusick	IN struct vnode *vp;
35254647Smckusick	IN caddr_t id;
35354647Smckusick	IN int op;
35454647Smckusick	IN struct flock *fl;
35554647Smckusick	IN int flags;
35654647Smckusick};
35754647Smckusick
358*67113Spendry#
359*67113Spendry#% blkatoff	vp	L L L
360*67113Spendry#
36154647Smckusickvop_blkatoff {
36254647Smckusick	IN struct vnode *vp;
36354647Smckusick	IN off_t offset;
36454647Smckusick	OUT char **res;
36554647Smckusick	OUT struct buf **bpp;
36654647Smckusick};
36754647Smckusick
368*67113Spendry#
369*67113Spendry#% valloc	pvp	L L L
370*67113Spendry#
37154647Smckusickvop_valloc {
37254647Smckusick	IN struct vnode *pvp;
37354647Smckusick	IN int mode;
37454647Smckusick	IN struct ucred *cred;
37554647Smckusick	OUT struct vnode **vpp;
37654647Smckusick};
37754647Smckusick
378*67113Spendry#
379*67113Spendry#% reallocblks	vp	L L L
380*67113Spendry#
38165976Smckusickvop_reallocblks {
38265976Smckusick	IN struct vnode *vp;
38365976Smckusick	IN struct cluster_save *buflist;
38465976Smckusick};
38565976Smckusick
386*67113Spendry#
387*67113Spendry#% vfree	pvp	L L L
388*67113Spendry#
38954647Smckusickvop_vfree {
39054647Smckusick	IN struct vnode *pvp;
39154647Smckusick	IN ino_t ino;
39254647Smckusick	IN int mode;
39354647Smckusick};
39454647Smckusick
395*67113Spendry#
396*67113Spendry#% truncate	vp	L L L
397*67113Spendry#
39854647Smckusickvop_truncate {
39954647Smckusick	IN struct vnode *vp;
40054647Smckusick	IN off_t length;
40154647Smckusick	IN int flags;
40254647Smckusick	IN struct ucred *cred;
40354647Smckusick	IN struct proc *p;
40454647Smckusick};
40554647Smckusick
406*67113Spendry#
407*67113Spendry#% update	vp	L L L
408*67113Spendry#
40954647Smckusickvop_update {
41054647Smckusick	IN struct vnode *vp;
41164415Sbostic	IN struct timeval *access;
41264415Sbostic	IN struct timeval *modify;
41354647Smckusick	IN int waitfor;
41454647Smckusick};
41554647Smckusick
41654647Smckusick# Needs work: no vp?
41754647Smckusick#vop_bwrite {
41854647Smckusick#	IN struct buf *bp;
41954647Smckusick#};
420