Merge branch 'upstream'
[sfrench/cifs-2.6.git] / include / linux / efs_fs_i.h
1 /*
2  * efs_fs_i.h
3  *
4  * Copyright (c) 1999 Al Smith
5  *
6  * Portions derived from IRIX header files (c) 1988 Silicon Graphics
7  */
8
9 #ifndef __EFS_FS_I_H__
10 #define __EFS_FS_I_H__
11
12 typedef int32_t         efs_block_t;
13 typedef uint32_t        efs_ino_t;
14
15 #define EFS_DIRECTEXTENTS       12
16
17 /*
18  * layout of an extent, in memory and on disk. 8 bytes exactly.
19  */
20 typedef union extent_u {
21         unsigned char raw[8];
22         struct extent_s {
23                 unsigned int    ex_magic:8;     /* magic # (zero) */
24                 unsigned int    ex_bn:24;       /* basic block */
25                 unsigned int    ex_length:8;    /* numblocks in this extent */
26                 unsigned int    ex_offset:24;   /* logical offset into file */
27         } cooked;
28 } efs_extent;
29
30 typedef struct edevs {
31         __be16          odev;
32         __be32          ndev;
33 } efs_devs;
34
35 /*
36  * extent based filesystem inode as it appears on disk.  The efs inode
37  * is exactly 128 bytes long.
38  */
39 struct  efs_dinode {
40         __be16          di_mode;        /* mode and type of file */
41         __be16          di_nlink;       /* number of links to file */
42         __be16          di_uid;         /* owner's user id */
43         __be16          di_gid;         /* owner's group id */
44         __be32          di_size;        /* number of bytes in file */
45         __be32          di_atime;       /* time last accessed */
46         __be32          di_mtime;       /* time last modified */
47         __be32          di_ctime;       /* time created */
48         __be32          di_gen;         /* generation number */
49         __be16          di_numextents;  /* # of extents */
50         u_char          di_version;     /* version of inode */
51         u_char          di_spare;       /* spare - used by AFS */
52         union di_addr {
53                 efs_extent      di_extents[EFS_DIRECTEXTENTS];
54                 efs_devs        di_dev; /* device for IFCHR/IFBLK */
55         } di_u;
56 };
57
58 /* efs inode storage in memory */
59 struct efs_inode_info {
60         int             numextents;
61         int             lastextent;
62
63         efs_extent      extents[EFS_DIRECTEXTENTS];
64         struct inode    vfs_inode;
65 };
66
67 #endif  /* __EFS_FS_I_H__ */
68