xref: /csrg-svn/sys/kern/vnode_if.src (revision 67518)
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*67518Spendry#	@(#)vnode_if.src	8.6 (Berkeley) 07/12/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#
52*67518Spendry#% whiteout	dvp	L L L
53*67518Spendry#% whiteout	cnp	- - -
54*67518Spendry#% whiteout	flag	- - -
55*67518Spendryvop_whiteout {
56*67518Spendry	IN WILLRELE struct vnode *dvp;
57*67518Spendry	IN struct componentname *cnp;
58*67518Spendry	IN int flags;
59*67518Spendry};
60*67518Spendry
61*67518Spendry#
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#
14367113Spendry#% ioctl	vp	U U U
14467113Spendry#
14554647Smckusickvop_ioctl {
14654647Smckusick	IN struct vnode *vp;
14754647Smckusick	IN int command;
14854647Smckusick	IN caddr_t data;
14954647Smckusick	IN int fflag;
15054647Smckusick	IN struct ucred *cred;
15154647Smckusick	IN struct proc *p;
15254647Smckusick};
15354647Smckusick
15467113Spendry#
15567113Spendry#% select	vp	U U U
15667113Spendry#
15754647Smckusick# Needs work?  (fflags)
15854647Smckusickvop_select {
15954647Smckusick	IN struct vnode *vp;
16054647Smckusick	IN int which;
16154647Smckusick	IN int fflags;
16254647Smckusick	IN struct ucred *cred;
16354647Smckusick	IN struct proc *p;
16454647Smckusick};
16554647Smckusick
16667113Spendry# XXX - not used
16754647Smckusickvop_mmap {
16854647Smckusick	IN struct vnode *vp;
16954647Smckusick	IN int fflags;
17054647Smckusick	IN struct ucred *cred;
17154647Smckusick	IN struct proc *p;
17254647Smckusick};
17354647Smckusick
17467113Spendry#
17567113Spendry#% fsync	vp	L L L
17667113Spendry#
17754647Smckusickvop_fsync {
17854647Smckusick	IN struct vnode *vp;
17954647Smckusick	IN struct ucred *cred;
18054647Smckusick	IN int waitfor;
18154647Smckusick	IN struct proc *p;
18254647Smckusick};
18354647Smckusick
18467113Spendry# XXX - not used
18554647Smckusick# Needs word: Is newoff right?  What's it mean?
18654647Smckusickvop_seek {
18754647Smckusick	IN struct vnode *vp;
18854647Smckusick	IN off_t oldoff;
18954647Smckusick	IN off_t newoff;
19054647Smckusick	IN struct ucred *cred;
19154647Smckusick};
19254647Smckusick
19367113Spendry#
19467113Spendry#% remove	dvp	L U U
19567113Spendry#% remove	vp	L U U
19667113Spendry#
19754647Smckusickvop_remove {
19854991Sheideman	IN WILLRELE struct vnode *dvp;
19954991Sheideman	IN WILLRELE struct vnode *vp;
20054647Smckusick	IN struct componentname *cnp;
20154647Smckusick};
20254647Smckusick
20367113Spendry#
20467113Spendry#% link 	vp	L U U
20567113Spendry#% link 	tdvp	U U U
20667113Spendry#
20754647Smckusickvop_link {
20854991Sheideman	IN WILLRELE struct vnode *vp;
20954647Smckusick	IN struct vnode *tdvp;
21054647Smckusick	IN struct componentname *cnp;
21154647Smckusick};
21254647Smckusick
21367113Spendry#
21467113Spendry#% rename	fdvp	U U U
21567113Spendry#% rename	fvp	U U U
21667113Spendry#% rename	tdvp	L U U
21767113Spendry#% rename	tvp	X U U
21867113Spendry#
21954647Smckusickvop_rename {
22054991Sheideman	IN WILLRELE struct vnode *fdvp;
22154991Sheideman	IN WILLRELE struct vnode *fvp;
22254647Smckusick	IN struct componentname *fcnp;
22354991Sheideman	IN WILLRELE struct vnode *tdvp;
22454991Sheideman	IN WILLRELE struct vnode *tvp;
22554647Smckusick	IN struct componentname *tcnp;
22654647Smckusick};
22754647Smckusick
22867113Spendry#
22967113Spendry#% mkdir	dvp	L U U
23067113Spendry#% mkdir	vpp	- L -
23167113Spendry#
23254647Smckusickvop_mkdir {
23354991Sheideman	IN WILLRELE struct vnode *dvp;
23454647Smckusick	OUT struct vnode **vpp;
23554647Smckusick	IN struct componentname *cnp;
23654647Smckusick	IN struct vattr *vap;
23754647Smckusick};
23854647Smckusick
23967113Spendry#
24067113Spendry#% rmdir	dvp	L U U
24167113Spendry#% rmdir	vp	L U U
24267113Spendry#
24354647Smckusickvop_rmdir {
24454991Sheideman	IN WILLRELE struct vnode *dvp;
24554991Sheideman	IN WILLRELE struct vnode *vp;
24654647Smckusick	IN struct componentname *cnp;
24754647Smckusick};
24854647Smckusick
24967113Spendry#
25067113Spendry#% symlink	dvp	L U U
25167113Spendry#% symlink	vpp	- U -
25267113Spendry# XXX - note that the return vnode has already been VRELE'ed
25367113Spendry#       by the filesystem layer.  To use it you must use vget,
25467113Spendry#       possibly with a further namei.
25567113Spendry#
25654647Smckusickvop_symlink {
25754991Sheideman	IN WILLRELE struct vnode *dvp;
25854991Sheideman	OUT WILLRELE struct vnode **vpp;
25954647Smckusick	IN struct componentname *cnp;
26054647Smckusick	IN struct vattr *vap;
26154647Smckusick	IN char *target;
26254647Smckusick};
26354647Smckusick
26467113Spendry#
26567113Spendry#% readdir	vp	L L L
26667113Spendry#
26754647Smckusickvop_readdir {
26854647Smckusick	IN struct vnode *vp;
26954647Smckusick	INOUT struct uio *uio;
27054647Smckusick	IN struct ucred *cred;
27167361Smckusick	INOUT int *eofflag;
27267361Smckusick	OUT u_long *cookies;
27367361Smckusick	IN int ncookies;
27454647Smckusick};
27554647Smckusick
27667113Spendry#
27767113Spendry#% readlink	vp	L L L
27867113Spendry#
27954647Smckusickvop_readlink {
28054647Smckusick	IN struct vnode *vp;
28154647Smckusick	INOUT struct uio *uio;
28254647Smckusick	IN struct ucred *cred;
28354647Smckusick};
28454647Smckusick
28567113Spendry#
28667113Spendry#% abortop	dvp	= = =
28767113Spendry#
28854647Smckusickvop_abortop {
28954647Smckusick	IN struct vnode *dvp;
29054647Smckusick	IN struct componentname *cnp;
29154647Smckusick};
29254647Smckusick
29367113Spendry#
29467113Spendry#% inactive	vp	U U U
29567113Spendry#
29654647Smckusickvop_inactive {
29754647Smckusick	IN struct vnode *vp;
29854647Smckusick};
29954647Smckusick
30067113Spendry#
30167113Spendry#% reclaim	vp	U U U
30267113Spendry#
30354647Smckusickvop_reclaim {
30454647Smckusick	IN struct vnode *vp;
30554647Smckusick};
30654647Smckusick
30767113Spendry#
30867113Spendry#% lock 	vp	U L U
30967113Spendry#
31054647Smckusickvop_lock {
31154647Smckusick	IN struct vnode *vp;
31254647Smckusick};
31354647Smckusick
31467113Spendry#
31567113Spendry#% unlock	vp	L U L
31667113Spendry#
31754647Smckusickvop_unlock {
31854647Smckusick	IN struct vnode *vp;
31954647Smckusick};
32054647Smckusick
32167113Spendry#
32267113Spendry#% bmap 	vp	L L L
32367113Spendry#% bmap 	vpp	- U -
32467113Spendry#
32554647Smckusickvop_bmap {
32654647Smckusick	IN struct vnode *vp;
32754647Smckusick	IN daddr_t bn;
32854647Smckusick	OUT struct vnode **vpp;
32954647Smckusick	IN daddr_t *bnp;
33056441Smargo	OUT int *runp;
33154647Smckusick};
33254647Smckusick
33354647Smckusick#vop_strategy {
33454647Smckusick#	IN struct buf *bp;
33554647Smckusick#};
33654647Smckusick
33767113Spendry#
33867113Spendry#% print	vp	= = =
33967113Spendry#
34054647Smckusickvop_print {
34154647Smckusick	IN struct vnode *vp;
34254647Smckusick};
34354647Smckusick
34467113Spendry#
34567113Spendry#% islocked	vp	= = =
34667113Spendry#
34754647Smckusickvop_islocked {
34854647Smckusick	IN struct vnode *vp;
34954647Smckusick};
35054647Smckusick
35167113Spendry#
35267113Spendry#% pathconf	vp	L L L
35367113Spendry#
35460383Smckusickvop_pathconf {
35560383Smckusick	IN struct vnode *vp;
35660383Smckusick	IN int name;
35760383Smckusick	OUT int *retval;
35860383Smckusick};
35960383Smckusick
36067113Spendry#
36167113Spendry#% advlock	vp	U U U
36267113Spendry#
36354647Smckusickvop_advlock {
36454647Smckusick	IN struct vnode *vp;
36554647Smckusick	IN caddr_t id;
36654647Smckusick	IN int op;
36754647Smckusick	IN struct flock *fl;
36854647Smckusick	IN int flags;
36954647Smckusick};
37054647Smckusick
37167113Spendry#
37267113Spendry#% blkatoff	vp	L L L
37367113Spendry#
37454647Smckusickvop_blkatoff {
37554647Smckusick	IN struct vnode *vp;
37654647Smckusick	IN off_t offset;
37754647Smckusick	OUT char **res;
37854647Smckusick	OUT struct buf **bpp;
37954647Smckusick};
38054647Smckusick
38167113Spendry#
38267113Spendry#% valloc	pvp	L L L
38367113Spendry#
38454647Smckusickvop_valloc {
38554647Smckusick	IN struct vnode *pvp;
38654647Smckusick	IN int mode;
38754647Smckusick	IN struct ucred *cred;
38854647Smckusick	OUT struct vnode **vpp;
38954647Smckusick};
39054647Smckusick
39167113Spendry#
39267113Spendry#% reallocblks	vp	L L L
39367113Spendry#
39465976Smckusickvop_reallocblks {
39565976Smckusick	IN struct vnode *vp;
39665976Smckusick	IN struct cluster_save *buflist;
39765976Smckusick};
39865976Smckusick
39967113Spendry#
40067113Spendry#% vfree	pvp	L L L
40167113Spendry#
40254647Smckusickvop_vfree {
40354647Smckusick	IN struct vnode *pvp;
40454647Smckusick	IN ino_t ino;
40554647Smckusick	IN int mode;
40654647Smckusick};
40754647Smckusick
40867113Spendry#
40967113Spendry#% truncate	vp	L L L
41067113Spendry#
41154647Smckusickvop_truncate {
41254647Smckusick	IN struct vnode *vp;
41354647Smckusick	IN off_t length;
41454647Smckusick	IN int flags;
41554647Smckusick	IN struct ucred *cred;
41654647Smckusick	IN struct proc *p;
41754647Smckusick};
41854647Smckusick
41967113Spendry#
42067113Spendry#% update	vp	L L L
42167113Spendry#
42254647Smckusickvop_update {
42354647Smckusick	IN struct vnode *vp;
42464415Sbostic	IN struct timeval *access;
42564415Sbostic	IN struct timeval *modify;
42654647Smckusick	IN int waitfor;
42754647Smckusick};
42854647Smckusick
42954647Smckusick# Needs work: no vp?
43054647Smckusick#vop_bwrite {
43154647Smckusick#	IN struct buf *bp;
43254647Smckusick#};
433