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 */
-
-extern afs_int32 afs_OtherCSize, afs_LogChunk, afs_FirstCSize;
-#ifdef AFS_64BIT_CLIENT
-#ifdef AFS_VM_RDWR_ENV
-extern afs_size_t afs_vmMappingEnd;
-#endif /* AFS_VM_RDWR_ENV */
-#endif /* AFS_64BIT_CLIENT */
#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 */
-
-#ifdef notdef
-extern int afs_ChunkOffset(), afs_Chunk(), afs_ChunkBase(), afs_ChunkSize(),
- afs_ChunkToBase(), afs_ChunkToSize();
-
-/* macros */
-#define AFS_CHUNKOFFSET(x) afs_ChunkOffset(x)
-#define AFS_CHUNK(x) afs_Chunk(x)
-#define AFS_CHUNKBASE(x) afs_ChunkBase(x)
-#define AFS_CHUNKSIZE(x) afs_ChunkSize(x)
-#define AFS_CHUNKTOBASE(x) afs_ChunkToBase(x)
-#define AFS_CHUNKTOSIZE(x) afs_ChunkToSize(x)
-#endif
-
#define AFS_CHUNKOFFSET(offset) ((offset < afs_FirstCSize) ? offset : \
((offset - afs_FirstCSize) & (afs_OtherCSize - 1)))
#define AFS_SETCHUNKSIZE(chunk) { afs_LogChunk = chunk; \
afs_FirstCSize = afs_OtherCSize = (1 << chunk); }
-
-extern void afs_CacheTruncateDaemon();
-
/*
* Functions exported by a cache type
*/
-extern struct afs_cacheOps *afs_cacheType;
-
struct afs_cacheOps {
- void *(*open)();
- int (*truncate)();
- int (*fread)();
- int (*fwrite)();
- int (*close)();
- int (*vread)();
- int (*vwrite)();
- int (*FetchProc)();
- int (*StoreProc)();
- struct dcache *(*GetDSlot)();
- struct volume *(*GetVolSlot)();
- int (*HandleLink)();
+ 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. */
#define afs_CacheStoreProc(call, file, bytes, avc, wake, toxfer, xfered) \
(*(afs_cacheType->StoreProc))(call, file, bytes, avc, wake, toxfer, xfered)
-#endif /* AFS_CHUNKOPS */
+/* 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));
+}
+
+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 */