From 30ba65bc5c216f73f89acf2aa97a4287a4de1f1f Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 11 Jul 2008 23:25:21 +0000 Subject: [PATCH] windows-cm_req-layer-purity-20080711 LICENSE MIT Ensure that the cm_req_t object is allocated and initialized at the SMB layer for all incoming requests. This is done for two reasons: 1. ensure that request start time is consistent across the lifetime of the request 2. permit the request object to be used to carry a flag indicating the source of the request. This will permit different timeout algorithms to be used for SMB vs RDR in the future. --- src/WINNT/afsd/cm_dir.c | 2 +- src/WINNT/afsd/cm_ioctl.c | 16 +++++----------- src/WINNT/afsd/cm_ioctl.h | 4 ++-- src/WINNT/afsd/smb_ioctl.c | 12 ++++++++++-- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/WINNT/afsd/cm_dir.c b/src/WINNT/afsd/cm_dir.c index a49872de1..6a1db665b 100644 --- a/src/WINNT/afsd/cm_dir.c +++ b/src/WINNT/afsd/cm_dir.c @@ -976,7 +976,7 @@ cm_BeginDirOp(cm_scache_t * scp, cm_user_t * userp, cm_req_t * reqp, op->scp = scp; cm_HoldUser(userp); op->userp = userp; - cm_InitReq(&op->req); + op->req = *reqp; /* copy the values from the input */ op->dirtyBufCount = 0; op->nBuffers = 0; diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 3457bb118..af08b90b2 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -515,14 +515,11 @@ cm_IoctlSetACL(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, * Assumes that pioctl path has been parsed or skipped. */ afs_int32 -cm_IoctlFlushAllVolumes(struct cm_ioctl *ioctlp, struct cm_user *userp) +cm_IoctlFlushAllVolumes(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp) { afs_int32 code; cm_scache_t *scp; int i; - cm_req_t req; - - cm_InitReq(&req); lock_ObtainWrite(&cm_scacheLock); for (i=0; iinDatap; @@ -3139,11 +3133,11 @@ cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp) if (n) testp->fid.volume = n; else - code = cm_FindVolumeByName(cellp, testp->volname, userp, &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp); + code = cm_FindVolumeByName(cellp, testp->volname, userp, reqp, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp); } if (testp->fid.volume > 0) - code = cm_FindVolumeByID(cellp, testp->fid.volume, userp, &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp); + code = cm_FindVolumeByID(cellp, testp->fid.volume, userp, reqp, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp); if (code) return code; diff --git a/src/WINNT/afsd/cm_ioctl.h b/src/WINNT/afsd/cm_ioctl.h index c2ab26aee..1a327ebbb 100644 --- a/src/WINNT/afsd/cm_ioctl.h +++ b/src/WINNT/afsd/cm_ioctl.h @@ -164,7 +164,7 @@ extern afs_int32 cm_IoctlGetFileCellName(cm_ioctl_t *ioctlp, cm_user_t *userp, c extern afs_int32 cm_IoctlSetACL(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp); -extern afs_int32 cm_IoctlFlushAllVolumes(cm_ioctl_t *ioctlp, cm_user_t *userp); +extern afs_int32 cm_IoctlFlushAllVolumes(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp); extern afs_int32 cm_IoctlFlushVolume(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp); @@ -266,7 +266,7 @@ extern afs_int32 cm_IoctlPathAvailability(struct cm_ioctl * ioctlp, struct cm_us extern afs_int32 cm_IoctlGetFileType(cm_ioctl_t *ioctlp, cm_user_t *userp, struct cm_scache *scp, struct cm_req *reqp); -extern afs_int32 cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp); +extern afs_int32 cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp); extern afs_int32 cm_IoctlUnicodeControl(struct cm_ioctl *ioctlp, struct cm_user * userp); diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index 739f81c34..f1a379845 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -1180,9 +1180,13 @@ smb_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp) afs_int32 smb_IoctlFlushAllVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp) { + cm_req_t req; + + cm_InitReq(&req); + cm_SkipIoctlPath(&ioctlp->ioctl); /* we don't care about the path */ - return cm_IoctlFlushAllVolumes(&ioctlp->ioctl, userp); + return cm_IoctlFlushAllVolumes(&ioctlp->ioctl, userp, &req); } afs_int32 @@ -1825,7 +1829,11 @@ smb_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp) afs_int32 smb_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp) { + cm_req_t req; + + cm_InitReq(&req); + cm_SkipIoctlPath(&ioctlp->ioctl); - return cm_IoctlVolStatTest(&ioctlp->ioctl, userp); + return cm_IoctlVolStatTest(&ioctlp->ioctl, userp, &req); } -- 2.39.5