xref: /csrg-svn/sys/kern/vnode_if.src (revision 67361)
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*67361Smckusick#	@(#)vnode_if.src	8.5 (Berkeley) 06/04/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#
5267113Spendry#% mknod	dvp	L U U
5367113Spendry#% mknod	vpp	- X -
5467113Spendry#
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
6267113Spendry#
6367113Spendry#% open 	vp	L L L
6467113Spendry#
6554647Smckusickvop_open {
6654647Smckusick	IN struct vnode *vp;
6754647Smckusick	IN int mode;
6854647Smckusick	IN struct ucred *cred;
6954647Smckusick	IN struct proc *p;
7054647Smckusick};
7154647Smckusick
7267113Spendry#
7367113Spendry#% close	vp	U U U
7467113Spendry#
7554647Smckusickvop_close {
7654647Smckusick	IN struct vnode *vp;
7754647Smckusick	IN int fflag;
7854647Smckusick	IN struct ucred *cred;
7954647Smckusick	IN struct proc *p;
8054647Smckusick};
8154647Smckusick
8267113Spendry#
8367113Spendry#% access	vp	L L L
8467113Spendry#
8554647Smckusickvop_access {
8654647Smckusick	IN struct vnode *vp;
8754647Smckusick	IN int mode;
8854647Smckusick	IN struct ucred *cred;
8954647Smckusick	IN struct proc *p;
9054647Smckusick};
9154647Smckusick
9267113Spendry#
9367113Spendry#% getattr	vp	= = =
9467113Spendry#
9554647Smckusickvop_getattr {
9654647Smckusick	IN struct vnode *vp;
9754647Smckusick	IN struct vattr *vap;
9854647Smckusick	IN struct ucred *cred;
9954647Smckusick	IN struct proc *p;
10054647Smckusick};
10154647Smckusick
10267113Spendry#
10367113Spendry#% setattr	vp	L L L
10467113Spendry#
10554647Smckusickvop_setattr {
10654647Smckusick	IN struct vnode *vp;
10754647Smckusick	IN struct vattr *vap;
10854647Smckusick	IN struct ucred *cred;
10954647Smckusick	IN struct proc *p;
11054647Smckusick};
11154647Smckusick
11267113Spendry#
11367113Spendry#% read 	vp	L L L
11467113Spendry#
11554647Smckusickvop_read {
11654647Smckusick	IN struct vnode *vp;
11754647Smckusick	INOUT struct uio *uio;
11854647Smckusick	IN int ioflag;
11954647Smckusick	IN struct ucred *cred;
12054647Smckusick};
12154647Smckusick
12267113Spendry#
12367113Spendry#% write	vp	L L L
12467113Spendry#
12554647Smckusickvop_write {
12654647Smckusick	IN struct vnode *vp;
12754647Smckusick	INOUT struct uio *uio;
12854647Smckusick	IN int ioflag;
12954647Smckusick	IN struct ucred *cred;
13054647Smckusick};
13154647Smckusick
13267113Spendry#
13367113Spendry#% ioctl	vp	U U U
13467113Spendry#
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
14467113Spendry#
14567113Spendry#% select	vp	U U U
14667113Spendry#
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
15667113Spendry# 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
16467113Spendry#
16567113Spendry#% fsync	vp	L L L
16667113Spendry#
16754647Smckusickvop_fsync {
16854647Smckusick	IN struct vnode *vp;
16954647Smckusick	IN struct ucred *cred;
17054647Smckusick	IN int waitfor;
17154647Smckusick	IN struct proc *p;
17254647Smckusick};
17354647Smckusick
17467113Spendry# 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
18367113Spendry#
18467113Spendry#% remove	dvp	L U U
18567113Spendry#% remove	vp	L U U
18667113Spendry#
18754647Smckusickvop_remove {
18854991Sheideman	IN WILLRELE struct vnode *dvp;
18954991Sheideman	IN WILLRELE struct vnode *vp;
19054647Smckusick	IN struct componentname *cnp;
19154647Smckusick};
19254647Smckusick
19367113Spendry#
19467113Spendry#% link 	vp	L U U
19567113Spendry#% link 	tdvp	U U U
19667113Spendry#
19754647Smckusickvop_link {
19854991Sheideman	IN WILLRELE struct vnode *vp;
19954647Smckusick	IN struct vnode *tdvp;
20054647Smckusick	IN struct componentname *cnp;
20154647Smckusick};
20254647Smckusick
20367113Spendry#
20467113Spendry#% rename	fdvp	U U U
20567113Spendry#% rename	fvp	U U U
20667113Spendry#% rename	tdvp	L U U
20767113Spendry#% rename	tvp	X U U
20867113Spendry#
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
21867113Spendry#
21967113Spendry#% mkdir	dvp	L U U
22067113Spendry#% mkdir	vpp	- L -
22167113Spendry#
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
22967113Spendry#
23067113Spendry#% rmdir	dvp	L U U
23167113Spendry#% rmdir	vp	L U U
23267113Spendry#
23354647Smckusickvop_rmdir {
23454991Sheideman	IN WILLRELE struct vnode *dvp;
23554991Sheideman	IN WILLRELE struct vnode *vp;
23654647Smckusick	IN struct componentname *cnp;
23754647Smckusick};
23854647Smckusick
23967113Spendry#
24067113Spendry#% symlink	dvp	L U U
24167113Spendry#% symlink	vpp	- U -
24267113Spendry# XXX - note that the return vnode has already been VRELE'ed
24367113Spendry#       by the filesystem layer.  To use it you must use vget,
24467113Spendry#       possibly with a further namei.
24567113Spendry#
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
25467113Spendry#
25567113Spendry#% readdir	vp	L L L
25667113Spendry#
25754647Smckusickvop_readdir {
25854647Smckusick	IN struct vnode *vp;
25954647Smckusick	INOUT struct uio *uio;
26054647Smckusick	IN struct ucred *cred;
261*67361Smckusick	INOUT int *eofflag;
262*67361Smckusick	OUT u_long *cookies;
263*67361Smckusick	IN int ncookies;
26454647Smckusick};
26554647Smckusick
26667113Spendry#
26767113Spendry#% readlink	vp	L L L
26867113Spendry#
26954647Smckusickvop_readlink {
27054647Smckusick	IN struct vnode *vp;
27154647Smckusick	INOUT struct uio *uio;
27254647Smckusick	IN struct ucred *cred;
27354647Smckusick};
27454647Smckusick
27567113Spendry#
27667113Spendry#% abortop	dvp	= = =
27767113Spendry#
27854647Smckusickvop_abortop {
27954647Smckusick	IN struct vnode *dvp;
28054647Smckusick	IN struct componentname *cnp;
28154647Smckusick};
28254647Smckusick
28367113Spendry#
28467113Spendry#% inactive	vp	U U U
28567113Spendry#
28654647Smckusickvop_inactive {
28754647Smckusick	IN struct vnode *vp;
28854647Smckusick};
28954647Smckusick
29067113Spendry#
29167113Spendry#% reclaim	vp	U U U
29267113Spendry#
29354647Smckusickvop_reclaim {
29454647Smckusick	IN struct vnode *vp;
29554647Smckusick};
29654647Smckusick
29767113Spendry#
29867113Spendry#% lock 	vp	U L U
29967113Spendry#
30054647Smckusickvop_lock {
30154647Smckusick	IN struct vnode *vp;
30254647Smckusick};
30354647Smckusick
30467113Spendry#
30567113Spendry#% unlock	vp	L U L
30667113Spendry#
30754647Smckusickvop_unlock {
30854647Smckusick	IN struct vnode *vp;
30954647Smckusick};
31054647Smckusick
31167113Spendry#
31267113Spendry#% bmap 	vp	L L L
31367113Spendry#% bmap 	vpp	- U -
31467113Spendry#
31554647Smckusickvop_bmap {
31654647Smckusick	IN struct vnode *vp;
31754647Smckusick	IN daddr_t bn;
31854647Smckusick	OUT struct vnode **vpp;
31954647Smckusick	IN daddr_t *bnp;
32056441Smargo	OUT int *runp;
32154647Smckusick};
32254647Smckusick
32354647Smckusick#vop_strategy {
32454647Smckusick#	IN struct buf *bp;
32554647Smckusick#};
32654647Smckusick
32767113Spendry#
32867113Spendry#% print	vp	= = =
32967113Spendry#
33054647Smckusickvop_print {
33154647Smckusick	IN struct vnode *vp;
33254647Smckusick};
33354647Smckusick
33467113Spendry#
33567113Spendry#% islocked	vp	= = =
33667113Spendry#
33754647Smckusickvop_islocked {
33854647Smckusick	IN struct vnode *vp;
33954647Smckusick};
34054647Smckusick
34167113Spendry#
34267113Spendry#% pathconf	vp	L L L
34367113Spendry#
34460383Smckusickvop_pathconf {
34560383Smckusick	IN struct vnode *vp;
34660383Smckusick	IN int name;
34760383Smckusick	OUT int *retval;
34860383Smckusick};
34960383Smckusick
35067113Spendry#
35167113Spendry#% advlock	vp	U U U
35267113Spendry#
35354647Smckusickvop_advlock {
35454647Smckusick	IN struct vnode *vp;
35554647Smckusick	IN caddr_t id;
35654647Smckusick	IN int op;
35754647Smckusick	IN struct flock *fl;
35854647Smckusick	IN int flags;
35954647Smckusick};
36054647Smckusick
36167113Spendry#
36267113Spendry#% blkatoff	vp	L L L
36367113Spendry#
36454647Smckusickvop_blkatoff {
36554647Smckusick	IN struct vnode *vp;
36654647Smckusick	IN off_t offset;
36754647Smckusick	OUT char **res;
36854647Smckusick	OUT struct buf **bpp;
36954647Smckusick};
37054647Smckusick
37167113Spendry#
37267113Spendry#% valloc	pvp	L L L
37367113Spendry#
37454647Smckusickvop_valloc {
37554647Smckusick	IN struct vnode *pvp;
37654647Smckusick	IN int mode;
37754647Smckusick	IN struct ucred *cred;
37854647Smckusick	OUT struct vnode **vpp;
37954647Smckusick};
38054647Smckusick
38167113Spendry#
38267113Spendry#% reallocblks	vp	L L L
38367113Spendry#
38465976Smckusickvop_reallocblks {
38565976Smckusick	IN struct vnode *vp;
38665976Smckusick	IN struct cluster_save *buflist;
38765976Smckusick};
38865976Smckusick
38967113Spendry#
39067113Spendry#% vfree	pvp	L L L
39167113Spendry#
39254647Smckusickvop_vfree {
39354647Smckusick	IN struct vnode *pvp;
39454647Smckusick	IN ino_t ino;
39554647Smckusick	IN int mode;
39654647Smckusick};
39754647Smckusick
39867113Spendry#
39967113Spendry#% truncate	vp	L L L
40067113Spendry#
40154647Smckusickvop_truncate {
40254647Smckusick	IN struct vnode *vp;
40354647Smckusick	IN off_t length;
40454647Smckusick	IN int flags;
40554647Smckusick	IN struct ucred *cred;
40654647Smckusick	IN struct proc *p;
40754647Smckusick};
40854647Smckusick
40967113Spendry#
41067113Spendry#% update	vp	L L L
41167113Spendry#
41254647Smckusickvop_update {
41354647Smckusick	IN struct vnode *vp;
41464415Sbostic	IN struct timeval *access;
41564415Sbostic	IN struct timeval *modify;
41654647Smckusick	IN int waitfor;
41754647Smckusick};
41854647Smckusick
41954647Smckusick# Needs work: no vp?
42054647Smckusick#vop_bwrite {
42154647Smckusick#	IN struct buf *bp;
42254647Smckusick#};
423