if (!(dwFlags & RDR_POP_NO_GETSTATUS))
cm_SyncOpDone( scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
- if ((dwFlags & RDR_POP_NO_GETSTATUS) || !cm_HaveCallback(scp)) {
- pCurrentEntry->TargetNameOffset = 0;
- pCurrentEntry->TargetNameLength = 0;
- }
- else
+ pCurrentEntry->TargetNameOffset = 0;
+ pCurrentEntry->TargetNameLength = 0;
+ if (!(dwFlags & RDR_POP_NO_GETSTATUS) && cm_HaveCallback(scp)) {
switch (scp->fileType) {
case CM_SCACHETYPE_MOUNTPOINT:
- if (dwFlags & RDR_POP_FOLLOW_MOUNTPOINTS) {
+ {
if ((code2 = cm_ReadMountPoint(scp, userp, reqp)) == 0) {
cm_scache_t *targetScp = NULL;
#endif
pCurrentEntry->TargetNameLength = (ULONG)(sizeof(WCHAR) * len);
- code2 = cm_FollowMountPoint(scp, dscp, userp, reqp, &targetScp);
-
- if (code2 == 0) {
- pCurrentEntry->TargetFileId.Cell = targetScp->fid.cell;
- pCurrentEntry->TargetFileId.Volume = targetScp->fid.volume;
- pCurrentEntry->TargetFileId.Vnode = targetScp->fid.vnode;
- pCurrentEntry->TargetFileId.Unique = targetScp->fid.unique;
- pCurrentEntry->TargetFileId.Hash = targetScp->fid.hash;
-
- osi_Log4(afsd_logp, "RDR_PopulateCurrentEntry target FID cell=0x%x vol=0x%x vn=0x%x uniq=0x%x",
- pCurrentEntry->TargetFileId.Cell, pCurrentEntry->TargetFileId.Volume,
- pCurrentEntry->TargetFileId.Vnode, pCurrentEntry->TargetFileId.Unique);
-
- cm_ReleaseSCache(targetScp);
- } else {
- osi_Log2(afsd_logp, "RDR_PopulateCurrentEntry cm_FollowMountPoint failed scp=0x%p code=0x%x",
- scp, code2);
+ if (dwFlags & RDR_POP_FOLLOW_MOUNTPOINTS) {
+ code2 = cm_FollowMountPoint(scp, dscp, userp, reqp, &targetScp);
+ if (code2 == 0) {
+ pCurrentEntry->TargetFileId.Cell = targetScp->fid.cell;
+ pCurrentEntry->TargetFileId.Volume = targetScp->fid.volume;
+ pCurrentEntry->TargetFileId.Vnode = targetScp->fid.vnode;
+ pCurrentEntry->TargetFileId.Unique = targetScp->fid.unique;
+ pCurrentEntry->TargetFileId.Hash = targetScp->fid.hash;
+
+ osi_Log4(afsd_logp, "RDR_PopulateCurrentEntry target FID cell=0x%x vol=0x%x vn=0x%x uniq=0x%x",
+ pCurrentEntry->TargetFileId.Cell, pCurrentEntry->TargetFileId.Volume,
+ pCurrentEntry->TargetFileId.Vnode, pCurrentEntry->TargetFileId.Unique);
+
+ cm_ReleaseSCache(targetScp);
+ } else {
+ osi_Log2(afsd_logp, "RDR_PopulateCurrentEntry cm_FollowMountPoint failed scp=0x%p code=0x%x",
+ scp, code2);
+ }
}
} else {
osi_Log2(afsd_logp, "RDR_PopulateCurrentEntry cm_ReadMountPoint failed scp=0x%p code=0x%x",
code2 = cm_HandleLink(scp, userp, reqp);
if (code2 == 0) {
- size_t wtarget_len = 0;
-
if (scp->mountPointStringp[0]) {
char * mp;
char * s;
size_t offset = 0;
+ size_t wtarget_len = 0;
len = strlen(scp->mountPointStringp) + 1;
mp = strdup(scp->mountPointStringp);
}
free(mp);
- }
- pCurrentEntry->TargetNameLength = (ULONG)(sizeof(WCHAR) * (wtarget_len - 1));
+ pCurrentEntry->TargetNameLength = (ULONG)(sizeof(WCHAR) * (wtarget_len - 1));
+ }
} else {
osi_Log2(afsd_logp, "RDR_PopulateCurrentEntry cm_HandleLink failed scp=0x%p code=0x%x",
scp, code2);
pCurrentEntry->TargetNameOffset = 0;
pCurrentEntry->TargetNameLength = 0;
}
+ }
lock_ReleaseWrite(&scp->rw);
dwEntryLength += pCurrentEntry->FileNameLength + pCurrentEntry->TargetNameLength;
entryp->name,
cm_shortNames && cm_Is8Dot3(entryp->name) ? NULL : entryp->shortName,
(bWow64 ? RDR_POP_WOW64 : 0) |
- (bSkipStatus ? RDR_POP_NO_GETSTATUS : 0),
+ (bSkipStatus ? RDR_POP_NO_GETSTATUS : 0) |
+ RDR_POP_EVALUATE_SYMLINKS,
code,
&pCurrentEntry, &dwMaxEntryLength);
cm_ReleaseSCache(scp);
dscp, scp, userp, &req,
FileName, shortName,
(bWow64 ? RDR_POP_WOW64 : 0) |
- (bNoFollow ? 0 : (RDR_POP_FOLLOW_MOUNTPOINTS | RDR_POP_EVALUATE_SYMLINKS)),
+ (bNoFollow ? 0 : RDR_POP_FOLLOW_MOUNTPOINTS) |
+ RDR_POP_EVALUATE_SYMLINKS,
0, NULL, &dwRemaining);
if (bHoldFid)
RDR_FlagScpInUse( scp, FALSE );
code = RDR_PopulateCurrentEntry(pCurrentEntry, dwRemaining,
dscp, scp, userp, &req, NULL, NULL,
(bWow64 ? RDR_POP_WOW64 : 0) |
- (bNoFollow ? 0 : (RDR_POP_FOLLOW_MOUNTPOINTS | RDR_POP_EVALUATE_SYMLINKS)),
+ (bNoFollow ? 0 : RDR_POP_FOLLOW_MOUNTPOINTS) |
+ RDR_POP_EVALUATE_SYMLINKS,
0, NULL, &dwRemaining);
if (bHoldFid)
pResultCB->AvailableAllocationUnits.QuadPart = volStat.PartBlocksAvail;
}
}
- } else {
+ } else if ( code != CM_ERROR_ALLBUSY &&
+ code != CM_ERROR_ALLOFFLINE &&
+ code != CM_ERROR_ALLDOWN)
+ {
/*
* Lie about the available space. Out of quota errors will need
* detected when the file server rejects the store data.