windows-optimize-access-20080224

LICENSE MIT

profiling shows large numbers of blocked calls in cm_HoldSCache
from cm_HaveAccess...   We can safely avoid the call so do so.
This commit is contained in:
Jeffrey Altman 2008-02-24 06:27:38 +00:00
parent c73b73ee33
commit 812ac61cfd

View File

@ -38,6 +38,7 @@ int cm_HaveAccessRights(struct cm_scache *scp, struct cm_user *userp, afs_uint32
cm_fid_t tfid;
int didLock;
long trights;
int release = 0; /* Used to avoid a call to cm_HoldSCache in the directory case */
#if 0
if (scp->flags & CM_SCACHEFLAG_EACCESS) {
@ -47,8 +48,7 @@ int cm_HaveAccessRights(struct cm_scache *scp, struct cm_user *userp, afs_uint32
#endif
didLock = 0;
if (scp->fileType == CM_SCACHETYPE_DIRECTORY) {
aclScp = scp;
cm_HoldSCache(scp);
aclScp = scp; /* not held, not released */
} else {
cm_SetFid(&tfid, scp->fid.cell, scp->fid.volume, scp->parentVnode, scp->parentUnique);
aclScp = cm_FindSCache(&tfid);
@ -71,6 +71,7 @@ int cm_HaveAccessRights(struct cm_scache *scp, struct cm_user *userp, afs_uint32
}
didLock = 1;
}
release = 1;
}
lock_AssertMutex(&aclScp->mx);
@ -135,6 +136,7 @@ int cm_HaveAccessRights(struct cm_scache *scp, struct cm_user *userp, afs_uint32
done:
if (didLock)
lock_ReleaseMutex(&aclScp->mx);
if (release)
cm_ReleaseSCache(aclScp);
return code;
}