Coda Distributed File System
fso.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2025 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU General Public Licence Version 2, as shown in the
11file LICENSE. The technical and financial contributors to Coda are
12listed in the file CREDITS.
13
14 Additional copyrights
15 Copyright (c) 2002-2003 Intel Corporation
16
17#*/
18
19/*
20 *
21 * Specification of the Venus File-System Object (fso) abstraction.
22 *
23 * ToDo:
24 *
25 */
26
27#ifndef _VENUS_FSO_H_
28#define _VENUS_FSO_H_ 1
29
30/* Forward declarations. */
31class fsdb;
32class fsobj;
33class fso_iterator;
34class connent;
35class cmlent; /* we have compiler troubles if volume.h is included! */
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41#include <stdio.h>
42#include <sys/types.h>
43#include <sys/stat.h>
44
45#include <sys/uio.h>
46
47#include <rpc2/rpc2.h>
48
49#include <codadir.h>
50
51extern int global_kernfd;
52#ifdef __cplusplus
53}
54#endif
55
56/* interfaces */
57#include <user.h>
58#include <vice.h>
59
60/* from util */
61#include <bstree.h>
62#include <rec_bstree.h>
63#include <dlist.h>
64#include <rec_dlist.h>
65#include <ohash.h>
66#include <rec_ohash.h>
67#include <olist.h>
68#include <rec_olist.h>
69
70/* from lka */
71#include <lka.h>
72
73/* from venus */
74#include "binding.h"
75#include "comm.h"
76#include "hdb.h"
77#include "mariner.h"
78#include "realmdb.h"
79#include "venusrecov.h"
80#include "vproc.h"
81#include "fso_cachefile.h"
82#include "venus.private.h"
83
84/* from coda include again, must appear AFTER venus.private.h */
85
86/* ***** Constants ***** */
87
88#define FSDB (rvg->recov_FSDB)
89const int FSDB_MagicNumber = 3620289;
90const int FSDB_NBUCKETS = 2048;
91const int FSO_MagicNumber = 2687694;
92
93const int MAX_PIGGY_VALIDATIONS = 50;
94
95/* Priorities. */
98const int DFLT_SWT = 25;
99const int UNSET_SWT = -1;
100const int DFLT_MWT = 75;
101const int UNSET_MWT = -1;
102const int DFLT_SSF = 4;
103const int UNSET_SSF = -1;
104
105const int CPSIZE = 8;
106
107/* ***** Types ***** */
108/* Cache stuff was removed here to move to venus.private.h 5/14/92 */
109
110void FSODaemon(void)
111 EXCLUDES_TRANSACTION; /* used to be member of class fsdb (Satya 3/31/95) */
112
113#define SERVER_SERVER 1
114#define LOCAL_GLOBAL 2
115#define MIXED_CONFLICT 3
116
117#define FILE_CONFLICT 1
118#define DIRECTORY_CONFLICT 2
119
120/* The (cached) file-system database. */
121class fsdb {
122 friend void FSOInit();
123 friend void FSOD_Init();
124 friend void FSODaemon();
125 friend class fsobj;
126 friend class fso_iterator;
127 friend class hdb;
128 friend class vproc;
129 friend void RecovInit();
130 friend class volent;
131 friend class repvol;
132
133 int MagicNumber;
134 int DataVersion;
135 int damnitagain;
136
137 /* Size parameters. */
138 unsigned int MaxFiles;
139 uint64_t WholeFileCachingMaxSize;
140
141 /* "files" is kept as count member of htab */
142 int FreeFileMargin;
143 /*T*/ uint64_t MaxBlocks;
144 /*T*/ uint64_t blocks;
145 /*T*/ int FreeBlockMargin;
146
147 /* Priority parameters. */
148 int swt; /* short-term component weight */
149 int mwt; /* medium-term component weight */
150 int ssf; /* short-term scaling factor */
151 int maxpri; /* maximum priority */
152 int stdpri; /* standard priority (for VFS operations) */
153 int marginpri; /* margin priority (for GetDown) */
154
155 /* The hash table. */
156 rec_ohashtab htab;
157
158 /* The free list. */
159 rec_olist freelist;
160
161 /* The priority queue. */
162 /*T*/ bstree *prioq;
163 long *LastRef;
164 /*T*/ long RefCounter; /* used to compute short-term priority */
165
166 /* The delete queue. Objects are sent here to be garbage collected. */
167 /*T*/ dlist *delq;
168
169 /* Queue of files open for write. */
170 /*T*/ olist *owriteq;
171
172 /* Statistics. */
173 /*T*/ CacheStats DirAttrStats;
174 /*T*/ CacheStats DirDataStats;
175 /*T*/ CacheStats FileAttrStats;
176 /*T*/ CacheStats FileDataStats;
177 int VolumeLevelMiss; /* Counter to pass to data collection; Stored in RVM */
178 /*T*/ int Recomputes; /* total priority recomputations */
179 /*T*/ int Reorders; /* number of resulting prioq reorders */
180
181 /* Synchronization stuff for matriculating objects. */
182 /*T*/ char matriculation_sync;
183 /*T*/ int matriculation_count;
184
185 /* Constructors, destructors. */
186 void *operator new(size_t) REQUIRES_TRANSACTION;
187 void operator delete(void *);
188
189 fsdb();
190 void ResetTransient();
191 ~fsdb() { abort(); }
192
193 /* Allocation/Deallocation routines. */
194 fsobj *Create(VenusFid *, int, const char *comp,
196 int FreeFsoCount();
197 int AllocFso(int, fsobj **) REQUIRES_TRANSACTION;
198 int GrabFreeFso(int, fsobj **) REQUIRES_TRANSACTION;
199 void ReclaimFsos(int, int) REQUIRES_TRANSACTION;
200 void FreeFso(fsobj *) REQUIRES_TRANSACTION;
201 int FreeBlockCount();
202 int DirtyBlockCount();
203 int AllocBlocks(int, int) EXCLUDES_TRANSACTION;
204 int GrabFreeBlocks(int, int);
205 void ReclaimBlocks(int, int) REQUIRES_TRANSACTION;
206 void FreeBlocks(int);
207 void ChangeDiskUsage(int);
208
209 /* Daemon. */
210 void RecomputePriorities(int = 0);
211 void GarbageCollect() REQUIRES_TRANSACTION;
212 void GetDown() REQUIRES_TRANSACTION;
213 void FlushRefVec() EXCLUDES_TRANSACTION;
214
215public:
216 fsobj *Find(const VenusFid *);
217 /* rcode arg added for local repair */
218 int Get(fsobj **fso, VenusFid *fid, uid_t uid, int rights,
219 const char *comp = NULL, VenusFid *parent = NULL, int *rcode = NULL,
220 int GetInconsistent = 0) EXCLUDES_TRANSACTION;
221 void Put_nogc(fsobj **f);
226 int CallBackBreak(const VenusFid *);
228 void ClearPriorities();
229 void InvalidateMtPts();
230 int MakePri(int spri, int mpri) { return (swt * spri + mwt * mpri); }
231 int MaxPri() { return (maxpri); }
232 int StdPri() { return (stdpri); }
233 int MarginPri() { return (marginpri); }
234
235 void GetStats(int *fa, int *fo, int *ba, int *bo)
236 {
237 *fa = MaxFiles;
238 *fo = htab.count();
239 *ba = MaxBlocks;
240 *bo = blocks;
241 }
242
243 void print() { print(stdout); }
244 void print(FILE *fp)
245 {
246 fflush(fp);
247 print(fileno(fp));
248 }
249 void print(int, int = 0);
250};
251
253{
258
259/* Condensed version of ViceStatus. */
260struct VenusStat {
261 ViceDataType VnodeType;
262 unsigned char LinkCount;
263 unsigned long Length;
264 unsigned long DataVersion;
265 ViceVersionVector VV;
266 Date_t Date;
267 uid_t Author;
268 uid_t Owner;
269 unsigned short Mode;
270};
271
272/* Condensed version of VenusStat. */
273/* needed to restore objects after store cancellation */
275 unsigned long Length;
276 Date_t Date;
277};
278
279/* Access Control Rights */
280struct AcRights {
281 uid_t uid;
282 unsigned char rights;
283 unsigned inuse : 1;
284 /*T*/ unsigned valid : 1;
285};
286
287struct FsoFlags {
288 /*T*/ unsigned random : 16; /* help balance binary-search trees */
289 unsigned fake : 1; /* is this object fake? (c.f. repair) */
290 unsigned owrite : 1; /* file open for write? */
291 unsigned dirty : 1; /* is this object dirty? */
292 unsigned local : 1; /* local fake fid */
293 /*T*/ unsigned ckmtpt : 1; /* mount point needs checked? */
294 /*T*/ unsigned fetching : 1; /* fetch in progress? */
295 unsigned expanded : 1; /* are we an expanded object */
296 unsigned modified : 1; /* modified for expansion? */
297 unsigned vastro : 1; /* is the file vastro? */
298 unsigned padding : 7;
299};
300
302{
305 ROOT
307
309 /* Vice format directory in VM/RVM. */
310 struct DirHandle dh;
311 /* Unix format directory in UFS. */
312 /*T*/ unsigned udcfvalid : 1;
314 /*T*/ int padding;
315};
316
318 int havedata; /* generic test for null pointer (pretty gross, eh) */
319 CacheFile *file; /* VnodeType == File */
320 VenusDirData *dir; /* VnodeType == Directory */
321 char *symlink; /* VnodeType == SymbolicLink */
322};
323
324/* local-repair modification */
325typedef enum
326{
329} fso_alloc_t; /* placement argument to operator new() */
330
331typedef enum
332{
336typedef enum
337{
341
342class ClientModifyLog;
343class fsobj {
344 friend void FSOInit();
345 friend int FSO_PriorityFN(bsnode *, bsnode *);
346 friend class fsdb;
347 friend class fso_iterator;
348 friend long VENUS_CallBackFetch(RPC2_Handle, ViceFid *, SE_Descriptor *);
349 friend class vproc;
350 friend class namectxt;
351 friend class volent;
352 friend class repvol;
353 friend class reintvol;
354 friend class ClientModifyLog;
355 friend class cmlent;
356 friend class cml_iterator;
357 friend class resent;
358 friend class mgrpent;
359 friend class hdb;
360 friend class Realm; /* ~Realm */
361 friend class plan9server;
362 friend void RecoverPathName(char *, VenusFid *, ClientModifyLog *,
363 cmlent *);
364
365 int MagicNumber;
366
367 /*T*/ CacheChunkList
368 active_segments;
370 /* Keys. */
371 VenusFid fid; /* unique id for object */
372 char *comp; /* most recently used component */
373 /*T*/ volent *vol; /* pointer to object's volume */
374
375 /* Links for various lists. */
376 rec_olink primary_handle; /* link for {fstab, free-list} */
377 /*T*/ struct dllist_head vol_handle; /* link for volent fso_list */
378 /*T*/ bsnode prio_handle; /* link for priority queue */
379 /*T*/ dlink del_handle; /* link for delete queue */
380 /*T*/ olink owrite_handle; /* link for owrite queue */
381
382 /* General status. */
383 enum FsoState state; /* {FsoRunt, FsoNormal, FsoDying} */
384 VenusStat stat;
385 /*T*/ uint64_t GotThisDataStart; /* used during fetch to keep track of
386 where we are. Signalling the start
387 point of the current fetch segment */
388 /*T*/ uint64_t GotThisDataEnd; /* used during fetch to keep track of where
389 we are. Signalling the end of the current
390 fetch segment */
391 /*T*/ int RcRights; /* replica control rights */
392 AcRights AnyUser; /* access control rights: any user */
393 AcRights SpecificUser[CPSIZE]; /* access control rights: specific users */
394 FsoFlags flags; /* some of these are transient */
395
396 /* if non-zero, the saved SHA of the file; used by lookaside code; */
397 unsigned char VenusSHA[SHA_DIGEST_LENGTH];
398
399 /* Mount state. */
400 MountStatus mvstat; /* { NORMAL, MOUNTPOINT, ROOT } */
401 /*T*/ union {
402 /* mvstat == NORMAL */
403 fsobj *root; /* mvstat == MOUNTPOINT */
404 fsobj *mtpoint; /* mvstat == ROOT */
405 } u;
406
407 /* Child/Parent linkage. */
408 VenusFid pfid;
409 /*T*/ fsobj *pfso; /* back pointer from child to parent */
410 /*T*/ dlist *children; /* for directories; list of cached children */
411 /*T*/ dlink child_link; /* link used for that list */
412
413 /* Priority state. */
414 /*T*/ int priority; /* f(spri, mpri) */
415 /*T*/ int HoardPri; /* max of priorities of binders */
416 /*T*/ uid_t HoardVuid; /* uid of that entry */
417 /*T*/ dlist *
418 hdb_bindings; /* list of (bindings to) hdbents referencing this object */
419 /*T*/ VnodeId LocalFid_Vnode; /* Values of the vnode and */
420 /*T*/ Unique_t LocalFid_Unique; /* uniquifier when this object
421 had a local fid */
422
423 /* MLE linkage. */
424 /* T */ dlist *
425 mle_bindings; /* list of (bindings to) mlents referencing this object */
426 MiniVenusStat CleanStat; /* last status before becoming dirty */
427 /* T */ ViceStoreId tSid; /* temporary for serializing MLEs */
428 /*T*/ CacheFile *shadow; /* shadow copy, temporary during reintegration */
429
430 /* Data contents. */
431 VenusData data;
432
433 /* Statically allocated cache-file stuff. */
434 /* Eventually we might make cache-file allocation dynamic, in which case there would be */
435 /* various of these pointed to by the VenusData descriptors! */
436 int ix;
437 CacheFile cf;
438
439 /* Local synchronization state. */
440 /*T*/ char fso_sync; /* for waiting/signalling */
441 /*T*/ short readers; /* entry readers, not object readers */
442 /*T*/ short writers; /* entry writers, not object writers */
443 /*T*/ short openers; /* object openers */
444 /*T*/ short Writers; /* object writers */
445 /*T*/ short Execers; /* object execers (we don't know this under VFS!) */
446 /*T*/ short refcnt; /* readers + writers + openers + temporary_refs */
447
448 // for asr invocation
449 /*T*/ long lastresolved; // time when object was last resolved
450
451 /* Constructors, destructors. */
452 void *operator new(size_t, fso_alloc_t, int)
453 REQUIRES_TRANSACTION; /* for allocation from freelist */
454 void *operator new(size_t, fso_alloc_t)
455 REQUIRES_TRANSACTION; /* for allocation from heap */
456 void *operator new(size_t); /* dummy to pacify g++ */
457 void operator delete(void *) REQUIRES_TRANSACTION;
459 fsobj(VenusFid *, const char *) REQUIRES_TRANSACTION;
460 void ResetPersistent() REQUIRES_TRANSACTION;
461 void ResetTransient();
462 fsobj(fsobj &) { abort(); } /* not supported! */
463 int operator=(fsobj &)
464 {
465 abort();
466 return (0);
467 } /* not supported! */
469 void Recover() EXCLUDES_TRANSACTION;
470
471 /* General status. */
472 void Matriculate() REQUIRES_TRANSACTION;
473 void Demote(void);
474 void Kill(int = 1) REQUIRES_TRANSACTION;
475 void GC() REQUIRES_TRANSACTION;
476 int Flush() EXCLUDES_TRANSACTION;
477 void UpdateStatus(ViceStatus *, ViceVersionVector *,
479 int StatusEq(ViceStatus *);
480 void ReplaceStatus(ViceStatus *, ViceVersionVector *) REQUIRES_TRANSACTION;
481 int CheckRcRights(int);
482 void SetRcRights(int);
483 void ClearRcRights();
484 int IsValid(int);
485 void SetAcRights(uid_t uid, long my_rights,
486 long any_rights) REQUIRES_TRANSACTION;
487 void DemoteAcRights(uid_t);
488 void PromoteAcRights(uid_t);
489 void ClearAcRights(uid_t) REQUIRES_TRANSACTION;
490 void SetParent(VnodeId, Unique_t) REQUIRES_TRANSACTION;
491 void MakeDirty() REQUIRES_TRANSACTION;
492 void MakeClean() REQUIRES_TRANSACTION;
493
494 /* Mount state. */
495 int TryToCover(VenusFid *, uid_t) EXCLUDES_TRANSACTION;
496 void CoverMtPt(fsobj *) REQUIRES_TRANSACTION;
497 void UncoverMtPt() REQUIRES_TRANSACTION;
498 void MountRoot(fsobj *) REQUIRES_TRANSACTION;
499 void UnmountRoot() REQUIRES_TRANSACTION;
500
501 /* Child/Parent linkage. */
502 void AttachChild(fsobj *);
503 void DetachChild(fsobj *);
504
505 /* Priority state. */
506 void Reference();
507 void ComputePriority(int Force = 0);
508 void EnableReplacement();
509 void DisableReplacement();
510 binding *AttachHdbBinding(namectxt *);
511 void DemoteHdbBindings();
512 void DemoteHdbBinding(binding *);
513 void DetachHdbBindings();
514 void DetachHdbBinding(binding *, int = 0);
515
516 /* MLE Linkage. */
517 void AttachMleBinding(binding *) REQUIRES_TRANSACTION;
518 void DetachMleBinding(binding *) REQUIRES_TRANSACTION;
519
520 /* Data contents. */
521 void DiscardData() REQUIRES_TRANSACTION;
522 void DiscardPartialData() REQUIRES_TRANSACTION;
523
524 /* Fake object management. */
525 int Fakeify(uid_t uid) EXCLUDES_TRANSACTION;
526 int IsFake() { return (flags.fake); }
527 int IsFakeDir() { return (flags.fake && IsDir() && !IsMtPt()); }
528 int IsFakeMtPt() { return (flags.fake && IsMtPt()); }
529 int IsFakeMTLink() { return (flags.fake && IsMTLink()); }
530
531 /* expansion related functions */
532 int ExpandObject(void) EXCLUDES_TRANSACTION;
533 int CollapseObject(void) EXCLUDES_TRANSACTION;
534 int IsExpandedObj(void) { return (flags.expanded); }
535 int IsExpandedDir(void) { return (flags.expanded && IsDir()); }
536 int IsExpandedMTLink(void) { return (flags.expanded && IsMTLink()); }
537 int IsModifiedObj(void) { return (flags.modified); }
538 void SetMtLinkContents(VenusFid *fid) REQUIRES_TRANSACTION;
539
540 /* cmlent expansion related functions */
541 void ExpandCMLEntries(void) REQUIRES_TRANSACTION;
542 void CollapseCMLEntries(void) REQUIRES_TRANSACTION;
543 int HasExpandedCMLEntries(void);
544
545#define LOCALCACHE "_localcache" /* implies we have a locally cached copy */
546#define LOCALCACHE_HIDDEN ".localcache" /* implies we don't */
547
548 /* Local synchronization. */
550 void PromoteLock() EXCLUDES_TRANSACTION;
551 void DemoteLock() EXCLUDES_TRANSACTION;
552 void UnLock(LockLevel);
553
554 /* Local-global conflict detection */
555 int IsToBeRepaired(void);
556 uid_t WhoIsLastAuthor(void);
557 int LaunchASR(int, int) EXCLUDES_TRANSACTION;
558
559 /* Interface to the dir package. */
560 void dir_Create(const char *, VenusFid *);
561 int dir_Length();
562 void dir_Delete(const char *);
563 void dir_MakeDir() REQUIRES_TRANSACTION;
564 int dir_LookupByFid(char *, VenusFid *);
565 void dir_Rebuild();
566 int dir_IsEmpty();
567 int dir_IsParent(VenusFid *);
568 void dir_Zap();
569 void dir_Flush();
570 void dir_TranslateFid(VenusFid *, VenusFid *);
571 void dir_Print();
572
573 /* Private portions of the CFS interface. */
574 void LocalStore(Date_t, unsigned long) REQUIRES_TRANSACTION;
575 int DisconnectedStore(Date_t, uid_t, unsigned long,
576 int prepend = 0) EXCLUDES_TRANSACTION;
577 void LocalSetAttr(Date_t, unsigned long, Date_t, uid_t,
578 unsigned short) REQUIRES_TRANSACTION;
579 int DisconnectedSetAttr(Date_t, uid_t, unsigned long, Date_t, uid_t,
580 unsigned short,
581 int prepend = 0) EXCLUDES_TRANSACTION;
582 void LocalCreate(Date_t, fsobj *, char *, uid_t,
583 unsigned short) REQUIRES_TRANSACTION;
584 int DisconnectedCreate(Date_t, uid_t, fsobj **, char *, unsigned short, int,
585 int prepend = 0) EXCLUDES_TRANSACTION;
586 void LocalRemove(Date_t, char *, fsobj *) REQUIRES_TRANSACTION;
587 int DisconnectedRemove(Date_t, uid_t, char *, fsobj *,
588 int prepend = 0) EXCLUDES_TRANSACTION;
589 void LocalLink(Date_t, char *, fsobj *) REQUIRES_TRANSACTION;
590 int DisconnectedLink(Date_t, uid_t, char *, fsobj *,
591 int prepend = 0) EXCLUDES_TRANSACTION;
592 void LocalRename(Date_t, fsobj *, char *, fsobj *, char *,
594 int DisconnectedRename(Date_t, uid_t, fsobj *, char *, fsobj *, char *,
595 fsobj *, int prepend = 0) EXCLUDES_TRANSACTION;
596 void LocalMkdir(Date_t, fsobj *, char *, uid_t,
597 unsigned short) REQUIRES_TRANSACTION;
598 int DisconnectedMkdir(Date_t, uid_t, fsobj **, char *, unsigned short, int,
599 int prepend = 0) EXCLUDES_TRANSACTION;
600 void LocalRmdir(Date_t, char *, fsobj *) REQUIRES_TRANSACTION;
601 int DisconnectedRmdir(Date_t, uid_t, char *, fsobj *,
602 int prepend = 0) EXCLUDES_TRANSACTION;
603 void LocalSymlink(Date_t, fsobj *, char *, char *, uid_t,
604 unsigned short) REQUIRES_TRANSACTION;
605 int DisconnectedSymlink(Date_t, uid_t, fsobj **, char *, char *,
606 unsigned short, int,
607 int prepend = 0) EXCLUDES_TRANSACTION;
608 int GetContainerFD(void) REQUIRES_TRANSACTION;
609 int LookAside(void) EXCLUDES_TRANSACTION;
610 int FetchFileRPC(connent *con, ViceStatus *status, uint64_t offset,
611 int64_t len, RPC2_CountedBS *PiggyBS,
613 int OpenPioctlFile(void) EXCLUDES_TRANSACTION;
614
615 void UpdateVastroFlag(uid_t uid, int force = 0,
616 int state = 0x0) EXCLUDES_TRANSACTION;
617
618public:
619 /* The public CFS interface (Vice portion). */
620 int Fetch(uid_t) EXCLUDES_TRANSACTION;
621 int Fetch(uid_t uid, uint64_t pos, int64_t count) EXCLUDES_TRANSACTION;
624 int Store(unsigned long, Date_t, uid_t) EXCLUDES_TRANSACTION;
625 int SetAttr(struct coda_vattr *, uid_t) EXCLUDES_TRANSACTION;
627 int Create(char *, fsobj **, uid_t, unsigned short,
629 int Remove(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION;
630 int Link(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION;
631 int Rename(fsobj *, char *, fsobj *, char *, fsobj *,
633 int Mkdir(char *, fsobj **, uid_t, unsigned short,
635 int Rmdir(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION;
636 int Symlink(char *, char *, uid_t, unsigned short,
638 int SetVV(ViceVersionVector *, uid_t) EXCLUDES_TRANSACTION;
639
640 /* The public CFS interface (non-Vice portion). */
641 int Open(int writep, int truncp, venus_cnode *cp,
643 int Sync(uid_t uid) EXCLUDES_TRANSACTION;
644 void Release(int writep) EXCLUDES_TRANSACTION;
645 int Close(int writep, uid_t uid) EXCLUDES_TRANSACTION;
646 int Access(int rights, int modes, uid_t) EXCLUDES_TRANSACTION;
647 int Lookup(fsobj **, VenusFid *, const char *, uid_t, int flags,
648 int GetInconsistent = 0) EXCLUDES_TRANSACTION;
649// These are defined in coda-src/kerndep/coda.h
650// #define CLU_CASE_SENSITIVE 0x01
651// #define CLU_CASE_INSENSITIVE 0x02
652#define CLU_CASE_MASK 0x03
653#define CLU_TRAVERSE_MTPT 0x04
654 int Readdir(char *, int, int, int *, uid_t);
655 int Readlink(char *, unsigned long, int *, uid_t);
656 int ReadIntent(uid_t uid, int priority, uint64_t pos,
657 int64_t count) EXCLUDES_TRANSACTION;
658 int ReadIntentFinish(uint64_t pos, int64_t count);
659
660 /* Miscellaneous utility routines. */
661 int dir_Lookup(const char *, VenusFid *, int);
662 int CheckAcRights(uid_t uid, long rights, int connected);
663 void GetVattr(struct coda_vattr *); /* translate attributes to VFS format */
664 void GetFid(VenusFid *f) { *f = fid; }
665
666#define PATH_VOLUME 0
667#define PATH_FULL 1
668#define PATH_REALM 2
669#define PATH_COMPONENT 3
670 void GetPath(char *, int scope = PATH_VOLUME);
671
672 ViceVersionVector *VV() { return (&stat.VV); }
673 int IsFile() { return (stat.VnodeType == (int)File); }
674 int IsDir() { return (stat.VnodeType == (int)Directory); }
675 int IsSymLink() { return (stat.VnodeType == (int)SymbolicLink); }
676 int IsNormal() { return (mvstat == NORMAL); }
677 int IsRoot() { return (mvstat == ROOT); }
678 int IsVenusRoot() { return (FID_EQ(&fid, &rootfid)); }
679 int IsMtPt() { return (mvstat == MOUNTPOINT); } /* covered mount point */
680 int IsMTLink() { return (IsSymLink() && stat.Mode == 0644 && IsNormal()); }
681 /* uncovered mount point */
682 int IsVirgin(); /* file which has been created, but not yet stored */
683 int IsBackFetching(); /* fso involved in an ongoing reintegration */
685 { /* Test for pioctl object. */
686 return (fid.Realm == LocalRealm->Id() &&
687 fid.Volume == FakeRootVolumeId && fid.Vnode == 0xfffffffa);
688 }
689 int SetLastResolved(long t)
690 {
691 lastresolved = t;
692 return (0);
693 }
695 void RemoveShadow();
696 void CacheReport(int, int);
697 CacheChunkList *GetHoles(uint64_t start, int64_t len);
698
699 void print() { print(stdout); }
700 void print(FILE *fp)
701 {
702 fflush(fp);
703 print(fileno(fp));
704 }
705 void print(int);
706
707 void ListCache(FILE *, int long_format = 0, unsigned int valid = 3);
708 void ListCacheShort(FILE *);
709 void ListCacheLong(FILE *);
710
711 /* local-repair additions */
712 cmlent *FinalCmlent(int); /*N*/
713 void SetComp(const char *) REQUIRES_TRANSACTION; /*U*/
714 const char *GetComp(void);
717 int IsLocalObj() { return flags.local; } /*N*/
718 int IsAncestor(VenusFid *); /*N*/
719
721 void RecoverRootParent(VenusFid *, char *); /*U*/
722
723 int SetLocalVV(ViceVersionVector *) EXCLUDES_TRANSACTION;
724
726 int RepairSetAttr(unsigned long, Date_t, uid_t, unsigned short,
728 int RepairCreate(fsobj **, char *, unsigned short,
732 int RepairRename(fsobj *, char *, fsobj *, char *,
734 int RepairMkdir(fsobj **, char *, unsigned short, int) EXCLUDES_TRANSACTION;
736 int RepairSymlink(fsobj **, char *, char *, unsigned short,
738
739 void FetchProgressIndicator(unsigned long offset);
740
741 size_t Size(void) { return stat.Length; }
742};
743
745 LockLevel clevel; /* locking level */
746 volent *cvol; /* 0 --> all volumes */
747
748public:
749 fso_iterator(LockLevel, const VenusFid * = (VenusFid *)-1);
750 fsobj *operator()();
751};
752
753/* ***** Variables ***** */
754
755extern unsigned int CacheFiles;
756extern unsigned int PartialCacheFilesRatio;
757extern uint64_t WholeFileMaxSize;
758extern uint64_t WholeFileMinSize;
759extern uint64_t WholeFileMaxStall;
760extern int FSO_SWT;
761extern int FSO_MWT;
762extern int FSO_SSF;
763
764/* ***** Functions/Procedures ***** */
765
766/* fso0.c */
768extern int FSO_PriorityFN(bsnode *, bsnode *);
769extern void UpdateCacheStats(CacheStats *c, enum CacheEvent event,
770 unsigned long blocks);
771extern void PrintCacheStats(const char *description, CacheStats *, int);
772extern void VenusToViceStatus(VenusStat *, ViceStatus *);
773
774/* fso_daemon.c */
775void FSOD_Init(void);
776void FSOD_ReclaimFSOs(void);
777
778/* More locking macros. */
779#define FSO_HOLD(f) \
780 { \
781 (f)->refcnt++; \
782 }
783#define FSO_RELE(f) \
784 { \
785 (f)->refcnt--; \
786 }
787
788/* Some useful state predicates. */
789#define UNREACHABLE(f) ((f)->vol->IsUnreachable())
790#define REACHABLE(f) ((f)->vol->IsReachable())
791#define RESOLVING(f) ((f)->vol->IsResolving())
792#define DIRTY(f) ((f)->flags.dirty)
793#define HAVESTATUS(f) ((f)->state != FsoRunt)
794#define STATUSVALID(f) ((f)->IsValid(RC_STATUS))
795#define HAVEDATA(f) ((f)->data.havedata != 0)
796#define PARTIALDATA(f) ((f)->IsFile() && !(f)->cf.IsComplete())
797#define HAVEALLDATA(f) (HAVEDATA(f) && !PARTIALDATA(f))
798#define DATAVALID(f) ((f)->IsValid(RC_DATA))
799#define EXECUTABLE(f) \
800 (HAVESTATUS(f) && (f)->IsFile() && ((f)->stat.Mode & 0111))
801#define DYING(f) ((f)->state == FsoDying)
802#define READING(f) (((f)->openers - (f)->Writers) > 0)
803#define WRITING(f) ((f)->Writers > 0)
804#define EXECUTING(f) (EXECUTABLE(f) && READING(f) && !k_Purge(&(f)->fid))
805#define ACTIVE(f) (WRITING(f) || READING(f)) // was EXECUTING(f)
806#define BUSY(f) ((f)->refcnt > 0 || EXECUTING(f))
807#define HOARDABLE(f) ((f)->HoardPri > 0)
808#define ISVASTRO(f) ((f)->flags.vastro)
809#define FETCHABLE(f) \
810 (!DYING(f) && REACHABLE(f) && !DIRTY(f) && \
811 (!HAVESTATUS(f) || !WRITING(f) || ISVASTRO(f)) && !f->IsLocalObj())
812/* we are replaceable whenever we are linked into FSDB->prioq */
813#define REPLACEABLE(f) ((f)->prio_handle.tree() != 0)
814#define GCABLE(f) (DYING(f) && !DIRTY(f) && !BUSY(f))
815#define FLUSHABLE(f) ((DYING(f) || REPLACEABLE(f)) && !DIRTY(f) && !BUSY(f))
816#define BLOCKS(f) (NBLOCKS((f)->stat.Length))
817
818#define FSO_ASSERT(f, ex) \
819 { \
820 if (!(ex)) { \
821 (f)->print(logFile); \
822 CHOKE("Assertion failed: file \"%s\", line %d\n", __FILE__, \
823 __LINE__); \
824 } \
825 }
826
827#define CFSOP_PRELUDE(str, comp, fid) \
828 { \
829 char buf[CODA_MAXNAMLEN + 1]; \
830 if (comp && comp[0] != '\0') \
831 strcpy(buf, comp); \
832 else \
833 sprintf(buf, "%s", FID_(&fid)); \
834 MarinerLog((str), buf); \
835 }
836#define CFSOP_POSTLUDE(str) MarinerLog((str));
837
838#define PrintFsoState(state) \
839 (state == FsoRunt ? "Runt" : \
840 state == FsoNormal ? "Normal" : \
841 state == FsoDying ? "Dying" : \
842 "???")
843#define PrintVnodeType(vnodetype) \
844 (vnodetype == (int)File ? "File" : \
845 vnodetype == (int)Directory ? "Directory" : \
846 vnodetype == (int)SymbolicLink ? "Symlink" : \
847 "???")
848#define PrintMvStat(mvstat) \
849 (mvstat == NORMAL ? "Normal" : \
850 mvstat == MOUNTPOINT ? "MountPoint" : \
851 mvstat == ROOT ? "Root" : \
852 "???")
853
854#endif /* _VENUS_FSO_H_ */
Definition: fso_cachefile.h:260
Definition: fso_cachefile.h:344
Definition: venusvol.h:145
Definition: realm.h:31
const RealmId Id(void)
Definition: realm.h:62
Definition: binding.h:41
Definition: bstree.h:80
Definition: bstree.h:49
Definition: venusvol.h:454
Definition: venusvol.h:260
Definition: comm.h:121
Definition: dlist.h:50
Definition: fso.h:121
fsobj * Find(const VenusFid *)
Definition: fso0.cc:397
int MaxPri()
Definition: fso.h:231
int MakePri(int spri, int mpri)
Definition: fso.h:230
int MarginPri()
Definition: fso.h:233
friend void FSOInit()
Definition: fso0.cc:75
void InvalidateMtPts()
Definition: fso0.cc:1223
void Flush() EXCLUDES_TRANSACTION
Definition: fso0.cc:999
friend void RecovInit()
Definition: venusrecov.cc:227
void Put(fsobj **) EXCLUDES_TRANSACTION
Definition: fso0.cc:978
void Put_nogc(fsobj **f)
Definition: fso0.cc:960
int StdPri()
Definition: fso.h:232
int Get(fsobj **fso, VenusFid *fid, uid_t uid, int rights, const char *comp=NULL, VenusFid *parent=NULL, int *rcode=NULL, int GetInconsistent=0) EXCLUDES_TRANSACTION
Definition: fso0.cc:505
void GetStats(int *fa, int *fo, int *ba, int *bo)
Definition: fso.h:235
void print()
Definition: fso.h:243
friend void FSOD_Init()
Definition: fso_daemon.cc:220
void ResetUser(uid_t) EXCLUDES_TRANSACTION
Definition: fso0.cc:1200
int CallBackBreak(const VenusFid *)
Definition: fso0.cc:1189
friend class hdb
Definition: fso.h:127
void ClearPriorities()
Definition: fso0.cc:1213
int TranslateFid(VenusFid *, VenusFid *) REQUIRES_TRANSACTION
Definition: fso0.cc:1094
friend void FSODaemon()
Definition: fso_daemon.cc:75
void print(FILE *fp)
Definition: fso.h:244
Definition: fso.h:744
fso_iterator(LockLevel, const VenusFid *=(VenusFid *) -1)
Definition: fso1.cc:2987
fsobj * operator()()
Definition: fso1.cc:2997
Definition: fso.h:343
int RepairLink(char *, fsobj *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:139
int RepairSymlink(fsobj **, char *, char *, unsigned short, int) EXCLUDES_TRANSACTION
Definition: local_fso.cc:171
int Remove(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:116
int Create(char *, fsobj **, uid_t, unsigned short, int) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:1830
int Link(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:186
void GetVattr(struct coda_vattr *)
Definition: fso1.cc:2266
int Symlink(char *, char *, uid_t, unsigned short, int) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:654
void RemoveShadow()
Definition: fso1.cc:2445
friend void FSOInit()
Definition: fso0.cc:75
int IsDir()
Definition: fso.h:674
int RepairMkdir(fsobj **, char *, unsigned short, int) EXCLUDES_TRANSACTION
Definition: local_fso.cc:155
friend int FSO_PriorityFN(bsnode *, bsnode *)
Definition: fso0.cc:264
int Mkdir(char *, fsobj **, uid_t, unsigned short, int) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:453
int IsMtPt()
Definition: fso.h:679
int CheckAcRights(uid_t uid, long rights, int connected)
Definition: fso1.cc:918
void CacheReport(int, int)
Definition: fso1.cc:2455
int Readlink(char *, unsigned long, int *, uid_t)
Definition: fso_cfscalls2.cc:810
fsobj * mtpoint
Definition: fso.h:404
int Fetch(uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:266
const char * GetComp(void)
Definition: local_fso.cc:60
int IsVenusRoot()
Definition: fso.h:678
int ReadIntentFinish(uint64_t pos, int64_t count)
Definition: fso_cfscalls2.cc:910
int RepairRename(fsobj *, char *, fsobj *, char *, fsobj *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:146
int MakeShadow() REQUIRES_TRANSACTION
Definition: fso1.cc:2416
cmlent * FinalCmlent(int)
Definition: local_fso.cc:81
int IsSymLink()
Definition: fso.h:675
int RepairStore() EXCLUDES_TRANSACTION
Definition: local_fso.cc:102
int Store(unsigned long, Date_t, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:1324
void FetchProgressIndicator(unsigned long offset)
Definition: fso_cfscalls0.cc:73
void print(FILE *fp)
Definition: fso.h:700
int IsRoot()
Definition: fso.h:677
ViceVersionVector * VV()
Definition: fso.h:672
void UnsetLocalObj() REQUIRES_TRANSACTION
Definition: local_fso.cc:74
void Release(int writep) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:444
void RecoverRootParent(VenusFid *, char *)
friend long VENUS_CallBackFetch(RPC2_Handle, ViceFid *, SE_Descriptor *)
Definition: venuscb.cc:223
int Lookup(fsobj **, VenusFid *, const char *, uid_t, int flags, int GetInconsistent=0) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:660
int RepairRmdir(char *, fsobj *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:164
int ReadIntent(uid_t uid, int priority, uint64_t pos, int64_t count) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:839
int RepairCreate(fsobj **, char *, unsigned short, int) EXCLUDES_TRANSACTION
Definition: local_fso.cc:123
int GetAttr(uid_t, RPC2_BoundedBS *=0) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:610
void DeLocalRootParent(fsobj *, VenusFid *, fsobj *)
int Access(int rights, int modes, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:519
int RepairRemove(char *, fsobj *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:132
void SetComp(const char *) REQUIRES_TRANSACTION
Definition: local_fso.cc:49
size_t Size(void)
Definition: fso.h:741
int SetACL(RPC2_CountedBS *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:1496
void ListCacheLong(FILE *)
Definition: fso1.cc:2752
friend void RecoverPathName(char *, VenusFid *, ClientModifyLog *, cmlent *)
Definition: vol_cml.cc:3223
int Readdir(char *, int, int, int *, uid_t)
CacheChunkList * GetHoles(uint64_t start, int64_t len)
Definition: fso1.cc:2979
void GetFid(VenusFid *f)
Definition: fso.h:664
friend class hdb
Definition: fso.h:359
friend class namectxt
Definition: fso.h:350
int SetVV(ViceVersionVector *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:680
int Rename(fsobj *, char *, fsobj *, char *, fsobj *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:315
int dir_Lookup(const char *, VenusFid *, int)
Definition: fso_dir.cc:204
void GetPath(char *, int scope=PATH_VOLUME)
Definition: fso1.cc:2316
void SetLocalObj() REQUIRES_TRANSACTION
Definition: local_fso.cc:68
int IsMTLink()
Definition: fso.h:680
void print()
Definition: fso.h:699
int IsVirgin()
Definition: fso1.cc:2384
int IsNormal()
Definition: fso.h:676
fsobj * root
Definition: fso.h:403
int SetAttr(struct coda_vattr *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:1427
int Sync(uid_t uid) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:366
void ListCache(FILE *, int long_format=0, unsigned int valid=3)
Definition: fso1.cc:2720
void ListCacheShort(FILE *)
Definition: fso1.cc:2741
int IsAncestor(VenusFid *)
int IsBackFetching()
int RepairSetAttr(unsigned long, Date_t, uid_t, unsigned short, RPC2_CountedBS *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:113
int SetLastResolved(long t)
Definition: fso.h:689
int IsLocalObj()
Definition: fso.h:717
int IsPioctlFile()
Definition: fso.h:684
int IsFile()
Definition: fso.h:673
int Close(int writep, uid_t uid) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:505
int GetACL(RPC2_BoundedBS *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls0.cc:1258
int Rmdir(char *, fsobj *, uid_t) EXCLUDES_TRANSACTION
Definition: fso_cfscalls1.cc:528
int Open(int writep, int truncp, venus_cnode *cp, uid_t uid) EXCLUDES_TRANSACTION
Definition: fso_cfscalls2.cc:211
int SetLocalVV(ViceVersionVector *) EXCLUDES_TRANSACTION
Definition: local_fso.cc:184
Definition: mgrp.h:75
Definition: olist.h:47
Definition: 9pfs.h:343
Definition: rec_ohash.h:85
Definition: rec_ohash.h:47
int count()
Definition: rec_ohash.cc:188
Definition: rec_olist.h:46
Definition: venusvol.h:739
Definition: venusvol.h:931
Definition: venusvol.h:1087
Definition: venusvol.h:620
friend class fsdb
Definition: venusvol.h:621
Definition: vproc.h:151
int Create(long *, char *, long *)
#define SHA_DIGEST_LENGTH
Definition: coda_hash.h:71
#define REQUIRES_TRANSACTION
Definition: coda_tsa.h:107
#define EXCLUDES_TRANSACTION
Definition: coda_tsa.h:108
int FID_EQ(const struct ViceFid *fa, const struct ViceFid *fb)
Definition: fid.c:97
void FSODaemon(void) EXCLUDES_TRANSACTION
Definition: fso_daemon.cc:75
const int CPSIZE
Definition: fso.h:105
int FSO_PriorityFN(bsnode *, bsnode *)
Definition: fso0.cc:264
const int FSDB_MagicNumber
Definition: fso.h:89
void VenusToViceStatus(VenusStat *, ViceStatus *)
Definition: fso0.cc:310
HoardFetchState
Definition: fso.h:332
@ HF_DontFetch
Definition: fso.h:334
@ HF_Fetch
Definition: fso.h:333
const int UNSET_SSF
Definition: fso.h:103
MountStatus
Definition: fso.h:302
@ MOUNTPOINT
Definition: fso.h:304
@ NORMAL
Definition: fso.h:303
@ ROOT
Definition: fso.h:305
const int DFLT_SWT
Definition: fso.h:98
uint64_t WholeFileMaxSize
Definition: fso0.cc:67
unsigned int PartialCacheFilesRatio
Definition: fso0.cc:66
int FSO_MWT
Definition: fso0.cc:71
const int DFLT_SSF
Definition: fso.h:102
void PrintCacheStats(const char *description, CacheStats *, int)
Definition: fso0.cc:302
const int UNSET_MWT
Definition: fso.h:101
const int MAX_PIGGY_VALIDATIONS
Definition: fso.h:93
#define PATH_VOLUME
Definition: fso.h:666
fso_alloc_t
Definition: fso.h:326
@ FROMHEAP
Definition: fso.h:327
@ FROMFREELIST
Definition: fso.h:328
const int FSDB_NBUCKETS
Definition: fso.h:90
void FSOD_ReclaimFSOs(void)
Definition: fso_daemon.cc:67
const int FSO_MAX_SPRI
Definition: fso.h:96
FsoState
Definition: fso.h:253
@ FsoNormal
Definition: fso.h:255
@ FsoRunt
Definition: fso.h:254
@ FsoDying
Definition: fso.h:256
uint64_t WholeFileMaxStall
Definition: fso0.cc:69
int FSO_SWT
Definition: fso0.cc:70
const int FSO_MagicNumber
Definition: fso.h:91
int global_kernfd
void FSOInit() EXCLUDES_TRANSACTION
Definition: fso0.cc:75
const int FSO_MAX_MPRI
Definition: fso.h:97
HoardAskState
Definition: fso.h:337
@ HA_Ask
Definition: fso.h:338
@ HA_DontAsk
Definition: fso.h:339
void FSOD_Init(void)
Definition: fso_daemon.cc:220
int FSO_SSF
Definition: fso0.cc:72
unsigned int CacheFiles
Definition: fso0.cc:65
uint64_t WholeFileMinSize
Definition: fso0.cc:68
void UpdateCacheStats(CacheStats *c, enum CacheEvent event, unsigned long blocks)
Definition: fso0.cc:291
const int UNSET_SWT
Definition: fso.h:99
const int DFLT_MWT
Definition: fso.h:100
#define H_MAX_PRI
Definition: hdb.h:52
uid
Definition: pwdtopdbtool.py:40
stdout
Definition: volusage.py:12
Realm * LocalRealm
Definition: realmdb.cc:24
void ChangeDiskUsage(Volume *, int)
Definition: srvproc.cc:1026
RPC2_Integer RPC2_Handle
Definition: rpc2.h:345
@ f
Definition: rvm_private.h:416
PROCESS parent
Definition: smon2.c:80
Definition: fso.h:280
unsigned inuse
Definition: fso.h:283
unsigned valid
Definition: fso.h:284
unsigned char rights
Definition: fso.h:282
uid_t uid
Definition: fso.h:281
Definition: venus.private.h:270
Definition: codadir.h:45
Definition: fso.h:287
unsigned dirty
Definition: fso.h:291
unsigned padding
Definition: fso.h:298
unsigned fake
Definition: fso.h:289
unsigned modified
Definition: fso.h:296
unsigned fetching
Definition: fso.h:294
unsigned expanded
Definition: fso.h:295
unsigned ckmtpt
Definition: fso.h:293
unsigned random
Definition: fso.h:288
unsigned owrite
Definition: fso.h:290
unsigned vastro
Definition: fso.h:297
Definition: lock.h:68
Definition: fso.h:274
Date_t Date
Definition: fso.h:276
unsigned long Length
Definition: fso.h:275
Definition: rpc2.h:324
Definition: rpc2.h:316
Definition: se.h:148
Definition: fso.h:308
CacheFile * udcf
Definition: fso.h:313
int padding
Definition: fso.h:314
unsigned udcfvalid
Definition: fso.h:312
struct DirHandle dh
Definition: fso.h:310
Definition: venusfid.h:24
VolumeId Volume
Definition: venusfid.h:26
RealmId Realm
Definition: venusfid.h:25
VnodeId Vnode
Definition: venusfid.h:27
Definition: fso.h:260
Date_t Date
Definition: fso.h:266
unsigned char LinkCount
Definition: fso.h:262
uid_t Owner
Definition: fso.h:268
unsigned long DataVersion
Definition: fso.h:264
ViceDataType VnodeType
Definition: fso.h:261
uid_t Author
Definition: fso.h:267
ViceVersionVector VV
Definition: fso.h:265
unsigned short Mode
Definition: fso.h:269
unsigned long Length
Definition: fso.h:263
Definition: venusfid.h:31
Definition: coda.h:234
Definition: dllist.h:30
Definition: vproc.h:364
char c
Definition: tdb.c:54
Definition: fso.h:317
CacheFile * file
Definition: fso.h:319
VenusDirData * dir
Definition: fso.h:320
int havedata
Definition: fso.h:318
char * symlink
Definition: fso.h:321
VenusFid rootfid
Definition: venus.cc:82
LockLevel
Definition: venus.private.h:170
CacheEvent
Definition: venus.private.h:249
#define FakeRootVolumeId
Definition: venusfid.h:96
#define NULL
Definition: voltypes.h:44