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) {
#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);
}
didLock = 1;
}
+ release = 1;
}
lock_AssertMutex(&aclScp->mx);
done:
if (didLock)
lock_ReleaseMutex(&aclScp->mx);
- cm_ReleaseSCache(aclScp);
+ if (release)
+ cm_ReleaseSCache(aclScp);
return code;
}