Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afs / discon.h
CommitLineData
805e021f
CE
1#ifndef _DISCON_H
2#define _DISCON_H
3
4extern afs_int32 afs_is_disconnected;
5extern afs_int32 afs_is_discon_rw;
6extern afs_int32 afs_in_sync;
7extern afs_rwlock_t afs_discon_lock;
8
9extern struct afs_q afs_disconDirty;
10extern struct afs_q afs_disconShadow;
11extern afs_rwlock_t afs_disconDirtyLock;
12extern afs_int32 afs_ConflictPolicy;
13
14extern afs_uint32 afs_DisconVnode; /* XXX: not protected. */
15
16extern int afs_WriteVCacheDiscon(struct vcache *avc,
17 struct AFSStoreStatus *astatus,
18 struct vattr *attrs);
19extern int afs_ResyncDisconFiles(struct vrequest *areq,
20 afs_ucred_t *acred);
21extern void afs_RemoveAllConns(void);
22extern void afs_GenFakeFid(struct VenusFid *afid, afs_uint32 avtype,
23 int lock);
24extern void afs_GenShadowFid(struct VenusFid *afid);
25extern void afs_GenDisconStatus(struct vcache *adp,
26 struct vcache *avc,
27 struct VenusFid *afid,
28 struct vattr *attrs,
29 struct vrequest *areq,
30 int file_type);
31extern int afs_MakeShadowDir(struct vcache *avc, struct dcache *adc);
32extern void afs_DeleteShadowDir(struct vcache *avc);
33extern struct dcache *afs_FindDCacheByFid(struct VenusFid *afid);
34extern void afs_UpdateStatus(struct vcache *avc,
35 struct VenusFid *afid,
36 struct vrequest *areq,
37 struct AFSFetchStatus *Outsp,
38 struct AFSCallBack *acb,
39 afs_uint32 start);
40extern void afs_DisconDiscardAll(afs_ucred_t *);
41
42#define AFS_IS_DISCONNECTED (afs_is_disconnected || afs_is_discon_rw)
43#define AFS_IS_DISCON_RW (afs_is_discon_rw)
44#define AFS_IN_SYNC (afs_in_sync)
45#define AFS_DISCON_LOCK() ObtainReadLock(&afs_discon_lock)
46#define AFS_DISCON_UNLOCK() ReleaseReadLock(&afs_discon_lock)
47
48/* Call with avc lock held */
49static_inline void afs_DisconAddDirty(struct vcache *avc, int operation, int lock) {
50 if (!avc->f.ddirty_flags) {
51 if (lock)
52 ObtainWriteLock(&afs_xvcache, 702);
53 ObtainWriteLock(&afs_disconDirtyLock, 703);
54 QAdd(&afs_disconDirty, &avc->dirtyq);
55 osi_Assert((afs_RefVCache(avc) == 0));
56 ReleaseWriteLock(&afs_disconDirtyLock);
57 if (lock)
58 ReleaseWriteLock(&afs_xvcache);
59 }
60 avc->f.ddirty_flags |= operation;
61}
62
63/* Call with avc lock held */
64static_inline void afs_DisconRemoveDirty(struct vcache *avc) {
65 ObtainWriteLock(&afs_disconDirtyLock, 704);
66 QRemove(&avc->dirtyq);
67 ReleaseWriteLock(&afs_disconDirtyLock);
68 avc->f.ddirty_flags = 0;
69 afs_PutVCache(avc);
70}
71#endif /* _DISCON_H */