Unite CacheFetchProcs and add abstraction calls.
[openafs.git] / src / afs / afs_chunkops.h
index 4ee8876..4e117c0 100644 (file)
       Chunks are 0 based and go up by exactly 1, covering the file.
       The other fields are internal and shouldn't be used */
 /* basic parameters */
-#ifdef AFS_NOCHUNKING
-
-#define        AFS_OTHERCSIZE  0x10000
-#define        AFS_LOGCHUNK    16
-#define        AFS_FIRSTCSIZE  0x40000000
-
-#else /* AFS_NOCHUNKING */
 
 #define AFS_OTHERCSIZE  (afs_OtherCSize)
 #define AFS_LOGCHUNK    (afs_LogChunk)
 #define AFS_DEFAULTCSIZE 0x10000
 #define AFS_DEFAULTLSIZE 16
 
-#endif /* AFS_NOCHUNKING */
-
-#define AFS_MINCHUNK 13  /* 8k is minimum */
-#define AFS_MAXCHUNK 18  /* 256K is maximum */
-
 #define AFS_CHUNKOFFSET(offset) ((offset < afs_FirstCSize) ? offset : \
                         ((offset - afs_FirstCSize) & (afs_OtherCSize - 1)))
 
  */
 
 struct afs_cacheOps {
-#if defined(AFS_SUN57_64BIT_ENV) || defined(AFS_SGI62_ENV)
-    void *(*open)(ino_t ainode);
-#else
-    void *(*open)(afs_int32 ainode);
-#endif
-    int (*truncate)(struct osi_file *fp, afs_int32 len);
-    int (*fread)(struct osi_file *fp, int offset, void *buf, afs_int32 len);
-    int (*fwrite)(struct osi_file *fp, afs_int32 offset, void *buf, afs_int32 len);
-    int (*close)(struct osi_file *fp);
-    int (*vread)(register struct vcache *avc, struct uio *auio, 
-        struct AFS_UCRED *acred, daddr_t albn, struct buf **abpp, int noLock);
-    int (*vwrite)(register struct vcache *avc, struct uio *auio,
-        int aio, struct AFS_UCRED *acred, int noLock);
-    int (*FetchProc)(register struct rx_call *acall, 
-        struct osi_file *afile, afs_size_t abase, struct dcache *adc, 
-        struct vcache *avc, afs_size_t *abytesToXferP, 
-        afs_size_t *abytesXferredP, afs_int32 lengthFound);
-    int (*StoreProc)(register struct rx_call *acall, 
-        struct osi_file *afile, register afs_int32 alen, struct vcache *avc, 
-        int *shouldWake, afs_size_t *abytesToXferP, afs_size_t *abytesXferredP);
-    struct dcache *(*GetDSlot)(register afs_int32 aslot, register struct dcache *tmpdc);
-    struct volume *(*GetVolSlot)(void);
-    int (*HandleLink)(register struct vcache *avc, struct vrequest *areq);
+    void *(*open) (afs_dcache_id_t *ainode);
+    int (*truncate) (struct osi_file * fp, afs_int32 len);
+    int (*fread) (struct osi_file * fp, int offset, void *buf, afs_int32 len);
+    int (*fwrite) (struct osi_file * fp, afs_int32 offset, void *buf,
+                  afs_int32 len);
+    int (*close) (struct osi_file * fp);
+    int (*vread) (register struct vcache * avc, struct uio * auio,
+                 struct AFS_UCRED * acred, daddr_t albn, struct buf ** abpp,
+                 int noLock);
+    int (*vwrite) (register struct vcache * avc, struct uio * auio, int aio,
+                  struct AFS_UCRED * acred, int noLock);
+    int (*FetchProc) (register struct rx_call * acall,
+                     struct osi_file * afile, afs_size_t abase,
+                     struct dcache * adc, struct vcache * avc,
+                     afs_size_t * abytesToXferP, afs_size_t * abytesXferredP,
+                     afs_int32 lengthFound);
+    int (*StoreProc) (register struct rx_call * acall,
+                     struct osi_file * afile, register afs_int32 alen,
+                     struct vcache * avc, int *shouldWake,
+                     afs_size_t * abytesToXferP,
+                     afs_size_t * abytesXferredP);
+    struct dcache *(*GetDSlot) (register afs_int32 aslot,
+                               register struct dcache * tmpdc);
+    struct volume *(*GetVolSlot) (void);
+    int (*HandleLink) (register struct vcache * avc, struct vrequest * areq);
 };
 
 /* Ideally we should have used consistent naming - like COP_OPEN, COP_TRUNCATE, etc. */
@@ -99,12 +89,21 @@ struct afs_cacheOps {
 #define        afs_GetVolSlot()                (*(afs_cacheType->GetVolSlot))()
 #define        afs_HandleLink(avc, areq)       (*(afs_cacheType->HandleLink))(avc, areq)
 
-#define        afs_CacheFetchProc(call, file, base, adc, avc, toxfer, xfered, length) \
-          (*(afs_cacheType->FetchProc))(call, file, (afs_size_t)base, adc, avc, (afs_size_t *)toxfer, (afs_size_t *)xfered, length)
-#define        afs_CacheStoreProc(call, file, bytes, avc, wake, toxfer, xfered) \
-          (*(afs_cacheType->StoreProc))(call, file, bytes, avc, wake, toxfer, xfered)
+/* These memcpys should get optimised to simple assignments when afs_dcache_id_t 
+ * is simple */
+static_inline void afs_copy_inode(afs_dcache_id_t *dst, afs_dcache_id_t *src) {
+    memcpy(dst, src, sizeof(afs_dcache_id_t));
+}
 
-#endif /* AFS_CHUNKOPS */
+static_inline void afs_reset_inode(afs_dcache_id_t *i) {
+    memset(i, 0, sizeof(afs_dcache_id_t));
+}
 
+/* We need to have something we can output as the 'inode' for fstrace calls. 
+ * This is a hack */
+static_inline int afs_inode2trace(afs_dcache_id_t *i) {
+    return i->mem;
+}
 
 
+#endif /* AFS_CHUNKOPS */