mirror of
https://git.openafs.org/openafs.git
synced 2025-01-31 05:27:44 +00:00
DEVEL15-abstract-reset-vcache-20090119
LICENSE IPL10 FIXES 124147 abstract vcache resetting code so disconnected can reuse it (cherry picked from commit 57744971179a8ee7441e73eeb9e2a56d671fcc37)
This commit is contained in:
parent
2dbb3d044a
commit
f49dba09fb
@ -1806,17 +1806,7 @@ DECL_PIOCTL(PFlush)
|
||||
afs_BozonLock(&avc->pvnLock, avc); /* Since afs_TryToSmush will do a pvn_vptrunc */
|
||||
#endif
|
||||
ObtainWriteLock(&avc->lock, 225);
|
||||
ObtainWriteLock(&afs_xcbhash, 456);
|
||||
afs_DequeueCallback(avc);
|
||||
avc->states &= ~(CStatd | CDirty); /* next reference will re-stat cache entry */
|
||||
ReleaseWriteLock(&afs_xcbhash);
|
||||
/* now find the disk cache entries */
|
||||
afs_TryToSmush(avc, *acred, 1);
|
||||
osi_dnlc_purgedp(avc);
|
||||
if (avc->linkData && !(avc->states & CCore)) {
|
||||
afs_osi_Free(avc->linkData, strlen(avc->linkData) + 1);
|
||||
avc->linkData = NULL;
|
||||
}
|
||||
afs_ResetVCache(avc, *acred);
|
||||
ReleaseWriteLock(&avc->lock);
|
||||
#ifdef AFS_BOZONLOCK_ENV
|
||||
afs_BozonUnlock(&avc->pvnLock, avc);
|
||||
|
@ -986,6 +986,7 @@ extern int afs_RemoteLookup(register struct VenusFid *afid,
|
||||
struct AFSCallBack *CallBackp,
|
||||
struct server **serverp,
|
||||
struct AFSVolSync *tsyncp);
|
||||
extern void afs_ResetVCache(struct vcache *, struct AFS_UCRED *);
|
||||
extern afs_int32 afs_NFSFindVCache(struct vcache **avcp,
|
||||
struct VenusFid *afid);
|
||||
extern void afs_vcacheInit(int astatSize);
|
||||
|
@ -2775,6 +2775,30 @@ afs_PutVCache(register struct vcache *avc)
|
||||
} /*afs_PutVCache */
|
||||
|
||||
|
||||
/*!
|
||||
* Reset a vcache entry, so local contents are ignored, and the
|
||||
* server will be reconsulted next time the vcache is used
|
||||
*
|
||||
* \param avc Pointer to the cache entry to reset
|
||||
* \param acred
|
||||
*
|
||||
* \note avc must be write locked on entry
|
||||
*/
|
||||
void
|
||||
afs_ResetVCache(struct vcache *avc, struct AFS_UCRED *acred) {
|
||||
ObtainWriteLock(&afs_xcbhash, 456);
|
||||
afs_DequeueCallback(avc);
|
||||
avc->states &= ~(CStatd | CDirty); /* next reference will re-stat */
|
||||
ReleaseWriteLock(&afs_xcbhash);
|
||||
/* now find the disk cache entries */
|
||||
afs_TryToSmush(avc, acred, 1);
|
||||
osi_dnlc_purgedp(avc);
|
||||
if (avc->linkData && !(avc->states & CCore)) {
|
||||
afs_osi_Free(avc->linkData, strlen(avc->linkData) + 1);
|
||||
avc->linkData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Sleepa when searching for a vcache. Releases all the pending locks,
|
||||
* sleeps then obtains the previously released locks.
|
||||
|
Loading…
x
Reference in New Issue
Block a user