28#define _VENUS_FSO_H_ 1
88#define FSDB (rvg->recov_FSDB)
113#define SERVER_SERVER 1
114#define LOCAL_GLOBAL 2
115#define MIXED_CONFLICT 3
117#define FILE_CONFLICT 1
118#define DIRECTORY_CONFLICT 2
138 unsigned int MaxFiles;
139 uint64_t WholeFileCachingMaxSize;
182 char matriculation_sync;
183 int matriculation_count;
187 void operator delete(
void *);
190 void ResetTransient();
201 int FreeBlockCount();
202 int DirtyBlockCount();
204 int GrabFreeBlocks(
int,
int);
206 void FreeBlocks(
int);
210 void RecomputePriorities(
int = 0);
230 int MakePri(
int spri,
int mpri) {
return (swt * spri + mwt * mpri); }
249 void print(
int,
int = 0);
265 ViceVersionVector
VV;
385 uint64_t GotThisDataStart;
388 uint64_t GotThisDataEnd;
419 VnodeId LocalFid_Vnode;
420 Unique_t LocalFid_Unique;
456 void *
operator new(size_t);
461 void ResetTransient();
463 int operator=(
fsobj &)
477 void UpdateStatus(ViceStatus *, ViceVersionVector *,
479 int StatusEq(ViceStatus *);
481 int CheckRcRights(
int);
482 void SetRcRights(
int);
483 void ClearRcRights();
485 void SetAcRights(uid_t
uid,
long my_rights,
487 void DemoteAcRights(uid_t);
488 void PromoteAcRights(uid_t);
502 void AttachChild(
fsobj *);
503 void DetachChild(
fsobj *);
507 void ComputePriority(
int Force = 0);
508 void EnableReplacement();
509 void DisableReplacement();
511 void DemoteHdbBindings();
512 void DemoteHdbBinding(
binding *);
513 void DetachHdbBindings();
514 void DetachHdbBinding(
binding *,
int = 0);
526 int IsFake() {
return (flags.
fake); }
528 int IsFakeMtPt() {
return (flags.
fake &&
IsMtPt()); }
529 int IsFakeMTLink() {
return (flags.
fake &&
IsMTLink()); }
534 int IsExpandedObj(
void) {
return (flags.
expanded); }
535 int IsExpandedDir(
void) {
return (flags.
expanded &&
IsDir()); }
537 int IsModifiedObj(
void) {
return (flags.
modified); }
543 int HasExpandedCMLEntries(
void);
545#define LOCALCACHE "_localcache"
546#define LOCALCACHE_HIDDEN ".localcache"
555 int IsToBeRepaired(
void);
556 uid_t WhoIsLastAuthor(
void);
560 void dir_Create(const
char *,
VenusFid *);
562 void dir_Delete(const
char *);
564 int dir_LookupByFid(
char *,
VenusFid *);
575 int DisconnectedStore(Date_t, uid_t,
unsigned long,
577 void LocalSetAttr(Date_t,
unsigned long, Date_t, uid_t,
579 int DisconnectedSetAttr(Date_t, uid_t,
unsigned long, Date_t, uid_t,
582 void LocalCreate(Date_t,
fsobj *,
char *, uid_t,
584 int DisconnectedCreate(Date_t, uid_t,
fsobj **,
char *,
unsigned short,
int,
587 int DisconnectedRemove(Date_t, uid_t,
char *,
fsobj *,
590 int DisconnectedLink(Date_t, uid_t,
char *,
fsobj *,
592 void LocalRename(Date_t,
fsobj *,
char *,
fsobj *,
char *,
594 int DisconnectedRename(Date_t, uid_t,
fsobj *,
char *,
fsobj *,
char *,
596 void LocalMkdir(Date_t,
fsobj *,
char *, uid_t,
598 int DisconnectedMkdir(Date_t, uid_t,
fsobj **,
char *,
unsigned short,
int,
601 int DisconnectedRmdir(Date_t, uid_t,
char *,
fsobj *,
603 void LocalSymlink(Date_t,
fsobj *,
char *,
char *, uid_t,
605 int DisconnectedSymlink(Date_t, uid_t,
fsobj **,
char *,
char *,
610 int FetchFileRPC(
connent *con, ViceStatus *status, uint64_t offset,
615 void UpdateVastroFlag(uid_t
uid,
int force = 0,
627 int Create(
char *,
fsobj **, uid_t,
unsigned short,
633 int Mkdir(
char *,
fsobj **, uid_t,
unsigned short,
636 int Symlink(
char *,
char *, uid_t,
unsigned short,
652#define CLU_CASE_MASK 0x03
653#define CLU_TRAVERSE_MTPT 0x04
655 int Readlink(
char *,
unsigned long,
int *, uid_t);
669#define PATH_COMPONENT 3
672 ViceVersionVector *
VV() {
return (&stat.
VV); }
707 void ListCache(FILE *,
int long_format = 0,
unsigned int valid = 3);
726 int RepairSetAttr(
unsigned long, Date_t, uid_t,
unsigned short,
770 unsigned long blocks);
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))
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())
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))
818#define FSO_ASSERT(f, ex) \
821 (f)->print(logFile); \
822 CHOKE("Assertion failed: file \"%s\", line %d\n", __FILE__, \
827#define CFSOP_PRELUDE(str, comp, fid) \
829 char buf[CODA_MAXNAMLEN + 1]; \
830 if (comp && comp[0] != '\0') \
833 sprintf(buf, "%s", FID_(&fid)); \
834 MarinerLog((str), buf); \
836#define CFSOP_POSTLUDE(str) MarinerLog((str));
838#define PrintFsoState(state) \
839 (state == FsoRunt ? "Runt" : \
840 state == FsoNormal ? "Normal" : \
841 state == FsoDying ? "Dying" : \
843#define PrintVnodeType(vnodetype) \
844 (vnodetype == (int)File ? "File" : \
845 vnodetype == (int)Directory ? "Directory" : \
846 vnodetype == (int)SymbolicLink ? "Symlink" : \
848#define PrintMvStat(mvstat) \
849 (mvstat == NORMAL ? "Normal" : \
850 mvstat == MOUNTPOINT ? "MountPoint" : \
851 mvstat == ROOT ? "Root" : \
Definition: fso_cachefile.h:260
Definition: fso_cachefile.h:344
Definition: venusvol.h:145
const RealmId Id(void)
Definition: realm.h:62
Definition: venusvol.h:454
Definition: venusvol.h:260
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
fso_iterator(LockLevel, const VenusFid *=(VenusFid *) -1)
Definition: fso1.cc:2987
fsobj * operator()()
Definition: fso1.cc:2997
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 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: rec_ohash.h:85
Definition: rec_ohash.h:47
int count()
Definition: rec_ohash.cc:188
Definition: rec_olist.h:87
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
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
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
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
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
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
Date_t Date
Definition: fso.h:276
unsigned long Length
Definition: fso.h:275
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
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
char c
Definition: tdb.c:54
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