69aecbd473513e0f5188b4afb5d9f48bc01200b0
[reactos.git] / reactos / drivers / filesystems / ext2_new / inc / linux / fs.h
1 #ifndef _LINUX_FS_INCLUDE_
2 #define _LINUX_FS_INCLUDE_
3
4 #include <linux/types.h>
5 #include <linux/atomic.h>
6
7 //
8 // kdev
9 //
10
11 #define NODEV 0
12
13 typedef struct block_device * kdev_t;
14
15 #define MINORBITS 8
16 #define MINORMASK ((1U << MINORBITS) - 1)
17
18 #define MAJOR(dev) ((unsigned int)((int)(dev) >> MINORBITS))
19 #define MINOR(dev) ((unsigned int)((int)(dev) & MINORMASK))
20
21 static inline unsigned int kdev_t_to_nr(kdev_t dev) {
22 /*return (unsigned int)(MAJOR(dev)<<8) | MINOR(dev);*/
23 return 0;
24 }
25
26 #define NODEV 0
27 #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
28
29 static inline kdev_t to_kdev_t(int dev)
30 {
31 #if 0
32 int major, minor;
33 #if 0
34 major = (dev >> 16);
35 if (!major) {
36 major = (dev >> 8);
37 minor = (dev & 0xff);
38 } else
39 minor = (dev & 0xffff);
40 #else
41 major = (dev >> 8);
42 minor = (dev & 0xff);
43 #endif
44 return (kdev_t) MKDEV(major, minor);
45 #endif
46 return 0;
47 }
48
49
50 //
51 // file system specific structures
52 //
53
54 /*
55 * Kernel pointers have redundant information, so we can use a
56 * scheme where we can return either an error code or a dentry
57 * pointer with the same return value.
58 *
59 * This should be a per-architecture thing, to allow different
60 * error and pointer decisions.
61 */
62
63 struct super_block {
64 unsigned long s_magic;
65 unsigned long s_flags;
66 unsigned long s_blocksize; /* blocksize */
67 unsigned long long s_maxbytes;
68 unsigned char s_blocksize_bits; /* bits of blocksize */
69 unsigned char s_dirt; /* any thing */
70 char s_id[30]; /* id string */
71 kdev_t s_bdev; /* block_device */
72 void * s_priv; /* EXT2_VCB */
73 struct dentry *s_root;
74 void *s_fs_info;
75 };
76
77 struct inode {
78 __u32 i_ino; /* inode number */
79 loff_t i_size; /* size */
80 __u32 i_atime; /* Access time */
81 __u32 i_ctime; /* Creation time */
82 __u32 i_mtime; /* Modification time */
83 __u32 i_dtime; /* Deletion Time */
84 __u64 i_blocks;
85 __u32 i_block[15];
86 umode_t i_mode; /* mode */
87 uid_t i_uid;
88 gid_t i_gid;
89 atomic_t i_count; /* ref count */
90 __u16 i_nlink;
91 __u32 i_generation;
92 __u32 i_version;
93 __u32 i_flags;
94
95 struct super_block *i_sb; /* super_block */
96 void *i_priv; /* EXT2_MCB */
97 };
98
99 //
100 // Inode state bits
101 //
102
103 #define I_DIRTY_SYNC 1 /* Not dirty enough for O_DATASYNC */
104 #define I_DIRTY_DATASYNC 2 /* Data-related inode changes pending */
105 #define I_DIRTY_PAGES 4 /* Data-related inode changes pending */
106 #define I_LOCK 8
107 #define I_FREEING 16
108 #define I_CLEAR 32
109
110 #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
111
112
113 struct dentry {
114 atomic_t d_count;
115 struct {
116 int len;
117 char *name;
118 } d_name;
119 struct inode *d_inode;
120 struct dentry *d_parent;
121 void *d_fsdata;
122 struct super_block *d_sb;
123 };
124
125 struct file {
126
127 unsigned int f_flags;
128 umode_t f_mode;
129 __u32 f_version;
130 __int64 f_size;
131 loff_t f_pos;
132 struct dentry *f_dentry;
133 void *private_data;
134 };
135
136 /*
137 * File types
138 *
139 * NOTE! These match bits 12..15 of stat.st_mode
140 * (ie "(i_mode >> 12) & 15").
141 */
142 #define DT_UNKNOWN 0
143 #define DT_FIFO 1
144 #define DT_CHR 2
145 #define DT_DIR 4
146 #define DT_BLK 6
147 #define DT_REG 8
148 #define DT_LNK 10
149 #define DT_SOCK 12
150 #define DT_WHT 14
151
152 void iget(struct inode *inode);
153 void iput(struct inode *inode);
154 ULONGLONG bmap(struct inode *i, ULONGLONG b);
155
156 #endif /*_LINUX_FS_INCLUDE_*/