Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

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