1 be7cbb4e 2005-07-12 devnull .TH VENTI-FILE 3
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
31 be7cbb4e 2005-07-12 devnull VtFile* vtfilecreateroot(VtCache *c, int psize, int dsize, int type);
34 be7cbb4e 2005-07-12 devnull VtFile* vtfileopenroot(VtCache *c, VtEntry *e);
37 be7cbb4e 2005-07-12 devnull VtFile* vtfileopen(VtFile *f, u32int n, int mode);
40 86a1a5e7 2005-07-19 devnull VtFile* vtfilecreate(VtFile *f, int psize, int dsize, int type);
43 be7cbb4e 2005-07-12 devnull void vtfileincref(VtFile *f);
46 be7cbb4e 2005-07-12 devnull void vtfileclose(VtFile *f);
49 be7cbb4e 2005-07-12 devnull int vtfileremove(VtFile *f);
52 be7cbb4e 2005-07-12 devnull VtBlock* vtfileblock(VtFile *f, u32int n, int mode);
55 be7cbb4e 2005-07-12 devnull long vtfileread(VtFile *f, void *buf, long n, vlong offset);
58 be7cbb4e 2005-07-12 devnull long vtfilewrite(VtFile *f, void *buf, long n, vlong offset);
61 be7cbb4e 2005-07-12 devnull int vtfileflush(VtFile *f);
64 be7cbb4e 2005-07-12 devnull int vtfileflushbefore(VtFile *f, vlong offset);
67 be7cbb4e 2005-07-12 devnull int vtfiletruncate(VtFile *f);
70 be7cbb4e 2005-07-12 devnull uvlong vtfilegetsize(VtFile *f);
73 be7cbb4e 2005-07-12 devnull int vtfilesetsize(VtFile *f, vlong size);
76 be7cbb4e 2005-07-12 devnull u32int vtfilegetdirsize(VtFile *f);
79 be7cbb4e 2005-07-12 devnull int vtfilesetdirsize(VtFile *f, u32int size);
82 be7cbb4e 2005-07-12 devnull int vtfilegetentry(VtFile *f, VtEntry *e);
85 be7cbb4e 2005-07-12 devnull int vtfilesetentry(VtFile *f, VtEntry *e);
88 3aec33fe 2005-07-18 devnull int vtfileblockscore(VtFile *f, u32int n,
89 3aec33fe 2005-07-18 devnull uchar score[VtScoreSize]);
92 be7cbb4e 2005-07-12 devnull int vtfilelock(VtFile *f, int mode);
95 be7cbb4e 2005-07-12 devnull int vtfilelock2(VtFile *f, VtFile *f, int mode);
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 3aec33fe 2005-07-18 devnull .IR venti (7)).
104 be7cbb4e 2005-07-12 devnull .I Vtfilecreateroot
105 be7cbb4e 2005-07-12 devnull creates a new Venti file.
107 be7cbb4e 2005-07-12 devnull must be either
108 be7cbb4e 2005-07-12 devnull .B VtDataType
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.
117 be7cbb4e 2005-07-12 devnull .I Vtfileopenroot
118 be7cbb4e 2005-07-12 devnull opens an existing Venti file described by
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
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 ,
131 3aec33fe 2005-07-18 devnull .BR VtORDWR ,
132 be7cbb4e 2005-07-12 devnull indicating how the returned file is to be used.
134 3aec33fe 2005-07-18 devnull .BR VtOWRITE
136 3aec33fe 2005-07-18 devnull .BR VtORDWR
137 be7cbb4e 2005-07-12 devnull modes can only be used if
139 be7cbb4e 2005-07-12 devnull is open with mode
140 3aec33fe 2005-07-18 devnull .BR VtORDWR .
142 be7cbb4e 2005-07-12 devnull .I Vtfilecreate
143 be7cbb4e 2005-07-12 devnull creates a new file in the directory
145 be7cbb4e 2005-07-12 devnull with block type
147 be7cbb4e 2005-07-12 devnull and block sizes
148 be7cbb4e 2005-07-12 devnull .I dsize
150 be7cbb4e 2005-07-12 devnull .I psize
152 be7cbb4e 2005-07-12 devnull .I vtfilecreateroot
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
167 be7cbb4e 2005-07-12 devnull The data stored in
169 be7cbb4e 2005-07-12 devnull is still accessible by reopening it.
171 be7cbb4e 2005-07-12 devnull .I Vtfileremove
172 be7cbb4e 2005-07-12 devnull removes the file
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
179 be7cbb4e 2005-07-12 devnull and potentially freeing the structure.
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
186 be7cbb4e 2005-07-12 devnull If there are not
188 be7cbb4e 2005-07-12 devnull blocks in the file and
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
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.
201 be7cbb4e 2005-07-12 devnull .I Vtfileread
202 be7cbb4e 2005-07-12 devnull reads at most
204 be7cbb4e 2005-07-12 devnull bytes at offset
205 be7cbb4e 2005-07-12 devnull .I offset
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.
212 be7cbb4e 2005-07-12 devnull .I Vtfilewrite
213 be7cbb4e 2005-07-12 devnull writes the
215 be7cbb4e 2005-07-12 devnull bytes in memory at
217 be7cbb4e 2005-07-12 devnull into the file
219 be7cbb4e 2005-07-12 devnull at offset
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.
226 be7cbb4e 2005-07-12 devnull .I Vtfilewrite
227 be7cbb4e 2005-07-12 devnull writes to an in-memory copy of the data blocks
229 be7cbb4e 2005-07-12 devnull .IR 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
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
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.
245 be7cbb4e 2005-07-12 devnull .I Vtfiletruncate
246 be7cbb4e 2005-07-12 devnull changes the file
248 be7cbb4e 2005-07-12 devnull to have zero length.
250 be7cbb4e 2005-07-12 devnull .I Vtfilegetsize
251 be7cbb4e 2005-07-12 devnull returns the length (in bytes) of file
254 be7cbb4e 2005-07-12 devnull .I Vtfilesetsize
255 be7cbb4e 2005-07-12 devnull sets the length (in bytes) of file
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
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
268 be7cbb4e 2005-07-12 devnull .I Vtfilegetentry
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
275 be7cbb4e 2005-07-12 devnull at a later time.
277 be7cbb4e 2005-07-12 devnull .I Vtfilesetentry
278 be7cbb4e 2005-07-12 devnull sets the entry associated with
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
291 be7cbb4e 2005-07-12 devnull Venti files are locked and unlocked
293 be7cbb4e 2005-07-12 devnull .I vtfilelock
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 ,
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.
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 be7cbb4e 2005-07-12 devnull .IR venti-cache (3),
323 be7cbb4e 2005-07-12 devnull .IR venti-conn (3),
324 3aec33fe 2005-07-18 devnull .IR venti-client (3),
325 3aec33fe 2005-07-18 devnull .IR venti (7)