extern void RDR_InitIoctl(void);
-extern void RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *userp);
+extern void RDR_ShutdownIoctl(void);
+
+extern void RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *userp, cm_req_t *reqp);
extern void RDR_CleanupIoctl(ULONG index);
extern afs_int32 RDR_IoctlRead(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer,
- ULONG *pBytesProcessed, cm_req_t *reqp, afs_uint32 pflags);
+ ULONG *pBytesProcessed, afs_uint32 pflags);
-extern afs_int32 RDR_IoctlWrite(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer,
- cm_req_t *reqp);
+extern afs_int32 RDR_IoctlWrite(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer);
#ifdef RDR_IOCTL_PRIVATE
typedef struct RDR_ioctl {
cm_fid_t rootFid;
cm_scache_t *parentScp;
cm_ioctl_t ioctl;
+ afs_uint32 flags;
+ afs_int32 refCount; /* RDR_globalIoctlLock */
+ cm_req_t req;
} RDR_ioctl_t;
+#define RDR_IOCTL_FLAG_CLEANED 1
+
/* procedure implementing an ioctl */
typedef long (RDR_ioctlProc_t)(RDR_ioctl_t *, struct cm_user *userp, afs_uint32 pflags);
extern RDR_ioctl_t *RDR_FindIoctl(ULONG index);
-extern afs_int32 RDR_ParseIoctlPath(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
- cm_scache_t **scpp, afs_uint32 flags);
-
-extern afs_int32 RDR_ParseIoctlParent(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
- cm_scache_t **scpp, wchar_t *leafp);
-
extern afs_int32
RDR_IoctlSetToken(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pflags);
extern afs_int32 RDR_IoctlSetVerifyData(RDR_ioctl_t *ioctlp, cm_user_t *userp, afs_uint32 pflags);
+extern afs_int32 RDR_IoctlGetCallerAccess(RDR_ioctl_t *ioctlp, cm_user_t *userp, afs_uint32 pflags);
+
#endif