Blame


1 cfa37a7b 2004-04-10 devnull .TH 9PFID 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull Fid, Fidpool, allocfidpool, freefidpool, allocfid, closefid, lookupfid, removefid,
4 cfa37a7b 2004-04-10 devnull Req, Reqpool, allocreqpool, freereqpool, allocreq, closereq, lookupreq, removereq \- 9P fid, request tracking
5 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
6 cfa37a7b 2004-04-10 devnull .ft L
7 cfa37a7b 2004-04-10 devnull .nf
8 cfa37a7b 2004-04-10 devnull #include <u.h>
9 cfa37a7b 2004-04-10 devnull #include <libc.h>
10 cfa37a7b 2004-04-10 devnull #include <fcall.h>
11 cfa37a7b 2004-04-10 devnull #include <thread.h>
12 cfa37a7b 2004-04-10 devnull #include <9p.h>
13 cfa37a7b 2004-04-10 devnull .fi
14 cfa37a7b 2004-04-10 devnull .PP
15 cfa37a7b 2004-04-10 devnull .ft L
16 cfa37a7b 2004-04-10 devnull .nf
17 cfa37a7b 2004-04-10 devnull .ta \w'\fL 'u +\w'\fLulong 'u
18 cfa37a7b 2004-04-10 devnull typedef struct Fid
19 cfa37a7b 2004-04-10 devnull {
20 cfa37a7b 2004-04-10 devnull ulong fid;
21 cfa37a7b 2004-04-10 devnull char omode; /* -1 if not open */
22 cfa37a7b 2004-04-10 devnull char *uid;
23 cfa37a7b 2004-04-10 devnull Qid qid;
24 cfa37a7b 2004-04-10 devnull File *file;
25 cfa37a7b 2004-04-10 devnull void *aux;
26 cfa37a7b 2004-04-10 devnull \fI...\fP
27 cfa37a7b 2004-04-10 devnull } Fid;
28 cfa37a7b 2004-04-10 devnull .fi
29 cfa37a7b 2004-04-10 devnull .PP
30 cfa37a7b 2004-04-10 devnull .ft L
31 cfa37a7b 2004-04-10 devnull .nf
32 cfa37a7b 2004-04-10 devnull .ta \w'\fL 'u +\w'\fLulong 'u
33 cfa37a7b 2004-04-10 devnull typedef struct Req
34 cfa37a7b 2004-04-10 devnull {
35 cfa37a7b 2004-04-10 devnull ulong tag;
36 cfa37a7b 2004-04-10 devnull Fcall ifcall;
37 cfa37a7b 2004-04-10 devnull Fcall ofcall;
38 cfa37a7b 2004-04-10 devnull Req *oldreq;
39 cfa37a7b 2004-04-10 devnull void *aux;
40 cfa37a7b 2004-04-10 devnull \fI...\fP
41 cfa37a7b 2004-04-10 devnull } Req;
42 cfa37a7b 2004-04-10 devnull .fi
43 cfa37a7b 2004-04-10 devnull .PP
44 cfa37a7b 2004-04-10 devnull .ft L
45 cfa37a7b 2004-04-10 devnull .nf
46 cfa37a7b 2004-04-10 devnull .ta \w'\fLFidpool* 'u
47 cfa37a7b 2004-04-10 devnull Fidpool* allocfidpool(void (*destroy)(Fid*))
48 cfa37a7b 2004-04-10 devnull void freefidpool(Fidpool *p)
49 cfa37a7b 2004-04-10 devnull Fid* allocfid(Fidpool *p, ulong fid)
50 cfa37a7b 2004-04-10 devnull Fid* lookupfid(Fidpool *p, ulong fid)
51 cfa37a7b 2004-04-10 devnull void closefid(Fid *f)
52 cfa37a7b 2004-04-10 devnull void removefid(Fid *f)
53 cfa37a7b 2004-04-10 devnull .fi
54 cfa37a7b 2004-04-10 devnull .PP
55 cfa37a7b 2004-04-10 devnull .ft L
56 cfa37a7b 2004-04-10 devnull .nf
57 cfa37a7b 2004-04-10 devnull .ta \w'\fLReqpool* 'u
58 cfa37a7b 2004-04-10 devnull Reqpool* allocreqpool(void (*destroy)(Req*))
59 cfa37a7b 2004-04-10 devnull void freereqpool(Reqpool *p)
60 cfa37a7b 2004-04-10 devnull Req* allocreq(Reqpool *p, ulong tag)
61 cfa37a7b 2004-04-10 devnull Req* lookupreq(Reqpool *p, ulong tag)
62 cfa37a7b 2004-04-10 devnull void closereq(Req *f)
63 cfa37a7b 2004-04-10 devnull void removereq(Req *r)
64 cfa37a7b 2004-04-10 devnull .fi
65 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
66 cfa37a7b 2004-04-10 devnull These routines provide management of
67 cfa37a7b 2004-04-10 devnull .B Fid
68 cfa37a7b 2004-04-10 devnull and
69 cfa37a7b 2004-04-10 devnull .B Req
70 cfa37a7b 2004-04-10 devnull structures from
71 cfa37a7b 2004-04-10 devnull .BR Fidpool s
72 cfa37a7b 2004-04-10 devnull and
73 cfa37a7b 2004-04-10 devnull .BR Reqpool s.
74 cfa37a7b 2004-04-10 devnull They are primarily used by the 9P server loop
75 cfa37a7b 2004-04-10 devnull described in
76 bf8a59fa 2004-04-11 devnull .IR 9p (3).
77 cfa37a7b 2004-04-10 devnull .PP
78 cfa37a7b 2004-04-10 devnull .B Fid
79 cfa37a7b 2004-04-10 devnull structures are intended to represent
80 cfa37a7b 2004-04-10 devnull active fids in a 9P connection, as
81 cfa37a7b 2004-04-10 devnull .B Chan
82 cfa37a7b 2004-04-10 devnull structures do in the Plan 9 kernel.
83 cfa37a7b 2004-04-10 devnull The
84 cfa37a7b 2004-04-10 devnull .B fid
85 cfa37a7b 2004-04-10 devnull element is the integer fid used in the 9P
86 cfa37a7b 2004-04-10 devnull connection.
87 cfa37a7b 2004-04-10 devnull .B Omode
88 cfa37a7b 2004-04-10 devnull is the mode under which the fid was opened, or
89 cfa37a7b 2004-04-10 devnull .B -1
90 cfa37a7b 2004-04-10 devnull if this fid has not been opened yet.
91 cfa37a7b 2004-04-10 devnull Note that in addition to the values
92 cfa37a7b 2004-04-10 devnull .BR OREAD ,
93 cfa37a7b 2004-04-10 devnull .BR OWRITE ,
94 cfa37a7b 2004-04-10 devnull and
95 cfa37a7b 2004-04-10 devnull .BR ORDWR ,
96 cfa37a7b 2004-04-10 devnull .B omode
97 cfa37a7b 2004-04-10 devnull can contain the various flags permissible in
98 cfa37a7b 2004-04-10 devnull an open call.
99 cfa37a7b 2004-04-10 devnull To ignore the flags, use
100 cfa37a7b 2004-04-10 devnull .BR omode&OMASK .
101 cfa37a7b 2004-04-10 devnull .B Omode
102 cfa37a7b 2004-04-10 devnull should not be changed by the client.
103 cfa37a7b 2004-04-10 devnull The fid derives from a successful authentication by
104 cfa37a7b 2004-04-10 devnull .BR uid .
105 cfa37a7b 2004-04-10 devnull .B Qid
106 cfa37a7b 2004-04-10 devnull contains the qid returned in the last successful
107 cfa37a7b 2004-04-10 devnull .B walk
108 cfa37a7b 2004-04-10 devnull or
109 cfa37a7b 2004-04-10 devnull .B create
110 cfa37a7b 2004-04-10 devnull transaction involving the fid.
111 cfa37a7b 2004-04-10 devnull In a file tree-based server, the
112 cfa37a7b 2004-04-10 devnull .BR Fid 's
113 cfa37a7b 2004-04-10 devnull .B file
114 cfa37a7b 2004-04-10 devnull element points at a
115 cfa37a7b 2004-04-10 devnull .B File
116 cfa37a7b 2004-04-10 devnull structure
117 cfa37a7b 2004-04-10 devnull (see
118 bf8a59fa 2004-04-11 devnull .IR 9pfile (3))
119 cfa37a7b 2004-04-10 devnull corresponding to the fid.
120 cfa37a7b 2004-04-10 devnull The
121 cfa37a7b 2004-04-10 devnull .B aux
122 cfa37a7b 2004-04-10 devnull member is intended for use by the
123 cfa37a7b 2004-04-10 devnull client to hold information specific to a particular
124 cfa37a7b 2004-04-10 devnull .BR Fid .
125 cfa37a7b 2004-04-10 devnull With the exception of
126 cfa37a7b 2004-04-10 devnull .BR aux ,
127 cfa37a7b 2004-04-10 devnull these elements should be treated
128 cfa37a7b 2004-04-10 devnull as read-only by the client.
129 cfa37a7b 2004-04-10 devnull .PP
130 cfa37a7b 2004-04-10 devnull .I Allocfidpool
131 cfa37a7b 2004-04-10 devnull creates a new
132 cfa37a7b 2004-04-10 devnull .BR Fidpool .
133 cfa37a7b 2004-04-10 devnull .I Freefidpool
134 cfa37a7b 2004-04-10 devnull destroys such a pool.
135 cfa37a7b 2004-04-10 devnull .I Allocfid
136 cfa37a7b 2004-04-10 devnull returns a new
137 cfa37a7b 2004-04-10 devnull .B Fid
138 cfa37a7b 2004-04-10 devnull whose fid number is
139 cfa37a7b 2004-04-10 devnull .IR fid .
140 cfa37a7b 2004-04-10 devnull There must not already be an extant
141 cfa37a7b 2004-04-10 devnull .B Fid
142 cfa37a7b 2004-04-10 devnull with that number in the pool.
143 cfa37a7b 2004-04-10 devnull Once a
144 cfa37a7b 2004-04-10 devnull .B Fid
145 cfa37a7b 2004-04-10 devnull has been allocated, it can be looked up by
146 cfa37a7b 2004-04-10 devnull fid number using
147 cfa37a7b 2004-04-10 devnull .IR lookupfid .
148 cfa37a7b 2004-04-10 devnull .BR Fid s
149 cfa37a7b 2004-04-10 devnull are reference counted: both
150 cfa37a7b 2004-04-10 devnull .I allocfid
151 cfa37a7b 2004-04-10 devnull and
152 cfa37a7b 2004-04-10 devnull .I lookupfid
153 cfa37a7b 2004-04-10 devnull increment the reference count on the
154 cfa37a7b 2004-04-10 devnull .B Fid
155 cfa37a7b 2004-04-10 devnull structure before
156 cfa37a7b 2004-04-10 devnull returning.
157 cfa37a7b 2004-04-10 devnull When a reference to a
158 cfa37a7b 2004-04-10 devnull .B Fid
159 cfa37a7b 2004-04-10 devnull is no longer needed,
160 cfa37a7b 2004-04-10 devnull .I closefid
161 cfa37a7b 2004-04-10 devnull should be called to note the destruction of the reference.
162 cfa37a7b 2004-04-10 devnull When the last reference to a
163 cfa37a7b 2004-04-10 devnull .B Fid
164 cfa37a7b 2004-04-10 devnull is removed, if
165 cfa37a7b 2004-04-10 devnull .I destroy
166 cfa37a7b 2004-04-10 devnull (supplied when creating the fid pool)
167 cfa37a7b 2004-04-10 devnull is not zero, it is called with the
168 cfa37a7b 2004-04-10 devnull .B Fid
169 cfa37a7b 2004-04-10 devnull as a parameter.
170 cfa37a7b 2004-04-10 devnull It should perform whatever cleanup is necessary
171 cfa37a7b 2004-04-10 devnull regarding the
172 cfa37a7b 2004-04-10 devnull .B aux
173 cfa37a7b 2004-04-10 devnull element.
174 cfa37a7b 2004-04-10 devnull .I Removefid
175 cfa37a7b 2004-04-10 devnull is equivalent to
176 cfa37a7b 2004-04-10 devnull .I closefid
177 cfa37a7b 2004-04-10 devnull but also removes the
178 cfa37a7b 2004-04-10 devnull .B Fid
179 cfa37a7b 2004-04-10 devnull from the pool.
180 cfa37a7b 2004-04-10 devnull Note that due to lingering references,
181 cfa37a7b 2004-04-10 devnull the return of
182 cfa37a7b 2004-04-10 devnull .I removefid
183 cfa37a7b 2004-04-10 devnull may not mean that
184 cfa37a7b 2004-04-10 devnull .I destroy
185 cfa37a7b 2004-04-10 devnull has been called.
186 cfa37a7b 2004-04-10 devnull .PP
187 cfa37a7b 2004-04-10 devnull .IR Allocreqpool ,
188 cfa37a7b 2004-04-10 devnull .IR freereqpool ,
189 cfa37a7b 2004-04-10 devnull .IR allocreq ,
190 cfa37a7b 2004-04-10 devnull .IR lookupreq ,
191 cfa37a7b 2004-04-10 devnull .IR closereq ,
192 cfa37a7b 2004-04-10 devnull and
193 cfa37a7b 2004-04-10 devnull .I removereq
194 cfa37a7b 2004-04-10 devnull are analogous but
195 cfa37a7b 2004-04-10 devnull operate on
196 cfa37a7b 2004-04-10 devnull .BR Reqpool s
197 cfa37a7b 2004-04-10 devnull and
198 cfa37a7b 2004-04-10 devnull .B Req
199 cfa37a7b 2004-04-10 devnull structures.
200 cfa37a7b 2004-04-10 devnull .SH SOURCE
201 c3674de4 2005-01-11 devnull .B \*9/src/lib9p
202 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
203 bf8a59fa 2004-04-11 devnull .IR 9p (3),
204 bf8a59fa 2004-04-11 devnull .IR 9pfile (3)