Blame


1 be7cbb4e 2005-07-12 devnull .TH VENTI-FILE 3
2 be7cbb4e 2005-07-12 devnull .SH NAME
3 be7cbb4e 2005-07-12 devnull VtFile,
4 be7cbb4e 2005-07-12 devnull vtfileblock,
5 be7cbb4e 2005-07-12 devnull vtfileblockscore,
6 3aec33fe 2005-07-18 devnull vtfileclose,
7 3aec33fe 2005-07-18 devnull vtfilecreate,
8 3aec33fe 2005-07-18 devnull vtfilecreateroot,
9 3aec33fe 2005-07-18 devnull vtfileflush,
10 3aec33fe 2005-07-18 devnull vtfileflushbefore,
11 be7cbb4e 2005-07-12 devnull vtfilegetdirsize,
12 3aec33fe 2005-07-18 devnull vtfilegetentry,
13 3aec33fe 2005-07-18 devnull vtfilegetsize,
14 3aec33fe 2005-07-18 devnull vtfileincref,
15 be7cbb4e 2005-07-12 devnull vtfilelock,
16 be7cbb4e 2005-07-12 devnull vtfilelock2,
17 3aec33fe 2005-07-18 devnull vtfileopen,
18 3aec33fe 2005-07-18 devnull vtfileopenroot,
19 3aec33fe 2005-07-18 devnull vtfileread,
20 3aec33fe 2005-07-18 devnull vtfileremove,
21 3aec33fe 2005-07-18 devnull vtfilesetdirsize,
22 3aec33fe 2005-07-18 devnull vtfilesetentry,
23 be7cbb4e 2005-07-12 devnull vtfilesetsize,
24 3aec33fe 2005-07-18 devnull vtfiletruncate,
25 3aec33fe 2005-07-18 devnull vtfileunlock,
26 3aec33fe 2005-07-18 devnull vtfilewrite \- Venti files
27 be7cbb4e 2005-07-12 devnull .SH SYNOPSIS
28 be7cbb4e 2005-07-12 devnull .ta +\w'\fLVtBlock* 'u
29 be7cbb4e 2005-07-12 devnull .PP
30 be7cbb4e 2005-07-12 devnull .B
31 be7cbb4e 2005-07-12 devnull VtFile* vtfilecreateroot(VtCache *c, int psize, int dsize, int type);
32 be7cbb4e 2005-07-12 devnull .PP
33 be7cbb4e 2005-07-12 devnull .B
34 be7cbb4e 2005-07-12 devnull VtFile* vtfileopenroot(VtCache *c, VtEntry *e);
35 be7cbb4e 2005-07-12 devnull .PP
36 be7cbb4e 2005-07-12 devnull .B
37 be7cbb4e 2005-07-12 devnull VtFile* vtfileopen(VtFile *f, u32int n, int mode);
38 be7cbb4e 2005-07-12 devnull .PP
39 be7cbb4e 2005-07-12 devnull .B
40 86a1a5e7 2005-07-19 devnull VtFile* vtfilecreate(VtFile *f, int psize, int dsize, int type);
41 be7cbb4e 2005-07-12 devnull .PP
42 be7cbb4e 2005-07-12 devnull .B
43 be7cbb4e 2005-07-12 devnull void vtfileincref(VtFile *f);
44 be7cbb4e 2005-07-12 devnull .PP
45 be7cbb4e 2005-07-12 devnull .B
46 be7cbb4e 2005-07-12 devnull void vtfileclose(VtFile *f);
47 be7cbb4e 2005-07-12 devnull .PP
48 be7cbb4e 2005-07-12 devnull .B
49 be7cbb4e 2005-07-12 devnull int vtfileremove(VtFile *f);
50 be7cbb4e 2005-07-12 devnull .PP
51 be7cbb4e 2005-07-12 devnull .B
52 be7cbb4e 2005-07-12 devnull VtBlock* vtfileblock(VtFile *f, u32int n, int mode);
53 be7cbb4e 2005-07-12 devnull .PP
54 be7cbb4e 2005-07-12 devnull .B
55 be7cbb4e 2005-07-12 devnull long vtfileread(VtFile *f, void *buf, long n, vlong offset);
56 be7cbb4e 2005-07-12 devnull .PP
57 be7cbb4e 2005-07-12 devnull .B
58 be7cbb4e 2005-07-12 devnull long vtfilewrite(VtFile *f, void *buf, long n, vlong offset);
59 be7cbb4e 2005-07-12 devnull .PP
60 be7cbb4e 2005-07-12 devnull .B
61 be7cbb4e 2005-07-12 devnull int vtfileflush(VtFile *f);
62 be7cbb4e 2005-07-12 devnull .PP
63 be7cbb4e 2005-07-12 devnull .B
64 be7cbb4e 2005-07-12 devnull int vtfileflushbefore(VtFile *f, vlong offset);
65 be7cbb4e 2005-07-12 devnull .PP
66 be7cbb4e 2005-07-12 devnull .B
67 be7cbb4e 2005-07-12 devnull int vtfiletruncate(VtFile *f);
68 be7cbb4e 2005-07-12 devnull .PP
69 be7cbb4e 2005-07-12 devnull .B
70 be7cbb4e 2005-07-12 devnull uvlong vtfilegetsize(VtFile *f);
71 be7cbb4e 2005-07-12 devnull .PP
72 be7cbb4e 2005-07-12 devnull .B
73 be7cbb4e 2005-07-12 devnull int vtfilesetsize(VtFile *f, vlong size);
74 be7cbb4e 2005-07-12 devnull .PP
75 be7cbb4e 2005-07-12 devnull .B
76 be7cbb4e 2005-07-12 devnull u32int vtfilegetdirsize(VtFile *f);
77 be7cbb4e 2005-07-12 devnull .PP
78 be7cbb4e 2005-07-12 devnull .B
79 be7cbb4e 2005-07-12 devnull int vtfilesetdirsize(VtFile *f, u32int size);
80 be7cbb4e 2005-07-12 devnull .PP
81 be7cbb4e 2005-07-12 devnull .B
82 be7cbb4e 2005-07-12 devnull int vtfilegetentry(VtFile *f, VtEntry *e);
83 be7cbb4e 2005-07-12 devnull .PP
84 be7cbb4e 2005-07-12 devnull .B
85 be7cbb4e 2005-07-12 devnull int vtfilesetentry(VtFile *f, VtEntry *e);
86 be7cbb4e 2005-07-12 devnull .PP
87 be7cbb4e 2005-07-12 devnull .B
88 3aec33fe 2005-07-18 devnull int vtfileblockscore(VtFile *f, u32int n,
89 3aec33fe 2005-07-18 devnull uchar score[VtScoreSize]);
90 be7cbb4e 2005-07-12 devnull .PP
91 be7cbb4e 2005-07-12 devnull .B
92 be7cbb4e 2005-07-12 devnull int vtfilelock(VtFile *f, int mode);
93 be7cbb4e 2005-07-12 devnull .PP
94 be7cbb4e 2005-07-12 devnull .B
95 be7cbb4e 2005-07-12 devnull int vtfilelock2(VtFile *f, VtFile *f, int mode);
96 be7cbb4e 2005-07-12 devnull .PP
97 be7cbb4e 2005-07-12 devnull .B
98 be7cbb4e 2005-07-12 devnull void vtfileunlock(VtFile *f);
99 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
100 be7cbb4e 2005-07-12 devnull These routines provide a simple interface to create and
101 be7cbb4e 2005-07-12 devnull manipulate Venti file trees (see
102 d32deab1 2020-08-16 rsc .MR venti (7) ).
103 be7cbb4e 2005-07-12 devnull .PP
104 be7cbb4e 2005-07-12 devnull .I Vtfilecreateroot
105 be7cbb4e 2005-07-12 devnull creates a new Venti file.
106 3aec33fe 2005-07-18 devnull .I Type
107 be7cbb4e 2005-07-12 devnull must be either
108 be7cbb4e 2005-07-12 devnull .B VtDataType
109 be7cbb4e 2005-07-12 devnull or
110 be7cbb4e 2005-07-12 devnull .BR VtDirType ,
111 be7cbb4e 2005-07-12 devnull specifying a data or directory file.
112 be7cbb4e 2005-07-12 devnull .I Dsize
113 be7cbb4e 2005-07-12 devnull is the block size to use for leaf (data or directory) blocks in the hash tree;
114 be7cbb4e 2005-07-12 devnull .I psize
115 3aec33fe 2005-07-18 devnull is the block size to use for internal (pointer) blocks.
116 be7cbb4e 2005-07-12 devnull .PP
117 be7cbb4e 2005-07-12 devnull .I Vtfileopenroot
118 be7cbb4e 2005-07-12 devnull opens an existing Venti file described by
119 be7cbb4e 2005-07-12 devnull .IR e .
120 be7cbb4e 2005-07-12 devnull .PP
121 be7cbb4e 2005-07-12 devnull .I Vtfileopen
122 be7cbb4e 2005-07-12 devnull opens the Venti file described by the
123 be7cbb4e 2005-07-12 devnull .IR n th
124 be7cbb4e 2005-07-12 devnull entry in the directory
125 be7cbb4e 2005-07-12 devnull .IR f .
126 be7cbb4e 2005-07-12 devnull .I Mode
127 be7cbb4e 2005-07-12 devnull should be one of
128 3aec33fe 2005-07-18 devnull .BR VtOREAD ,
129 3aec33fe 2005-07-18 devnull .BR VtOWRITE ,
130 be7cbb4e 2005-07-12 devnull or
131 3aec33fe 2005-07-18 devnull .BR VtORDWR ,
132 be7cbb4e 2005-07-12 devnull indicating how the returned file is to be used.
133 be7cbb4e 2005-07-12 devnull The
134 3aec33fe 2005-07-18 devnull .BR VtOWRITE
135 be7cbb4e 2005-07-12 devnull and
136 3aec33fe 2005-07-18 devnull .BR VtORDWR
137 be7cbb4e 2005-07-12 devnull modes can only be used if
138 be7cbb4e 2005-07-12 devnull .IR f
139 be7cbb4e 2005-07-12 devnull is open with mode
140 3aec33fe 2005-07-18 devnull .BR VtORDWR .
141 be7cbb4e 2005-07-12 devnull .PP
142 be7cbb4e 2005-07-12 devnull .I Vtfilecreate
143 be7cbb4e 2005-07-12 devnull creates a new file in the directory
144 be7cbb4e 2005-07-12 devnull .I f
145 be7cbb4e 2005-07-12 devnull with block type
146 be7cbb4e 2005-07-12 devnull .I type
147 be7cbb4e 2005-07-12 devnull and block sizes
148 be7cbb4e 2005-07-12 devnull .I dsize
149 be7cbb4e 2005-07-12 devnull and
150 be7cbb4e 2005-07-12 devnull .I psize
151 be7cbb4e 2005-07-12 devnull (see
152 be7cbb4e 2005-07-12 devnull .I vtfilecreateroot
153 be7cbb4e 2005-07-12 devnull above).
154 be7cbb4e 2005-07-12 devnull .PP
155 be7cbb4e 2005-07-12 devnull Each file has an associated reference count
156 be7cbb4e 2005-07-12 devnull and holds a reference to its parent in the file tree.
157 be7cbb4e 2005-07-12 devnull .I Vtfileincref
158 be7cbb4e 2005-07-12 devnull increments this reference count.
159 be7cbb4e 2005-07-12 devnull .I Vtfileclose
160 be7cbb4e 2005-07-12 devnull decrements the reference count.
161 be7cbb4e 2005-07-12 devnull If there are no other references,
162 be7cbb4e 2005-07-12 devnull .I vtfileclose
163 be7cbb4e 2005-07-12 devnull releases the reference to
164 be7cbb4e 2005-07-12 devnull .IR f 's
165 be7cbb4e 2005-07-12 devnull parent and then frees the in-memory structure
166 be7cbb4e 2005-07-12 devnull .IR f .
167 be7cbb4e 2005-07-12 devnull The data stored in
168 be7cbb4e 2005-07-12 devnull .I f
169 be7cbb4e 2005-07-12 devnull is still accessible by reopening it.
170 be7cbb4e 2005-07-12 devnull .PP
171 be7cbb4e 2005-07-12 devnull .I Vtfileremove
172 be7cbb4e 2005-07-12 devnull removes the file
173 be7cbb4e 2005-07-12 devnull .I f
174 be7cbb4e 2005-07-12 devnull from its parent directory.
175 be7cbb4e 2005-07-12 devnull It also acts as
176 be7cbb4e 2005-07-12 devnull .IR vtfileclose ,
177 be7cbb4e 2005-07-12 devnull releasing the reference to
178 be7cbb4e 2005-07-12 devnull .I f
179 be7cbb4e 2005-07-12 devnull and potentially freeing the structure.
180 be7cbb4e 2005-07-12 devnull .PP
181 be7cbb4e 2005-07-12 devnull .I Vtfileblock
182 be7cbb4e 2005-07-12 devnull returns the
183 be7cbb4e 2005-07-12 devnull .IR n th
184 be7cbb4e 2005-07-12 devnull block in the file
185 be7cbb4e 2005-07-12 devnull .IR f .
186 be7cbb4e 2005-07-12 devnull If there are not
187 be7cbb4e 2005-07-12 devnull .I n
188 be7cbb4e 2005-07-12 devnull blocks in the file and
189 be7cbb4e 2005-07-12 devnull .I mode
190 be7cbb4e 2005-07-12 devnull is
191 be7cbb4e 2005-07-12 devnull .BR VtOREAD ,
192 be7cbb4e 2005-07-12 devnull .I vtfileblock
193 be7cbb4e 2005-07-12 devnull returns nil.
194 be7cbb4e 2005-07-12 devnull If the mode is
195 be7cbb4e 2005-07-12 devnull .B VtOWRITE
196 be7cbb4e 2005-07-12 devnull or
197 be7cbb4e 2005-07-12 devnull .BR VtORDWR ,
198 be7cbb4e 2005-07-12 devnull .I vtfileblock
199 be7cbb4e 2005-07-12 devnull grows the file as needed and then returns the block.
200 be7cbb4e 2005-07-12 devnull .PP
201 be7cbb4e 2005-07-12 devnull .I Vtfileread
202 be7cbb4e 2005-07-12 devnull reads at most
203 be7cbb4e 2005-07-12 devnull .I n
204 be7cbb4e 2005-07-12 devnull bytes at offset
205 be7cbb4e 2005-07-12 devnull .I offset
206 be7cbb4e 2005-07-12 devnull from
207 be7cbb4e 2005-07-12 devnull .I f
208 be7cbb4e 2005-07-12 devnull into memory at
209 be7cbb4e 2005-07-12 devnull .IR buf .
210 be7cbb4e 2005-07-12 devnull It returns the number of bytes read.
211 be7cbb4e 2005-07-12 devnull .PP
212 be7cbb4e 2005-07-12 devnull .I Vtfilewrite
213 be7cbb4e 2005-07-12 devnull writes the
214 be7cbb4e 2005-07-12 devnull .I n
215 be7cbb4e 2005-07-12 devnull bytes in memory at
216 be7cbb4e 2005-07-12 devnull .I buf
217 be7cbb4e 2005-07-12 devnull into the file
218 be7cbb4e 2005-07-12 devnull .I f
219 be7cbb4e 2005-07-12 devnull at offset
220 be7cbb4e 2005-07-12 devnull .IR n .
221 be7cbb4e 2005-07-12 devnull It returns the number of bytes written,
222 be7cbb4e 2005-07-12 devnull or \-1 on error.
223 be7cbb4e 2005-07-12 devnull Writing fewer bytes than requested will only happen
224 be7cbb4e 2005-07-12 devnull if an error is encountered.
225 be7cbb4e 2005-07-12 devnull .PP
226 be7cbb4e 2005-07-12 devnull .I Vtfilewrite
227 be7cbb4e 2005-07-12 devnull writes to an in-memory copy of the data blocks
228 be7cbb4e 2005-07-12 devnull (see
229 d32deab1 2020-08-16 rsc .MR venti-cache (3) )
230 be7cbb4e 2005-07-12 devnull instead of writing directly to Venti.
231 be7cbb4e 2005-07-12 devnull .I Vtfileflush
232 be7cbb4e 2005-07-12 devnull writes all copied blocks associated with
233 be7cbb4e 2005-07-12 devnull .I f
234 be7cbb4e 2005-07-12 devnull to the Venti server.
235 be7cbb4e 2005-07-12 devnull .I Vtfileflushbefore
236 be7cbb4e 2005-07-12 devnull flushes only those blocks corresponding to data in the file before
237 be7cbb4e 2005-07-12 devnull byte
238 be7cbb4e 2005-07-12 devnull .IR offset .
239 be7cbb4e 2005-07-12 devnull Loops that
240 be7cbb4e 2005-07-12 devnull .I vtfilewrite
241 be7cbb4e 2005-07-12 devnull should call
242 be7cbb4e 2005-07-12 devnull .I vtfileflushbefore
243 3aec33fe 2005-07-18 devnull regularly to avoid filling the block cache with unwritten blocks.
244 be7cbb4e 2005-07-12 devnull .PP
245 be7cbb4e 2005-07-12 devnull .I Vtfiletruncate
246 be7cbb4e 2005-07-12 devnull changes the file
247 be7cbb4e 2005-07-12 devnull .I f
248 be7cbb4e 2005-07-12 devnull to have zero length.
249 be7cbb4e 2005-07-12 devnull .PP
250 be7cbb4e 2005-07-12 devnull .I Vtfilegetsize
251 be7cbb4e 2005-07-12 devnull returns the length (in bytes) of file
252 be7cbb4e 2005-07-12 devnull .IR f .
253 be7cbb4e 2005-07-12 devnull .PP
254 be7cbb4e 2005-07-12 devnull .I Vtfilesetsize
255 be7cbb4e 2005-07-12 devnull sets the length (in bytes) of file
256 be7cbb4e 2005-07-12 devnull .IR f .
257 be7cbb4e 2005-07-12 devnull .PP
258 be7cbb4e 2005-07-12 devnull .I Vtfilegetdirsize
259 be7cbb4e 2005-07-12 devnull returns the length (in directory entries)
260 be7cbb4e 2005-07-12 devnull of the directory
261 be7cbb4e 2005-07-12 devnull .IR f .
262 be7cbb4e 2005-07-12 devnull .PP
263 be7cbb4e 2005-07-12 devnull .I Vtfilesetdirsize
264 be7cbb4e 2005-07-12 devnull sets the length (in directory entries)
265 be7cbb4e 2005-07-12 devnull of the directory
266 be7cbb4e 2005-07-12 devnull .IR f .
267 be7cbb4e 2005-07-12 devnull .PP
268 be7cbb4e 2005-07-12 devnull .I Vtfilegetentry
269 be7cbb4e 2005-07-12 devnull fills
270 be7cbb4e 2005-07-12 devnull .I e
271 be7cbb4e 2005-07-12 devnull with an entry that can be passed to
272 be7cbb4e 2005-07-12 devnull .IR vtfileopenroot
273 be7cbb4e 2005-07-12 devnull to reopen
274 be7cbb4e 2005-07-12 devnull .I f
275 be7cbb4e 2005-07-12 devnull at a later time.
276 be7cbb4e 2005-07-12 devnull .PP
277 be7cbb4e 2005-07-12 devnull .I Vtfilesetentry
278 be7cbb4e 2005-07-12 devnull sets the entry associated with
279 be7cbb4e 2005-07-12 devnull .I f
280 be7cbb4e 2005-07-12 devnull to be
281 be7cbb4e 2005-07-12 devnull .IR e .
282 be7cbb4e 2005-07-12 devnull .PP
283 be7cbb4e 2005-07-12 devnull .I Vtfileblockscore
284 be7cbb4e 2005-07-12 devnull returns in
285 be7cbb4e 2005-07-12 devnull .I score
286 be7cbb4e 2005-07-12 devnull the score of the
287 3aec33fe 2005-07-18 devnull .IR n th
288 be7cbb4e 2005-07-12 devnull block in the file
289 be7cbb4e 2005-07-12 devnull .IR f .
290 be7cbb4e 2005-07-12 devnull .PP
291 be7cbb4e 2005-07-12 devnull Venti files are locked and unlocked
292 be7cbb4e 2005-07-12 devnull via
293 be7cbb4e 2005-07-12 devnull .I vtfilelock
294 be7cbb4e 2005-07-12 devnull and
295 be7cbb4e 2005-07-12 devnull .I vtfileunlock
296 be7cbb4e 2005-07-12 devnull to moderate concurrent access.
297 be7cbb4e 2005-07-12 devnull Only one thread at a time\(emthe one that has the file locked\(emcan
298 be7cbb4e 2005-07-12 devnull read or modify the file.
299 be7cbb4e 2005-07-12 devnull The functions that return files
300 be7cbb4e 2005-07-12 devnull .RI ( vtfilecreateroot ,
301 be7cbb4e 2005-07-12 devnull .IR vtfileopenroot ,
302 be7cbb4e 2005-07-12 devnull .IR vtfilecreate ,
303 be7cbb4e 2005-07-12 devnull and
304 be7cbb4e 2005-07-12 devnull .IR vtfileopen )
305 be7cbb4e 2005-07-12 devnull return them unlocked.
306 be7cbb4e 2005-07-12 devnull When files are passed to any of the functions documented in
307 be7cbb4e 2005-07-12 devnull this manual page, it is the caller's responsibility to ensure that
308 be7cbb4e 2005-07-12 devnull they are already locked.
309 be7cbb4e 2005-07-12 devnull .PP
310 be7cbb4e 2005-07-12 devnull Internally, a file is locked by locking the
311 be7cbb4e 2005-07-12 devnull block that contains its directory entry.
312 be7cbb4e 2005-07-12 devnull When two files in the same
313 be7cbb4e 2005-07-12 devnull directory both need to be locked,
314 be7cbb4e 2005-07-12 devnull .I vtfilelock2
315 be7cbb4e 2005-07-12 devnull must be used.
316 be7cbb4e 2005-07-12 devnull It locks both its arguments, taking special care
317 be7cbb4e 2005-07-12 devnull not to deadlock if their entries are stored
318 be7cbb4e 2005-07-12 devnull in the same directory block.
319 be7cbb4e 2005-07-12 devnull .SH SOURCE
320 be7cbb4e 2005-07-12 devnull .B \*9/src/libventi/file.c
321 be7cbb4e 2005-07-12 devnull .SH SEE ALSO
322 d32deab1 2020-08-16 rsc .MR venti-cache (3) ,
323 d32deab1 2020-08-16 rsc .MR venti-conn (3) ,
324 d32deab1 2020-08-16 rsc .MR venti-client (3) ,
325 d32deab1 2020-08-16 rsc .MR venti (7)