* directory or online at http://www.openafs.org/dl/license10.html
*/
-#ifndef __CM_SCACHE_H_ENV__
-#define __CM_SCACHE_H_ENV__ 1
+#ifndef OPENAFS_WINNT_AFSD_CM_SCACHE_H
+#define OPENAFS_WINNT_AFSD_CM_SCACHE_H 1
#define MOUNTPOINTLEN 1024 /* max path length for symlink; same as AFSPATHMAX */
typedef struct cm_key {
afs_offs_t process_id; /* process IDs can be 64bit on 64bit environments */
afs_uint16 session_id;
- afs_uint16 file_id;
+ afs_uint64 file_id; /* afs redir uses File Object pointers as file id */
} cm_key_t;
typedef struct cm_range {
* cm_scacheLock] */
} cm_file_lock_t;
+#define fileq_to_cm_file_lock_t(q) ((cm_file_lock_t *)((char *) (q) - offsetof(cm_file_lock_t, fileq)))
+
#define CM_FILELOCK_FLAG_DELETED 0x01
#define CM_FILELOCK_FLAG_LOST 0x02
* the link contents here.
*/
cm_fid_t mountRootFid; /* mounted on root */
- time_t mountRootGen; /* time to update mountRootFidp? */
+ time_t mountRootGen; /* time to update mountRootFid? */
cm_fid_t dotdotFid; /* parent of volume root */
/* callback info */
have CM_FILELOCK_FLAG_CLIENTONLY
set. */
- afs_uint32 fsLockCount; /* number of locks held as reported
+ afs_int32 fsLockCount; /* number of locks held as reported
* by the file server in the most
- * recent fetch status.
+ * recent fetch status. Updated by
+ * the locks known to have been acquired
+ * or released by this client.
*/
/* bulk stat progress */
Holds queue of
cm_scache_waiter_t
objects. Protected by
- cm_cacheLock. */
+ cm_scacheLock. */
osi_queue_t * waitQueueT; /* locked by cm_scacheLock */
+
+ /* redirector state - protected by scp->rw */
+ osi_queue_t * redirQueueH; /* LRU queue of buffers for this
+ file that are assigned to the
+ afsredir kernel module. */
+ osi_queue_t * redirQueueT;
+ afs_uint32 redirBufCount; /* Number of buffers held by the redirector */
+ time_t redirLastAccess; /* last time redir accessed the vnode */
} cm_scache_t;
/* dataVersion */
* this is a truncate op. */
#define CM_SCACHEFLAG_INHASH 0x40 /* in the hash table */
#define CM_SCACHEFLAG_BULKSTATTING 0x80 /* doing a bulk stat */
+#define CM_SCACHEFLAG_SIZESETTING 0x100 /* Stabilized; Truncate */
#define CM_SCACHEFLAG_WAITING 0x200 /* waiting for fetch/store
* state to change */
#define CM_SCACHEFLAG_PURERO 0x400 /* read-only (not even backup);
#define CM_SCACHEFLAG_EACCESS 0x200000 /* Bulk Stat returned EACCES */
#define CM_SCACHEFLAG_SMB_FID 0x400000
#define CM_SCACHEFLAG_LOCAL 0x800000 /* Locally modified */
+#define CM_SCACHEFLAG_BULKREADING 0x1000000/* Bulk read in progress */
+#define CM_SCACHEFLAG_RDR_IN_USE 0x2000000/* in use by Redirector; advisory */
/* sync flags for calls to the server. The CM_SCACHEFLAG_FETCHING,
* CM_SCACHEFLAG_STORING and CM_SCACHEFLAG_SIZESTORING flags correspond to the
#define CM_SCACHESYNC_FORCECB 0x200000/* when calling cm_GetCallback()
* set the force flag */
+#define CM_SCACHESYNC_BULKREAD 0x400000/* reading many buffers */
+
/* flags for cm_RecycleSCache */
#define CM_SCACHE_RECYCLEFLAG_DESTROY_BUFFERS 0x1
*/
#define CM_MERGEFLAG_STOREDATA 2 /* Merge due to storedata op */
#define CM_MERGEFLAG_DIROP 4 /* Merge due to directory op */
+#define CM_MERGEFLAG_FETCHDATA 8 /* Merge due to fetchdata op */
/* hash define. Must not include the cell, since the callback revocation code
* doesn't necessarily know the cell in the case of a multihomed server
extern void cm_ResetSCacheDirectory(cm_scache_t *scp, afs_int32 locked);
extern cm_scache_t * cm_RootSCachep(cm_user_t *userp, cm_req_t *reqp);
-#endif /* __CM_SCACHE_H_ENV__ */
+#endif /* OPENAFS_WINNT_AFSD_CM_SCACHE_H */