4 #if !defined(inline) && !defined(__GNUC__)
8 extern afs_int32 afs_is_disconnected;
9 extern afs_int32 afs_is_discon_rw;
10 extern afs_int32 afs_in_sync;
11 extern afs_rwlock_t afs_discon_lock;
13 extern struct afs_q afs_disconDirty;
14 extern struct afs_q afs_disconShadow;
15 extern afs_rwlock_t afs_disconDirtyLock;
16 extern afs_int32 afs_ConflictPolicy;
18 extern afs_uint32 afs_DisconVnode; /* XXX: not protected. */
20 extern int afs_WriteVCacheDiscon(struct vcache *avc,
21 struct AFSStoreStatus *astatus,
23 extern int afs_ResyncDisconFiles(struct vrequest *areq,
25 extern void afs_RemoveAllConns(void);
26 extern void afs_GenFakeFid(struct VenusFid *afid, afs_uint32 avtype,
28 extern void afs_GenShadowFid(struct VenusFid *afid);
29 extern void afs_GenDisconStatus(struct vcache *adp,
31 struct VenusFid *afid,
33 struct vrequest *areq,
35 extern int afs_MakeShadowDir(struct vcache *avc, struct dcache *adc);
36 extern void afs_DeleteShadowDir(struct vcache *avc);
37 extern struct dcache *afs_FindDCacheByFid(struct VenusFid *afid);
38 extern void afs_UpdateStatus(struct vcache *avc,
39 struct VenusFid *afid,
40 struct vrequest *areq,
41 struct AFSFetchStatus *Outsp,
42 struct AFSCallBack *acb,
44 extern void afs_DisconDiscardAll(afs_ucred_t *);
46 #define AFS_IS_DISCONNECTED (afs_is_disconnected)
47 #define AFS_IS_DISCON_RW (afs_is_discon_rw)
48 #define AFS_IN_SYNC (afs_in_sync)
49 #define AFS_DISCON_LOCK() ObtainReadLock(&afs_discon_lock)
50 #define AFS_DISCON_UNLOCK() ReleaseReadLock(&afs_discon_lock)
52 /* Call with avc lock held */
53 static_inline void afs_DisconAddDirty(struct vcache *avc, int operation, int lock) {
54 if (!avc->f.ddirty_flags) {
56 ObtainWriteLock(&afs_xvcache, 702);
57 ObtainWriteLock(&afs_disconDirtyLock, 703);
58 QAdd(&afs_disconDirty, &avc->dirtyq);
59 osi_Assert((afs_RefVCache(avc) == 0));
60 ReleaseWriteLock(&afs_disconDirtyLock);
62 ReleaseWriteLock(&afs_xvcache);
64 avc->f.ddirty_flags |= operation;
67 /* Call with avc lock held */
68 static_inline void afs_DisconRemoveDirty(struct vcache *avc) {
69 ObtainWriteLock(&afs_disconDirtyLock, 704);
70 QRemove(&avc->dirtyq);
71 ReleaseWriteLock(&afs_disconDirtyLock);
72 avc->f.ddirty_flags = 0;
75 #endif /* _DISCON_H */