xref: /csrg-svn/sys/kern/vnode_if.src (revision 69405)
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*69405Smckusick#	@(#)vnode_if.src	8.12 (Berkeley) 05/14/95
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
3168297Scgd#	on the flags and operation fields in the (cnp) structure.  Note
3268297Scgd#	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	- - -
5568297Scgd#
5667518Spendryvop_whiteout {
5767518Spendry	IN WILLRELE struct vnode *dvp;
5867518Spendry	IN struct componentname *cnp;
5967518Spendry	IN int flags;
6067518Spendry};
6167518Spendry
6267518Spendry#
6367113Spendry#% mknod	dvp	L U U
6467113Spendry#% mknod	vpp	- X -
6567113Spendry#
6654647Smckusickvop_mknod {
6754991Sheideman	IN WILLRELE struct vnode *dvp;
6854991Sheideman	OUT WILLRELE struct vnode **vpp;
6954647Smckusick	IN struct componentname *cnp;
7054647Smckusick	IN struct vattr *vap;
7154647Smckusick};
7254647Smckusick
7367113Spendry#
7468297Scgd#% open		vp	L L L
7567113Spendry#
7654647Smckusickvop_open {
7754647Smckusick	IN struct vnode *vp;
7854647Smckusick	IN int mode;
7954647Smckusick	IN struct ucred *cred;
8054647Smckusick	IN struct proc *p;
8154647Smckusick};
8254647Smckusick
8367113Spendry#
8467113Spendry#% close	vp	U U U
8567113Spendry#
8654647Smckusickvop_close {
8754647Smckusick	IN struct vnode *vp;
8854647Smckusick	IN int fflag;
8954647Smckusick	IN struct ucred *cred;
9054647Smckusick	IN struct proc *p;
9154647Smckusick};
9254647Smckusick
9367113Spendry#
9467113Spendry#% access	vp	L L L
9567113Spendry#
9654647Smckusickvop_access {
9754647Smckusick	IN struct vnode *vp;
9854647Smckusick	IN int mode;
9954647Smckusick	IN struct ucred *cred;
10054647Smckusick	IN struct proc *p;
10154647Smckusick};
10254647Smckusick
10367113Spendry#
10467113Spendry#% getattr	vp	= = =
10567113Spendry#
10654647Smckusickvop_getattr {
10754647Smckusick	IN struct vnode *vp;
10854647Smckusick	IN struct vattr *vap;
10954647Smckusick	IN struct ucred *cred;
11054647Smckusick	IN struct proc *p;
11154647Smckusick};
11254647Smckusick
11367113Spendry#
11467113Spendry#% setattr	vp	L L L
11567113Spendry#
11654647Smckusickvop_setattr {
11754647Smckusick	IN struct vnode *vp;
11854647Smckusick	IN struct vattr *vap;
11954647Smckusick	IN struct ucred *cred;
12054647Smckusick	IN struct proc *p;
12154647Smckusick};
12254647Smckusick
12367113Spendry#
12468297Scgd#% read		vp	L L L
12567113Spendry#
12654647Smckusickvop_read {
12754647Smckusick	IN struct vnode *vp;
12854647Smckusick	INOUT struct uio *uio;
12954647Smckusick	IN int ioflag;
13054647Smckusick	IN struct ucred *cred;
13154647Smckusick};
13254647Smckusick
13367113Spendry#
13467113Spendry#% write	vp	L L L
13567113Spendry#
13654647Smckusickvop_write {
13754647Smckusick	IN struct vnode *vp;
13854647Smckusick	INOUT struct uio *uio;
13954647Smckusick	IN int ioflag;
14054647Smckusick	IN struct ucred *cred;
14154647Smckusick};
14254647Smckusick
14367113Spendry#
14467637Smckusick#% lease	vp	= = =
14567637Smckusick#
14667637Smckusickvop_lease {
14767637Smckusick	IN struct vnode *vp;
14867637Smckusick	IN struct proc *p;
14967637Smckusick	IN struct ucred *cred;
15067637Smckusick	IN int flag;
15167637Smckusick};
15267637Smckusick
15367637Smckusick#
15467113Spendry#% ioctl	vp	U U U
15567113Spendry#
15654647Smckusickvop_ioctl {
15754647Smckusick	IN struct vnode *vp;
15868297Scgd	IN u_long command;
15954647Smckusick	IN caddr_t data;
16054647Smckusick	IN int fflag;
16154647Smckusick	IN struct ucred *cred;
16254647Smckusick	IN struct proc *p;
16354647Smckusick};
16454647Smckusick
16567113Spendry#
16667113Spendry#% select	vp	U U U
16767113Spendry#
16854647Smckusick# Needs work?  (fflags)
16968297Scgd#
17054647Smckusickvop_select {
17154647Smckusick	IN struct vnode *vp;
17254647Smckusick	IN int which;
17354647Smckusick	IN int fflags;
17454647Smckusick	IN struct ucred *cred;
17554647Smckusick	IN struct proc *p;
17654647Smckusick};
17754647Smckusick
17868297Scgd#
17968420Smckusick#% revoke	vp	U U U
18068420Smckusick#
18168420Smckusickvop_revoke {
18268420Smckusick	IN struct vnode *vp;
18368420Smckusick	IN int flags;
18468420Smckusick};
18568420Smckusick
18668420Smckusick#
18767113Spendry# XXX - not used
18868297Scgd#
18954647Smckusickvop_mmap {
19054647Smckusick	IN struct vnode *vp;
19154647Smckusick	IN int fflags;
19254647Smckusick	IN struct ucred *cred;
19354647Smckusick	IN struct proc *p;
19454647Smckusick};
19554647Smckusick
19667113Spendry#
19767113Spendry#% fsync	vp	L L L
19867113Spendry#
19954647Smckusickvop_fsync {
20054647Smckusick	IN struct vnode *vp;
20154647Smckusick	IN struct ucred *cred;
20254647Smckusick	IN int waitfor;
20354647Smckusick	IN struct proc *p;
20454647Smckusick};
20554647Smckusick
20668297Scgd#
20767113Spendry# XXX - not used
20868297Scgd# Needs work: Is newoff right?  What's it mean?
20968297Scgd#
21054647Smckusickvop_seek {
21154647Smckusick	IN struct vnode *vp;
21254647Smckusick	IN off_t oldoff;
21354647Smckusick	IN off_t newoff;
21454647Smckusick	IN struct ucred *cred;
21554647Smckusick};
21654647Smckusick
21767113Spendry#
21867113Spendry#% remove	dvp	L U U
21967113Spendry#% remove	vp	L U U
22067113Spendry#
22154647Smckusickvop_remove {
22254991Sheideman	IN WILLRELE struct vnode *dvp;
22354991Sheideman	IN WILLRELE struct vnode *vp;
22454647Smckusick	IN struct componentname *cnp;
22554647Smckusick};
22654647Smckusick
22767113Spendry#
22868297Scgd#% link		vp	U U U
22968297Scgd#% link		tdvp	L U U
23067113Spendry#
23154647Smckusickvop_link {
23254991Sheideman	IN WILLRELE struct vnode *vp;
23354647Smckusick	IN struct vnode *tdvp;
23454647Smckusick	IN struct componentname *cnp;
23554647Smckusick};
23654647Smckusick
23767113Spendry#
23867113Spendry#% rename	fdvp	U U U
23967113Spendry#% rename	fvp	U U U
24067113Spendry#% rename	tdvp	L U U
24167113Spendry#% rename	tvp	X U U
24267113Spendry#
24354647Smckusickvop_rename {
24454991Sheideman	IN WILLRELE struct vnode *fdvp;
24554991Sheideman	IN WILLRELE struct vnode *fvp;
24654647Smckusick	IN struct componentname *fcnp;
24754991Sheideman	IN WILLRELE struct vnode *tdvp;
24854991Sheideman	IN WILLRELE struct vnode *tvp;
24954647Smckusick	IN struct componentname *tcnp;
25054647Smckusick};
25154647Smckusick
25267113Spendry#
25367113Spendry#% mkdir	dvp	L U U
25467113Spendry#% mkdir	vpp	- L -
25567113Spendry#
25654647Smckusickvop_mkdir {
25754991Sheideman	IN WILLRELE struct vnode *dvp;
25854647Smckusick	OUT struct vnode **vpp;
25954647Smckusick	IN struct componentname *cnp;
26054647Smckusick	IN struct vattr *vap;
26154647Smckusick};
26254647Smckusick
26367113Spendry#
26467113Spendry#% rmdir	dvp	L U U
26567113Spendry#% rmdir	vp	L U U
26667113Spendry#
26754647Smckusickvop_rmdir {
26854991Sheideman	IN WILLRELE struct vnode *dvp;
26954991Sheideman	IN WILLRELE struct vnode *vp;
27054647Smckusick	IN struct componentname *cnp;
27154647Smckusick};
27254647Smckusick
27367113Spendry#
27467113Spendry#% symlink	dvp	L U U
27567113Spendry#% symlink	vpp	- U -
27668297Scgd#
27767113Spendry# XXX - note that the return vnode has already been VRELE'ed
27868297Scgd#	by the filesystem layer.  To use it you must use vget,
27968297Scgd#	possibly with a further namei.
28067113Spendry#
28154647Smckusickvop_symlink {
28254991Sheideman	IN WILLRELE struct vnode *dvp;
28354991Sheideman	OUT WILLRELE struct vnode **vpp;
28454647Smckusick	IN struct componentname *cnp;
28554647Smckusick	IN struct vattr *vap;
28654647Smckusick	IN char *target;
28754647Smckusick};
28854647Smckusick
28967113Spendry#
29067113Spendry#% readdir	vp	L L L
29167113Spendry#
29254647Smckusickvop_readdir {
29354647Smckusick	IN struct vnode *vp;
29454647Smckusick	INOUT struct uio *uio;
29554647Smckusick	IN struct ucred *cred;
29667361Smckusick	INOUT int *eofflag;
29768660Smckusick	OUT int *ncookies;
29868660Smckusick	INOUT u_long **cookies;
29954647Smckusick};
30054647Smckusick
30167113Spendry#
30267113Spendry#% readlink	vp	L L L
30367113Spendry#
30454647Smckusickvop_readlink {
30554647Smckusick	IN struct vnode *vp;
30654647Smckusick	INOUT struct uio *uio;
30754647Smckusick	IN struct ucred *cred;
30854647Smckusick};
30954647Smckusick
31067113Spendry#
31167113Spendry#% abortop	dvp	= = =
31267113Spendry#
31354647Smckusickvop_abortop {
31454647Smckusick	IN struct vnode *dvp;
31554647Smckusick	IN struct componentname *cnp;
31654647Smckusick};
31754647Smckusick
31867113Spendry#
319*69405Smckusick#% inactive	vp	L U U
32067113Spendry#
32154647Smckusickvop_inactive {
32254647Smckusick	IN struct vnode *vp;
323*69405Smckusick	IN struct proc *p;
32454647Smckusick};
32554647Smckusick
32667113Spendry#
32767113Spendry#% reclaim	vp	U U U
32867113Spendry#
32954647Smckusickvop_reclaim {
33054647Smckusick	IN struct vnode *vp;
331*69405Smckusick	IN struct proc *p;
33254647Smckusick};
33354647Smckusick
33467113Spendry#
33568297Scgd#% lock		vp	U L U
33667113Spendry#
33754647Smckusickvop_lock {
33854647Smckusick	IN struct vnode *vp;
33968791Smckusick	IN int flags;
34068791Smckusick	IN struct proc *p;
34154647Smckusick};
34254647Smckusick
34367113Spendry#
34467113Spendry#% unlock	vp	L U L
34567113Spendry#
34654647Smckusickvop_unlock {
34754647Smckusick	IN struct vnode *vp;
34868791Smckusick	IN int flags;
34968791Smckusick	IN struct proc *p;
35054647Smckusick};
35154647Smckusick
35267113Spendry#
35368297Scgd#% bmap		vp	L L L
35468297Scgd#% bmap		vpp	- U -
35567113Spendry#
35654647Smckusickvop_bmap {
35754647Smckusick	IN struct vnode *vp;
35854647Smckusick	IN daddr_t bn;
35954647Smckusick	OUT struct vnode **vpp;
36054647Smckusick	IN daddr_t *bnp;
36156441Smargo	OUT int *runp;
36254647Smckusick};
36354647Smckusick
36468297Scgd#
36568297Scgd# Needs work: no vp?
36668297Scgd#
36754647Smckusick#vop_strategy {
36854647Smckusick#	IN struct buf *bp;
36954647Smckusick#};
37054647Smckusick
37167113Spendry#
37267113Spendry#% print	vp	= = =
37367113Spendry#
37454647Smckusickvop_print {
37554647Smckusick	IN struct vnode *vp;
37654647Smckusick};
37754647Smckusick
37867113Spendry#
37967113Spendry#% islocked	vp	= = =
38067113Spendry#
38154647Smckusickvop_islocked {
38254647Smckusick	IN struct vnode *vp;
38354647Smckusick};
38454647Smckusick
38567113Spendry#
38667113Spendry#% pathconf	vp	L L L
38767113Spendry#
38860383Smckusickvop_pathconf {
38960383Smckusick	IN struct vnode *vp;
39060383Smckusick	IN int name;
39168297Scgd	OUT register_t *retval;
39260383Smckusick};
39360383Smckusick
39467113Spendry#
39567113Spendry#% advlock	vp	U U U
39667113Spendry#
39754647Smckusickvop_advlock {
39854647Smckusick	IN struct vnode *vp;
39954647Smckusick	IN caddr_t id;
40054647Smckusick	IN int op;
40154647Smckusick	IN struct flock *fl;
40254647Smckusick	IN int flags;
40354647Smckusick};
40454647Smckusick
40567113Spendry#
40667113Spendry#% blkatoff	vp	L L L
40767113Spendry#
40854647Smckusickvop_blkatoff {
40954647Smckusick	IN struct vnode *vp;
41054647Smckusick	IN off_t offset;
41154647Smckusick	OUT char **res;
41254647Smckusick	OUT struct buf **bpp;
41354647Smckusick};
41454647Smckusick
41567113Spendry#
41667113Spendry#% valloc	pvp	L L L
41767113Spendry#
41854647Smckusickvop_valloc {
41954647Smckusick	IN struct vnode *pvp;
42054647Smckusick	IN int mode;
42154647Smckusick	IN struct ucred *cred;
42254647Smckusick	OUT struct vnode **vpp;
42354647Smckusick};
42454647Smckusick
42567113Spendry#
42667113Spendry#% reallocblks	vp	L L L
42767113Spendry#
42865976Smckusickvop_reallocblks {
42965976Smckusick	IN struct vnode *vp;
43065976Smckusick	IN struct cluster_save *buflist;
43165976Smckusick};
43265976Smckusick
43367113Spendry#
43467113Spendry#% vfree	pvp	L L L
43567113Spendry#
43654647Smckusickvop_vfree {
43754647Smckusick	IN struct vnode *pvp;
43854647Smckusick	IN ino_t ino;
43954647Smckusick	IN int mode;
44054647Smckusick};
44154647Smckusick
44267113Spendry#
44367113Spendry#% truncate	vp	L L L
44467113Spendry#
44554647Smckusickvop_truncate {
44654647Smckusick	IN struct vnode *vp;
44754647Smckusick	IN off_t length;
44854647Smckusick	IN int flags;
44954647Smckusick	IN struct ucred *cred;
45054647Smckusick	IN struct proc *p;
45154647Smckusick};
45254647Smckusick
45367113Spendry#
45467113Spendry#% update	vp	L L L
45567113Spendry#
45654647Smckusickvop_update {
45754647Smckusick	IN struct vnode *vp;
45864415Sbostic	IN struct timeval *access;
45964415Sbostic	IN struct timeval *modify;
46054647Smckusick	IN int waitfor;
46154647Smckusick};
46254647Smckusick
46368297Scgd#
46454647Smckusick# Needs work: no vp?
46568297Scgd#
46654647Smckusick#vop_bwrite {
46754647Smckusick#	IN struct buf *bp;
46854647Smckusick#};
469