Windows: Enforce Share Access
[openafs.git] / src / WINNT / afsd / cm_scache.h
index b54c2f9..3829d6e 100644 (file)
@@ -7,8 +7,8 @@
  * 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 */
 
@@ -26,7 +26,7 @@ typedef struct cm_fid {
 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 {
@@ -62,6 +62,8 @@ typedef struct cm_file_lock {
                                  * 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
 
@@ -145,7 +147,7 @@ typedef struct cm_scache {
                                         * 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 */
@@ -193,9 +195,11 @@ typedef struct cm_scache {
                                    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 */
@@ -221,8 +225,16 @@ typedef struct cm_scache {
                                        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 */
@@ -253,6 +265,7 @@ typedef struct cm_scache {
                                                 * 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);
@@ -274,6 +287,8 @@ typedef struct cm_scache {
 #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
@@ -311,6 +326,8 @@ typedef struct cm_scache {
 #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
 
@@ -321,6 +338,7 @@ typedef struct cm_scache {
                                                  */
 #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
@@ -431,4 +449,4 @@ extern int cm_DumpSCache(FILE *outputFile, char *cookie, int lock);
 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 */