int (*close) (struct osi_file * fp);
int (*vreadUIO) (afs_dcache_id_t *, struct uio *);
int (*vwriteUIO) (struct vcache *, afs_dcache_id_t *, struct uio *);
- struct dcache *(*GetDSlot) (afs_int32 aslot,
- struct dcache * tmpdc);
+ struct dcache *(*GetDSlot) (afs_int32 aslot);
struct volume *(*GetVolSlot) (void);
int (*HandleLink) (struct vcache * avc, struct vrequest * areq);
};
#define afs_CFileRead(file, offset, data, size) (*(afs_cacheType->fread))(file, offset, data, size)
#define afs_CFileWrite(file, offset, data, size) (*(afs_cacheType->fwrite))(file, offset, data, size)
#define afs_CFileClose(handle) (*(afs_cacheType->close))(handle)
-#define afs_GetDSlot(slot, adc) (*(afs_cacheType->GetDSlot))(slot, adc)
+#define afs_GetDSlot(slot) (*(afs_cacheType->GetDSlot))(slot)
#define afs_GetVolSlot() (*(afs_cacheType->GetVolSlot))()
#define afs_HandleLink(avc, areq) (*(afs_cacheType->HandleLink))(avc, areq)
* during the truncate operation.
*/
for (i = 0; i < victimPtr; i++) {
- tdc = afs_GetDSlot(victims[i], 0);
+ tdc = afs_GetDSlot(victims[i]);
/* We got tdc->tlock(R) here */
if (tdc->refCount == 1)
victimDCs[i] = tdc;
/*
* Get an entry from the list of discarded cache elements
*/
- tdc = afs_GetDSlot(afs_discardDCList, 0);
+ tdc = afs_GetDSlot(afs_discardDCList);
osi_Assert(tdc->refCount == 1);
ReleaseReadLock(&tdc->tlock);
i = afs_dvnextTbl[index]; /* next pointer this hash table */
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
int releaseTlock = 1;
- tdc = afs_GetDSlot(index, NULL);
+ tdc = afs_GetDSlot(index);
if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
if (sync) {
if ((afs_indexFlags[index] & IFDataMod) == 0
for (index = afs_dvhashTbl[i]; index != NULLIDX; index = i) {
i = afs_dvnextTbl[index];
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, NULL);
+ tdc = afs_GetDSlot(index);
if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
totalChunks--;
}
ObtainWriteLock(&afs_xdcache, 278);
for (index = afs_dchashTbl[i]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, NULL);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid) && chunk == tdc->f.chunk) {
break; /* leaving refCount high for caller */
|| ((lock & 2) && afs_freeDCList != NULLIDX)) {
afs_indexFlags[afs_freeDCList] &= ~IFFree;
- tdc = afs_GetDSlot(afs_freeDCList, 0);
+ tdc = afs_GetDSlot(afs_freeDCList);
osi_Assert(tdc->refCount == 1);
ReleaseReadLock(&tdc->tlock);
ObtainWriteLock(&tdc->lock, 604);
afs_freeDCCount--;
} else {
afs_indexFlags[afs_discardDCList] &= ~IFDiscarded;
- tdc = afs_GetDSlot(afs_discardDCList, 0);
+ tdc = afs_GetDSlot(afs_discardDCList);
osi_Assert(tdc->refCount == 1);
ReleaseReadLock(&tdc->tlock);
ObtainWriteLock(&tdc->lock, 605);
us = NULLIDX;
for (index = afs_dchashTbl[i]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, NULL);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
/*
* Locks held:
*
* Parameters:
* aslot : Dcache slot to look at.
- * tmpdc : Ptr to dcache entry.
*
* Environment:
* Must be called with afs_xdcache write-locked.
*/
struct dcache *
-afs_MemGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
+afs_MemGetDSlot(afs_int32 aslot)
{
struct dcache *tdc;
int existing = 0;
ConvertWToRLock(&tdc->tlock);
return tdc;
}
- if (tmpdc == NULL) {
- if (!afs_freeDSList)
- afs_GetDownDSlot(4);
- if (!afs_freeDSList) {
- /* none free, making one is better than a panic */
- afs_stats_cmperf.dcacheXAllocs++; /* count in case we have a leak */
- tdc = afs_osi_Alloc(sizeof(struct dcache));
- osi_Assert(tdc != NULL);
+ if (!afs_freeDSList)
+ afs_GetDownDSlot(4);
+ if (!afs_freeDSList) {
+ /* none free, making one is better than a panic */
+ afs_stats_cmperf.dcacheXAllocs++; /* count in case we have a leak */
+ tdc = afs_osi_Alloc(sizeof(struct dcache));
+ osi_Assert(tdc != NULL);
#ifdef KERNEL_HAVE_PIN
- pin((char *)tdc, sizeof(struct dcache)); /* XXX */
+ pin((char *)tdc, sizeof(struct dcache)); /* XXX */
#endif
- } else {
- tdc = afs_freeDSList;
- afs_freeDSList = (struct dcache *)tdc->lruq.next;
- existing = 1;
- }
- tdc->dflags = 0; /* up-to-date, not in free q */
- tdc->mflags = 0;
- QAdd(&afs_DLRU, &tdc->lruq);
- if (tdc->lruq.prev == &tdc->lruq)
- osi_Panic("lruq 3");
} else {
- tdc = tmpdc;
- tdc->f.states = 0;
+ tdc = afs_freeDSList;
+ afs_freeDSList = (struct dcache *)tdc->lruq.next;
+ existing = 1;
}
+ tdc->dflags = 0; /* up-to-date, not in free q */
+ tdc->mflags = 0;
+ QAdd(&afs_DLRU, &tdc->lruq);
+ if (tdc->lruq.prev == &tdc->lruq)
+ osi_Panic("lruq 3");
/* initialize entry */
tdc->f.fid.Cell = 0;
AFS_RWLOCK_INIT(&tdc->mflock, "dcache flock");
ObtainReadLock(&tdc->tlock);
- if (tmpdc == NULL)
- afs_indexTable[aslot] = tdc;
+ afs_indexTable[aslot] = tdc;
return tdc;
} /*afs_MemGetDSlot */
*
* Parameters:
* aslot : Dcache slot to look at.
- * tmpdc : Ptr to dcache entry.
*
* Environment:
* afs_xdcache lock write-locked.
*/
struct dcache *
-afs_UFSGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
+afs_UFSGetDSlot(afs_int32 aslot)
{
afs_int32 code;
struct dcache *tdc;
ConvertWToRLock(&tdc->tlock);
return tdc;
}
+
/* otherwise we should read it in from the cache file */
- /*
- * If we weren't passed an in-memory region to place the file info,
- * we have to allocate one.
- */
- if (tmpdc == NULL) {
- if (!afs_freeDSList)
- afs_GetDownDSlot(4);
- if (!afs_freeDSList) {
- /* none free, making one is better than a panic */
- afs_stats_cmperf.dcacheXAllocs++; /* count in case we have a leak */
- tdc = afs_osi_Alloc(sizeof(struct dcache));
- osi_Assert(tdc != NULL);
+ if (!afs_freeDSList)
+ afs_GetDownDSlot(4);
+ if (!afs_freeDSList) {
+ /* none free, making one is better than a panic */
+ afs_stats_cmperf.dcacheXAllocs++; /* count in case we have a leak */
+ tdc = afs_osi_Alloc(sizeof(struct dcache));
+ osi_Assert(tdc != NULL);
#ifdef KERNEL_HAVE_PIN
- pin((char *)tdc, sizeof(struct dcache)); /* XXX */
+ pin((char *)tdc, sizeof(struct dcache)); /* XXX */
#endif
- } else {
- tdc = afs_freeDSList;
- afs_freeDSList = (struct dcache *)tdc->lruq.next;
- existing = 1;
- }
- tdc->dflags = 0; /* up-to-date, not in free q */
- tdc->mflags = 0;
- QAdd(&afs_DLRU, &tdc->lruq);
- if (tdc->lruq.prev == &tdc->lruq)
- osi_Panic("lruq 3");
} else {
- tdc = tmpdc;
- tdc->f.states = 0;
+ tdc = afs_freeDSList;
+ afs_freeDSList = (struct dcache *)tdc->lruq.next;
+ existing = 1;
}
+ tdc->dflags = 0; /* up-to-date, not in free q */
+ tdc->mflags = 0;
+ QAdd(&afs_DLRU, &tdc->lruq);
+ if (tdc->lruq.prev == &tdc->lruq)
+ osi_Panic("lruq 3");
/*
* Seek to the aslot'th entry and read it in.
* If we didn't read into a temporary dcache region, update the
* slot pointer table.
*/
- if (tmpdc == NULL)
- afs_indexTable[aslot] = tdc;
+ afs_indexTable[aslot] = tdc;
return tdc;
} /*afs_UFSGetDSlot */
return EINVAL;
ObtainWriteLock(&afs_xdcache, 282);
- tdc = afs_GetDSlot(index, NULL);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
ReleaseWriteLock(&afs_xdcache);
for (j = 0; index != NULLIDX;) {
if ((afs_indexFlags[index] & IFDataMod)
&& (afs_indexUnique[index] == avc->f.fid.Fid.Unique)) {
- tdc = afs_GetDSlot(index, 0); /* refcount+1. */
+ tdc = afs_GetDSlot(index); /* refcount+1. */
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid) && tdc->f.chunk >= minj) {
off = tdc->f.chunk - minj;
index != NULLIDX && safety < afs_cacheFiles + 2;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, 0);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid)
for (index = afs_dvhashTbl[hash]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, 0);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid))
dcListMax++;
for (index = afs_dvhashTbl[hash]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, 0);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
/* same file? we'll zap it */
dcCount = 0;
for (index = afs_dvhashTbl[code]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, 0);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid))
dcCount++;
for (index = afs_dvhashTbl[code]; index != NULLIDX;) {
if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- tdc = afs_GetDSlot(index, 0);
+ tdc = afs_GetDSlot(index);
ReleaseReadLock(&tdc->tlock);
if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
/* same file, and modified, we'll store it back */