windows-cm_req-layer-purity-20080711
authorJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 11 Jul 2008 23:25:21 +0000 (23:25 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 11 Jul 2008 23:25:21 +0000 (23:25 +0000)
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
src/WINNT/afsd/cm_ioctl.c
src/WINNT/afsd/cm_ioctl.h
src/WINNT/afsd/smb_ioctl.c

index a49872d..6a1db66 100644 (file)
@@ -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;
index 3457bb1..af08b90 100644 (file)
@@ -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; i<cm_data.scacheHashTableSize; i++) {
@@ -531,7 +528,7 @@ cm_IoctlFlushAllVolumes(struct cm_ioctl *ioctlp, struct cm_user *userp)
            lock_ReleaseWrite(&cm_scacheLock);
 
            /* now flush the file */
-           code = cm_FlushFile(scp, userp, &req);
+           code = cm_FlushFile(scp, userp, reqp);
            lock_ObtainWrite(&cm_scacheLock);
            cm_ReleaseSCacheNoLock(scp);
         }
@@ -3077,7 +3074,7 @@ cm_IoctlPathAvailability(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scac
  * Assumes that pioctl path has been parsed or skipped.
  */
 afs_int32
-cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp)
+cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp)
 {
     afs_int32 code;
     cm_cell_t *cellp = NULL;
@@ -3085,9 +3082,6 @@ cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp)
     cm_vol_state_t *statep;
     struct VolStatTest * testp;
     afs_uint32 n;
-    cm_req_t req;
-
-    cm_InitReq(&req);
 
     testp = (struct VolStatTest *)ioctlp->inDatap;
 
@@ -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;
index c2ab26a..1a327eb 100644 (file)
@@ -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);
 
index 739f81c..f1a3798 100644 (file)
@@ -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);
 }