Coda Distributed File System
venusfid.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 6
5
6 Copyright (c) 2003 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 none currently
16
17#*/
18
19#ifndef _VENUSFID_H_
20#define _VENUSFID_H_
21
22#include <codadir.h>
23
24typedef struct {
25 RealmId Realm;
26 VolumeId Volume;
27 VnodeId Vnode;
28 Unique_t Unique;
29} VenusFid;
30
31typedef struct {
32 RealmId Realm;
33 VolumeId Volume;
34} Volid;
35
37{
38 return (CodaFid *)fid;
39}
40
41inline void KernelToVenusFid(VenusFid *fid, CodaFid *kfid)
42{
43 *fid = *(VenusFid *)kfid;
44}
45
46inline ViceFid *MakeViceFid(VenusFid *fid)
47{
48 return (ViceFid *)(&fid->Volume);
49}
50
52{
53 return (Volid *)(&fid->Realm);
54}
55
56inline int FID_EQ(const VenusFid *a, const VenusFid *b)
57{
58 return (a->Realm == b->Realm && a->Volume == b->Volume &&
59 a->Vnode == b->Vnode && a->Unique == b->Unique);
60}
61
62inline int FID_VolEQ(const Volid *a, const Volid *b)
63{
64 return (a->Realm == b->Realm && a->Volume == b->Volume);
65}
66
67inline int FID_VolEQ(const VenusFid *a, const VenusFid *b)
68{
69 return FID_VolEQ((Volid *)a, (Volid *)b);
70}
71
72inline int FID_IsVolRoot(VenusFid *fid)
73{
74 return FID_IsVolRoot(MakeViceFid(fid));
75}
76
77inline char *FID_(const VenusFid *fid)
78{
79 static char buf[2][37];
80 static int i = 0;
81 i = 1 - i;
82 sprintf(buf[i], "%x.%x.%x.%x", (unsigned int)fid->Realm,
83 (unsigned int)fid->Volume, (unsigned int)fid->Vnode,
84 (unsigned int)fid->Unique);
85 return buf[i];
86}
87
88inline void MakeVenusFid(VenusFid *vf, const uint32_t realm, const ViceFid *fid)
89{
90 vf->Realm = realm;
91 vf->Volume = fid->Volume;
92 vf->Vnode = fid->Vnode;
93 vf->Unique = fid->Unique;
94}
95
96#define FakeRootVolumeId ((VolumeId)0xff000001)
97#define FakeRepairVolumeId ((VolumeId)0xffffffff)
98
100
101inline int FID_IsExpandedDir(ViceFid *vf)
102{
103 return (vf->Volume == FakeRepairVolumeId) && FID_IsFakeRoot(vf);
104}
105
107{
109}
110
111#endif /* _VENUSFID_H_ */
unsigned int uint32_t
Definition: coda.h:105
int FID_IsFakeRoot(struct ViceFid *fid)
Definition: fid.c:176
Definition: coda.h:201
Definition: venusfid.h:24
VolumeId Volume
Definition: venusfid.h:26
RealmId Realm
Definition: venusfid.h:25
Unique_t Unique
Definition: venusfid.h:28
VnodeId Vnode
Definition: venusfid.h:27
Definition: venusfid.h:31
RealmId Realm
Definition: venusfid.h:32
VolumeId Volume
Definition: venusfid.h:33
int FID_EQ(const VenusFid *a, const VenusFid *b)
Definition: venusfid.h:56
int FID_IsLocalFake(VenusFid *fid)
Definition: realmdb.cc:159
void MakeVenusFid(VenusFid *vf, const uint32_t realm, const ViceFid *fid)
Definition: venusfid.h:88
char * FID_(const VenusFid *fid)
Definition: venusfid.h:77
int FID_IsExpandedDir(ViceFid *vf)
Definition: venusfid.h:101
#define FakeRepairVolumeId
Definition: venusfid.h:97
CodaFid * VenusToKernelFid(VenusFid *fid)
Definition: venusfid.h:36
void KernelToVenusFid(VenusFid *fid, CodaFid *kfid)
Definition: venusfid.h:41
int FID_VolEQ(const Volid *a, const Volid *b)
Definition: venusfid.h:62
Volid * MakeVolid(VenusFid *fid)
Definition: venusfid.h:51
ViceFid * MakeViceFid(VenusFid *fid)
Definition: venusfid.h:46
int FID_IsVolRoot(VenusFid *fid)
Definition: venusfid.h:72