1 #ifndef _AFFS_FS_I
2 #define _AFFS_FS_I
3 
4 #include <linux/a.out.h>
5 
6 // move this to linux/coda.h!!!
7 #include <linux/time.h>
8 
9 #define AFFS_CACHE_SIZE		PAGE_SIZE
10 //#define AFFS_CACHE_SIZE		(4*4)
11 
12 #define AFFS_MAX_PREALLOC	32
13 #define AFFS_LC_SIZE		(AFFS_CACHE_SIZE/sizeof(u32)/2)
14 #define AFFS_AC_SIZE		(AFFS_CACHE_SIZE/sizeof(struct affs_ext_key)/2)
15 #define AFFS_AC_MASK		(AFFS_AC_SIZE-1)
16 
17 struct affs_ext_key {
18 	u32	ext;				/* idx of the extended block */
19 	u32	key;				/* block number */
20 };
21 
22 /*
23  * affs fs inode data in memory
24  */
25 struct affs_inode_info {
26 	u32	 i_opencnt;
27 	struct semaphore i_link_lock;		/* Protects internal inode access. */
28 	struct semaphore i_ext_lock;		/* Protects internal inode access. */
29 #define i_hash_lock i_ext_lock
30 	u32	 i_blkcnt;			/* block count */
31 	u32	 i_extcnt;			/* extended block count */
32 	u32	*i_lc;				/* linear cache of extended blocks */
33 	u32	 i_lc_size;
34 	u32	 i_lc_shift;
35 	u32	 i_lc_mask;
36 	struct affs_ext_key *i_ac;		/* associative cache of extended blocks */
37 	u32	 i_ext_last;			/* last accessed extended block */
38 	struct buffer_head *i_ext_bh;		/* bh of last extended block */
39 	unsigned long mmu_private;
40 	u32	 i_protect;			/* unused attribute bits */
41 	u32	 i_lastalloc;			/* last allocated block */
42 	int	 i_pa_cnt;			/* number of preallocated blocks */
43 #if 0
44 	s32	 i_original;			/* if != 0, this is the key of the original */
45 	u32	 i_data[AFFS_MAX_PREALLOC];	/* preallocated blocks */
46 	int	 i_cache_users;			/* Cache cannot be freed while > 0 */
47 	unsigned char i_hlink;			/* This is a fake */
48 	unsigned char i_pad;
49 	s32	 i_parent;			/* parent ino */
50 #endif
51 };
52 
53 /* short cut to get to the affs specific inode data */
54 #define AFFS_INODE	(&inode->u.affs_i)
55 #define AFFS_DIR	(&dir->u.affs_i)
56 
57 #endif
58