From cf81cd790f71b7ce83c802df8e7094f93bff63fb Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 30 Mar 2012 12:24:43 -0400 Subject: [PATCH] Windows: add parent FID to cm_GetSCache When a cm_scache_t object is created in 98% of the time, the parent FID is known to the cache manager. Normally the cache manager will obtain the parent info from the AFSFetchStatus structure but if the user credentials do not permit status info to be obtained from the file server the parent info will be unavailable. Having the parent directory FID is useful for debugging but can also be used to check the user's access rights on the parent directory. Change-Id: I262345bc686392a4edef4c627182a8a67a392aa2 Reviewed-on: http://gerrit.openafs.org/6993 Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/afsd_init.c | 2 +- src/WINNT/afsd/cm_access.c | 2 +- src/WINNT/afsd/cm_buf.c | 13 ++++---- src/WINNT/afsd/cm_scache.c | 30 ++++++++++++++----- src/WINNT/afsd/cm_scache.h | 4 +-- src/WINNT/afsd/cm_vnodeops.c | 18 +++++------ src/WINNT/afsd/cm_volume.c | 2 +- src/WINNT/afsd/rpc_srvsvc.c | 2 +- src/WINNT/afsd/smb.c | 2 +- src/WINNT/afsd/smb3.c | 4 +-- src/WINNT/afsd/smb_ioctl.c | 26 ++++++++-------- src/WINNT/afsrdr/user/RDRFunction.c | 59 +++++++++++++++++-------------------- src/WINNT/afsrdr/user/RDRIoctl.c | 34 ++++++++++----------- src/WINNT/afsrdr/user/RDRPipe.c | 4 +-- 14 files changed, 106 insertions(+), 96 deletions(-) diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index b376045..72bf229 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -480,7 +480,7 @@ afsd_InitRoot(char **reasonP) cm_SetFid(&cm_data.rootFid, cm_data.rootCellp->cellID, cm_GetROVolumeID(cm_data.rootVolumep), 1, 1); } - code = cm_GetSCache(&cm_data.rootFid, &cm_data.rootSCachep, cm_rootUserp, &req); + code = cm_GetSCache(&cm_data.rootFid, NULL, &cm_data.rootSCachep, cm_rootUserp, &req); afsi_log("cm_GetSCache code %x scache %x", code, (code ? (cm_scache_t *)-1 : cm_data.rootSCachep)); if (code != 0) { diff --git a/src/WINNT/afsd/cm_access.c b/src/WINNT/afsd/cm_access.c index 24807fc..23b48b7 100644 --- a/src/WINNT/afsd/cm_access.c +++ b/src/WINNT/afsd/cm_access.c @@ -171,7 +171,7 @@ long cm_GetAccessRights(struct cm_scache *scp, struct cm_user *userp, /* not a dir, use parent dir's acl */ cm_SetFid(&tfid, scp->fid.cell, scp->fid.volume, scp->parentVnode, scp->parentUnique); lock_ReleaseWrite(&scp->rw); - code = cm_GetSCache(&tfid, &aclScp, userp, reqp); + code = cm_GetSCache(&tfid, NULL, &aclScp, userp, reqp); if (code) { lock_ObtainWrite(&scp->rw); goto _done; diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index e64b1f4..5e9d3cf 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -816,13 +816,12 @@ afs_uint32 buf_CleanLocked(cm_scache_t *scp, cm_buf_t *bp, cm_req_t *reqp, * that the cm_scache_t was recycled out of the cache even though * a cm_buf_t with the same FID is in the cache. */ - if (scp == NULL) { - if ((scp = cm_FindSCache(&bp->fid)) || - (cm_GetSCache(&bp->fid, &scp, - bp->userp ? bp->userp : cm_rootUserp, - reqp) == 0)) { - release_scp = 1; - } + if (scp == NULL && + cm_GetSCache(&bp->fid, NULL, &scp, + bp->userp ? bp->userp : cm_rootUserp, + reqp) == 0) + { + release_scp = 1; } while ((bp->flags & CM_BUF_DIRTY) == CM_BUF_DIRTY) { diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index b6ac7ce..d69e7e8 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -720,10 +720,10 @@ cm_scache_t *cm_FindSCache(cm_fid_t *fidp) } #ifdef DEBUG_REFCOUNT -long cm_GetSCacheDbg(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, +long cm_GetSCacheDbg(cm_fid_t *fidp, cm_fid_t *parentFidp, cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp, char * file, long line) #else -long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, +long cm_GetSCache(cm_fid_t *fidp, cm_fid_t *parentFidp, cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp) #endif { @@ -766,6 +766,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, cm_data.fakeDirVersion != scp->dataVersion) break; #endif + if (parentFidp && scp->parentVnode == 0) { + scp->parentVnode = parentFidp->vnode; + scp->parentUnique = parentFidp->unique; + } cm_HoldSCacheNoLock(scp); *outScpp = scp; lock_ConvertRToW(&cm_scacheLock); @@ -811,10 +815,11 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, lock_ObtainWrite(&scp->rw); } scp->fid = *fidp; - scp->dotdotFid.cell=AFS_FAKE_ROOT_CELL_ID; - scp->dotdotFid.volume=AFS_FAKE_ROOT_VOL_ID; - scp->dotdotFid.unique=1; - scp->dotdotFid.vnode=1; + cm_SetFid(&scp->dotdotFid,AFS_FAKE_ROOT_CELL_ID,AFS_FAKE_ROOT_VOL_ID,1,1); + if (parentFidp) { + scp->parentVnode = parentFidp->vnode; + scp->parentUnique = parentFidp->unique; + } _InterlockedOr(&scp->flags, (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO)); lock_ObtainWrite(&cm_scacheLock); if (!(scp->flags & CM_SCACHEFLAG_INHASH)) { @@ -903,6 +908,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, afsi_log("%s:%d cm_GetSCache (3) scp 0x%p ref %d", file, line, scp, scp->refCount); osi_Log1(afsd_logp,"cm_GetSCache (3) scp 0x%p", scp); #endif + if (parentFidp && scp->parentVnode == 0) { + scp->parentVnode = parentFidp->vnode; + scp->parentUnique = parentFidp->unique; + } if (volp) cm_PutVolume(volp); cm_HoldSCacheNoLock(scp); @@ -923,7 +932,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, scp->fid = *fidp; if (!cm_freelanceEnabled || !isRoot) { /* if this scache entry represents a volume root then we need - * to copy the dotdotFipd from the volume structure where the + * to copy the dotdotFid from the volume structure where the * "master" copy is stored (defect 11489) */ if (volp->vol[ROVOL].ID == fidp->volume) { @@ -939,6 +948,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, scp->dotdotFid = cm_VolumeStateByType(volp, RWVOL)->dotdotFid; } } + if (parentFidp) { + scp->parentVnode = parentFidp->vnode; + scp->parentUnique = parentFidp->unique; + } if (volp) cm_PutVolume(volp); @@ -978,6 +991,9 @@ cm_scache_t * cm_FindSCacheParent(cm_scache_t * scp) cm_fid_t parent_fid; cm_scache_t * pscp = NULL; + if (scp->parentVnode == 0) + return NULL; + lock_ObtainWrite(&cm_scacheLock); cm_SetFid(&parent_fid, scp->fid.cell, scp->fid.volume, scp->parentVnode, scp->parentUnique); diff --git a/src/WINNT/afsd/cm_scache.h b/src/WINNT/afsd/cm_scache.h index 07521ca..6aca1a9 100644 --- a/src/WINNT/afsd/cm_scache.h +++ b/src/WINNT/afsd/cm_scache.h @@ -372,12 +372,12 @@ typedef struct cm_scache_waiter { extern void cm_InitSCache(int, long); #ifdef DEBUG_REFCOUNT -extern long cm_GetSCacheDbg(cm_fid_t *, cm_scache_t **, struct cm_user *, +extern long cm_GetSCacheDbg(cm_fid_t *, cm_fid_t *, cm_scache_t **, struct cm_user *, struct cm_req *, char *, long); #define cm_GetSCache(a,b,c,d) cm_GetSCacheDbg(a,b,c,d,__FILE__,__LINE__) #else -extern long cm_GetSCache(cm_fid_t *, cm_scache_t **, struct cm_user *, +extern long cm_GetSCache(cm_fid_t *, cm_fid_t *, cm_scache_t **, struct cm_user *, struct cm_req *); #endif diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 91dbcf1..51df2fe 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -905,7 +905,7 @@ long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp, if (scp->mountRootFid.cell != 0 && scp->mountRootGen >= cm_data.mountRootGen) { tfid = scp->mountRootFid; lock_ReleaseWrite(&scp->rw); - code = cm_GetSCache(&tfid, outScpp, userp, reqp); + code = cm_GetSCache(&tfid, NULL, outScpp, userp, reqp); lock_ObtainWrite(&scp->rw); return code; } @@ -1022,7 +1022,7 @@ long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp, tfid = scp->mountRootFid; lock_ReleaseWrite(&scp->rw); - code = cm_GetSCache(&tfid, outScpp, userp, reqp); + code = cm_GetSCache(&tfid, NULL, outScpp, userp, reqp); lock_ObtainWrite(&scp->rw); } @@ -1267,7 +1267,7 @@ notfound: if ( !tscp ) /* we did not find it in the dnlc */ { dnlcHit = 0; - code = cm_GetSCache(&rock.fid, &tscp, userp, reqp); + code = cm_GetSCache(&rock.fid, &dscp->fid, &tscp, userp, reqp); if (code) goto done; } @@ -1483,7 +1483,7 @@ long cm_EvaluateVolumeReference(clientchar_t * namep, long flags, cm_user_t * us cm_SetFid(&fid, cellp->cellID, volume, 1, 1); - code = cm_GetSCache(&fid, outScpp, userp, reqp); + code = cm_GetSCache(&fid, NULL, outScpp, userp, reqp); _exit_cleanup: if (fnamep) @@ -2374,7 +2374,7 @@ long cm_TryBulkProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp, !(tfid.vnode==0x1 && tfid.unique==0x1) ) { osi_Log0(afsd_logp, "cm_TryBulkProc Freelance calls cm_SCache on root.afs mountpoint"); - return cm_GetSCache(&tfid, &tscp, NULL, NULL); + return cm_GetSCache(&tfid, NULL, &tscp, NULL, NULL); } #endif /* AFS_FREELANCE_CLIENT */ @@ -2517,7 +2517,7 @@ cm_TryBulkStatRPC(cm_scache_t *dscp, cm_bulkStat_t *bbp, cm_user_t *userp, cm_re cm_req_t treq = *reqp; cm_Analyze(NULL, userp, &treq, &tfid, 0, &volSync, NULL, &cbReq, (&bbp->stats[j])->errorCode); } else { - code = cm_GetSCache(&tfid, &scp, userp, reqp); + code = cm_GetSCache(&tfid, &dscp->fid, &scp, userp, reqp); if (code != 0) continue; @@ -2953,7 +2953,7 @@ long cm_Create(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *a * info. */ if (code == 0) { - code = cm_GetSCache(&newFid, &scp, userp, reqp); + code = cm_GetSCache(&newFid, &dscp->fid, &scp, userp, reqp); if (code == 0) { lock_ObtainWrite(&scp->rw); scp->creator = userp; /* remember who created it */ @@ -3145,7 +3145,7 @@ long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t * * info. */ if (code == 0) { - code = cm_GetSCache(&newFid, &scp, userp, reqp); + code = cm_GetSCache(&newFid, &dscp->fid, &scp, userp, reqp); if (code == 0) { lock_ObtainWrite(&scp->rw); if (!cm_HaveCallback(scp)) { @@ -3396,7 +3396,7 @@ long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, lo * info. */ if (code == 0) { - code = cm_GetSCache(&newFid, &scp, userp, reqp); + code = cm_GetSCache(&newFid, &dscp->fid, &scp, userp, reqp); if (code == 0) { lock_ObtainWrite(&scp->rw); if (!cm_HaveCallback(scp)) { diff --git a/src/WINNT/afsd/cm_volume.c b/src/WINNT/afsd/cm_volume.c index 59b17a4..43cefec 100644 --- a/src/WINNT/afsd/cm_volume.c +++ b/src/WINNT/afsd/cm_volume.c @@ -1855,7 +1855,7 @@ cm_VolumeRenewROCallbacks(void) cm_InitReq(&req); lock_ReleaseRead(&cm_volumeLock); - if (cm_GetSCache(&fid, &scp, cm_rootUserp, &req) == 0) { + if (cm_GetSCache(&fid, NULL, &scp, cm_rootUserp, &req) == 0) { lock_ObtainWrite(&scp->rw); cm_GetCallback(scp, cm_rootUserp, &req, 1); lock_ReleaseWrite(&scp->rw); diff --git a/src/WINNT/afsd/rpc_srvsvc.c b/src/WINNT/afsd/rpc_srvsvc.c index 2679106..33f8210 100644 --- a/src/WINNT/afsd/rpc_srvsvc.c +++ b/src/WINNT/afsd/rpc_srvsvc.c @@ -628,7 +628,7 @@ NET_API_STATUS NetrShareEnum( continue; } - cm_GetSCache(&entryp->fid, &scp, userp, &req); + cm_GetSCache(&entryp->fid, NULL, &scp, userp, &req); switch (InfoStruct->Level) { case 2: diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 28feb57..b7e6bdd 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -4711,7 +4711,7 @@ smb_ApplyDirListPatches(cm_scache_t * dscp, smb_dirListPatch_t **dirPatchespp, reqp->relPathp = path; reqp->tidPathp = tidPathp; - code = cm_GetSCache(&patchp->fid, &scp, userp, reqp); + code = cm_GetSCache(&patchp->fid, &dscp->fid, &scp, userp, reqp); reqp->relPathp = reqp->tidPathp = NULL; if (code) { diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 2f340b0..3e11598 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -4588,7 +4588,7 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, smb_dirListPatch_t **dirPatchespp, if (patchp->flags & SMB_DIRLISTPATCH_IOCTL) continue; - code = cm_GetSCache(&patchp->fid, &tscp, userp, reqp); + code = cm_GetSCache(&patchp->fid, &dscp->fid, &tscp, userp, reqp); if (code == 0) { if (lock_TryWrite(&tscp->rw)) { /* we have an entry that we can look at */ @@ -4673,7 +4673,7 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, smb_dirListPatch_t **dirPatchespp, continue; } - code = cm_GetSCache(&patchp->fid, &scp, userp, reqp); + code = cm_GetSCache(&patchp->fid, &dscp->fid, &scp, userp, reqp); reqp->relPathp = reqp->tidPathp = NULL; if (code) continue; diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index aa692ad..9555070 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -1277,7 +1277,7 @@ smb_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp, afs_uint32 pflags) cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1331,7 +1331,7 @@ smb_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_ui cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1377,7 +1377,7 @@ smb_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1411,7 +1411,7 @@ smb_IoctlFlushFile(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 p cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1462,7 +1462,7 @@ smb_IoctlGetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_ui cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1522,7 +1522,7 @@ smb_IoctlGetFileType(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1556,7 +1556,7 @@ smb_IoctlGetOwner(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1590,7 +1590,7 @@ smb_IoctlWhereIs(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pfl cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1990,7 +1990,7 @@ smb_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_u cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -2041,7 +2041,7 @@ smb_IoctlSetOwner(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -2085,7 +2085,7 @@ smb_IoctlSetGroup(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -2123,7 +2123,7 @@ smb_IoctlGetUnixMode(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -2164,7 +2164,7 @@ smb_IoctlSetUnixMode(struct smb_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } diff --git a/src/WINNT/afsrdr/user/RDRFunction.c b/src/WINNT/afsrdr/user/RDRFunction.c index b9e27c5..8aca9b3 100644 --- a/src/WINNT/afsrdr/user/RDRFunction.c +++ b/src/WINNT/afsrdr/user/RDRFunction.c @@ -784,7 +784,7 @@ RDR_EnumerateDirectory( IN cm_user_t *userp, fid.unique = DirID.Unique; fid.hash = DirID.Hash; - code = cm_GetSCache(&fid, &dscp, userp, &req); + code = cm_GetSCache(&fid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -882,7 +882,7 @@ RDR_EnumerateDirectory( IN cm_user_t *userp, } if (bSkipStatus) { - code = cm_GetSCache(&entryp->fid, &scp, userp, &req); + code = cm_GetSCache(&entryp->fid, &dscp->fid, &scp, userp, &req); if (code) { osi_Log5(afsd_logp, "RDR_EnumerateDirectory cm_GetSCache failure cell %u vol %u vnode %u uniq %u code=0x%x", entryp->fid.cell, entryp->fid.volume, entryp->fid.vnode, entryp->fid.unique, code); @@ -1017,7 +1017,7 @@ RDR_EvaluateNodeByName( IN cm_user_t *userp, parentFid.unique = ParentID.Unique; parentFid.hash = ParentID.Hash; - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -1173,13 +1173,8 @@ RDR_EvaluateNodeByID( IN cm_user_t *userp, req.flags |= CM_REQ_WOW64; if (SourceID.Cell != 0) { - Fid.cell = SourceID.Cell; - Fid.volume = SourceID.Volume; - Fid.vnode = SourceID.Vnode; - Fid.unique = SourceID.Unique; - Fid.hash = SourceID.Hash; - - code = cm_GetSCache(&Fid, &scp, userp, &req); + cm_SetFid(&Fid, SourceID.Cell, SourceID.Volume, SourceID.Vnode, SourceID.Unique); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -1195,7 +1190,7 @@ RDR_EvaluateNodeByID( IN cm_user_t *userp, if (ParentID.Cell != 0) { cm_SetFid(&parentFid, ParentID.Cell, ParentID.Volume, ParentID.Vnode, ParentID.Unique); - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { cm_ReleaseSCache(scp); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -1211,7 +1206,7 @@ RDR_EvaluateNodeByID( IN cm_user_t *userp, cm_HoldSCache(dscp); } else if (scp->parentVnode) { cm_SetFid(&parentFid, SourceID.Cell, SourceID.Volume, scp->parentVnode, scp->parentUnique); - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { cm_ReleaseSCache(scp); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -1330,7 +1325,7 @@ RDR_CreateFileEntry( IN cm_user_t *userp, parentFid.unique = CreateCB->ParentId.Unique; parentFid.hash = CreateCB->ParentId.Hash; - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -1505,7 +1500,7 @@ RDR_UpdateFileEntry( IN cm_user_t *userp, parentFid.unique = UpdateCB->ParentId.Unique; parentFid.hash = UpdateCB->ParentId.Hash; - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -1548,7 +1543,7 @@ RDR_UpdateFileEntry( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, &dscp->fid, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -1722,7 +1717,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, parentFid.hash = CleanupCB->ParentId.Hash; if (parentFid.cell) { - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); if ( status == STATUS_INVALID_HANDLE) @@ -1764,7 +1759,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, &dscp->fid, &scp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_CleanupFileEntry cm_GetSCache object FID failure code=0x%x", code); @@ -2082,7 +2077,7 @@ RDR_DeleteFileEntry( IN cm_user_t *userp, parentFid.unique = ParentId.Unique; parentFid.hash = ParentId.Hash; - code = cm_GetSCache(&parentFid, &dscp, userp, &req); + code = cm_GetSCache(&parentFid, NULL, &dscp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); if ( status == STATUS_INVALID_HANDLE) @@ -2280,7 +2275,7 @@ RDR_RenameFileEntry( IN cm_user_t *userp, TargetParentFid.unique = TargetParentId.Unique; TargetParentFid.hash = TargetParentId.Hash; - code = cm_GetSCache(&SourceParentFid, &oldDscp, userp, &req); + code = cm_GetSCache(&SourceParentFid, NULL, &oldDscp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_RenameFileEntry cm_GetSCache source parent failed code 0x%x", code); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -2315,7 +2310,7 @@ RDR_RenameFileEntry( IN cm_user_t *userp, return; } - code = cm_GetSCache(&TargetParentFid, &newDscp, userp, &req); + code = cm_GetSCache(&TargetParentFid, NULL, &newDscp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_RenameFileEntry cm_GetSCache target parent failed code 0x%x", code); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -2392,7 +2387,7 @@ RDR_RenameFileEntry( IN cm_user_t *userp, TargetFid.cell, TargetFid.volume, TargetFid.vnode, TargetFid.unique); - code = cm_GetSCache(&TargetFid, &scp, userp, &req); + code = cm_GetSCache(&TargetFid, &newDscp->fid, &scp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_RenameFileEntry cm_GetSCache target failed code 0x%x", code); smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); @@ -2497,7 +2492,7 @@ RDR_FlushFileEntry( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -2673,7 +2668,7 @@ RDR_OpenFileEntry( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -2850,7 +2845,7 @@ RDR_ReleaseFileAccess( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -3222,7 +3217,7 @@ RDR_RequestFileExtentsAsync( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_RequestFileExtentsAsync cm_GetSCache FID failure code=0x%x", code); @@ -3475,7 +3470,7 @@ RDR_ReleaseFileExtents( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -3982,7 +3977,7 @@ RDR_ProcessReleaseFileExtentsResult( IN AFSReleaseFileExtentsResultCB *ReleaseFi goto cleanup_file; } - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_ProcessReleaseFileExtentsResult cm_GetSCache FID failure code=0x%x", code); @@ -4424,7 +4419,7 @@ RDR_ReleaseFailedSetFileExtents( IN cm_user_t *userp, goto cleanup_file; } - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { osi_Log1(afsd_logp, "RDR_ReleaseFailedSetFileExtents cm_GetSCache FID failure code=0x%x", code); @@ -4669,7 +4664,7 @@ RDR_ByteRangeLockSync( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -4797,7 +4792,7 @@ RDR_ByteRangeUnlock( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -4900,7 +4895,7 @@ RDR_ByteRangeUnlockAll( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; @@ -5008,7 +5003,7 @@ RDR_GetVolumeInfo( IN cm_user_t *userp, Fid.unique = FileId.Unique; Fid.hash = FileId.Hash; - code = cm_GetSCache(&Fid, &scp, userp, &req); + code = cm_GetSCache(&Fid, NULL, &scp, userp, &req); if (code) { smb_MapNTError(cm_MapRPCError(code, &req), &status, TRUE); (*ResultCB)->ResultStatus = status; diff --git a/src/WINNT/afsrdr/user/RDRIoctl.c b/src/WINNT/afsrdr/user/RDRIoctl.c index 37d7275..2b5bd6f 100644 --- a/src/WINNT/afsrdr/user/RDRIoctl.c +++ b/src/WINNT/afsrdr/user/RDRIoctl.c @@ -166,7 +166,7 @@ RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *u cm_ReleaseSCache(iop->parentScp); iop->parentScp = NULL; } - cm_GetSCache(parentFid, &iop->parentScp, userp, &req); + cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, &req); iop->rootFid = *rootFid; } } else { @@ -187,7 +187,7 @@ RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *u cm_HoldSCache(iop->parentScp); } else { iop->parentFid = *parentFid; - cm_GetSCache(parentFid, &iop->parentScp, userp, &req); + cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, &req); } if (rootFid->cell == 0) { iop->rootFid = cm_data.rootFid; @@ -581,7 +581,7 @@ RDR_ParseIoctlPath(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, } } } else { - code = cm_GetSCache(&ioctlp->parentFid, &substRootp, userp, reqp); + code = cm_GetSCache(&ioctlp->parentFid, NULL, &substRootp, userp, reqp); if (code) { osi_Log1(afsd_logp,"RDR_ParseIoctlPath [6] code 0x%x", code); if (free_path) @@ -791,7 +791,7 @@ RDR_ParseIoctlParent(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, } } } else { - code = cm_GetSCache(&ioctlp->rootFid, &substRootp, userp, reqp); + code = cm_GetSCache(&ioctlp->rootFid, NULL, &substRootp, userp, reqp); if (code) { osi_Log1(afsd_logp,"RDR_ParseIoctlParent [5] code 0x%x", code); return code; @@ -1071,7 +1071,7 @@ RDR_IoctlGetACL(RDR_ioctl_t *ioctlp, cm_user_t *userp, afs_uint32 pflags) cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1125,7 +1125,7 @@ RDR_IoctlGetFileCellName(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_ui cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1171,7 +1171,7 @@ RDR_IoctlFlushVolume(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1205,7 +1205,7 @@ RDR_IoctlFlushFile(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 p cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1256,7 +1256,7 @@ RDR_IoctlGetVolumeStatus(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_ui cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1316,7 +1316,7 @@ RDR_IoctlGetFileType(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1350,7 +1350,7 @@ RDR_IoctlGetOwner(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1384,7 +1384,7 @@ RDR_IoctlWhereIs(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pfl cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1784,7 +1784,7 @@ RDR_IoctlPathAvailability(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_u cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1835,7 +1835,7 @@ RDR_IoctlSetOwner(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1879,7 +1879,7 @@ RDR_IoctlSetGroup(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pf cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1916,7 +1916,7 @@ RDR_IoctlGetUnixMode(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } @@ -1957,7 +1957,7 @@ RDR_IoctlSetUnixMode(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 cm_SkipIoctlPath(&ioctlp->ioctl); cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, optionsp->fid.vnode, optionsp->fid.unique); - code = cm_GetSCache(&fid, &scp, userp, &req); + code = cm_GetSCache(&fid, NULL, &scp, userp, &req); } else { code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); } diff --git a/src/WINNT/afsrdr/user/RDRPipe.c b/src/WINNT/afsrdr/user/RDRPipe.c index f0f7685..e16b4db 100644 --- a/src/WINNT/afsrdr/user/RDRPipe.c +++ b/src/WINNT/afsrdr/user/RDRPipe.c @@ -109,7 +109,7 @@ RDR_SetupPipe( ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_ReleaseSCache(pipep->parentScp); pipep->parentScp = NULL; } - cm_GetSCache(parentFid, &pipep->parentScp, userp, &req); + cm_GetSCache(parentFid, NULL, &pipep->parentScp, userp, &req); pipep->rootFid = *rootFid; } } else { @@ -134,7 +134,7 @@ RDR_SetupPipe( ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_HoldSCache(pipep->parentScp); } else { pipep->parentFid = *parentFid; - cm_GetSCache(parentFid, &pipep->parentScp, userp, &req); + cm_GetSCache(parentFid, NULL, &pipep->parentScp, userp, &req); } if (rootFid->cell == 0) { pipep->rootFid = cm_data.rootFid; -- 1.9.4