This source file includes following definitions.
- buffer_uptodate
- buffer_dirty
- buffer_locked
- buffer_req
- buffer_touched
- buffer_has_aged
- buffer_protected
- mark_buffer_uptodate
- mark_buffer_clean
- mark_buffer_dirty
- brelse
- bforget
- iget
1 #ifndef _LINUX_FS_H
2 #define _LINUX_FS_H
3
4
5
6
7
8
9 #include <linux/linkage.h>
10 #include <linux/limits.h>
11 #include <linux/wait.h>
12 #include <linux/types.h>
13 #include <linux/vfs.h>
14 #include <linux/net.h>
15 #include <linux/kdev_t.h>
16 #include <linux/ioctl.h>
17
18
19
20
21
22
23
24
25
26
27
28 #undef NR_OPEN
29 #define NR_OPEN 256
30
31 #define NR_SUPER 64
32 #define NR_IHASH 131
33 #define BLOCK_SIZE 1024
34 #define BLOCK_SIZE_BITS 10
35
36
37 extern int max_inodes, nr_inodes;
38 extern int max_files, nr_files;
39 #define NR_INODE 2048
40 #define NR_FILE 1024
41
42 #define MAY_EXEC 1
43 #define MAY_WRITE 2
44 #define MAY_READ 4
45
46 #define FMODE_READ 1
47 #define FMODE_WRITE 2
48
49 #define READ 0
50 #define WRITE 1
51 #define READA 2
52 #define WRITEA 3
53
54 #ifndef NULL
55 #define NULL ((void *) 0)
56 #endif
57
58 #define NIL_FILP ((struct file *)0)
59 #define SEL_IN 1
60 #define SEL_OUT 2
61 #define SEL_EX 4
62
63
64
65
66 #define MS_RDONLY 1
67 #define MS_NOSUID 2
68 #define MS_NODEV 4
69 #define MS_NOEXEC 8
70 #define MS_SYNCHRONOUS 16
71 #define MS_REMOUNT 32
72 #define S_WRITE 128
73 #define S_APPEND 256
74 #define S_IMMUTABLE 512
75
76
77
78
79 #define MS_RMT_MASK (MS_RDONLY)
80
81
82
83
84 #define MS_MGC_VAL 0xC0ED0000
85 #define MS_MGC_MSK 0xffff0000
86
87
88
89
90
91
92
93
94
95 #define IS_RDONLY(inode) (((inode)->i_sb) && ((inode)->i_sb->s_flags & MS_RDONLY))
96 #define IS_NOSUID(inode) ((inode)->i_flags & MS_NOSUID)
97 #define IS_NODEV(inode) ((inode)->i_flags & MS_NODEV)
98 #define IS_NOEXEC(inode) ((inode)->i_flags & MS_NOEXEC)
99 #define IS_SYNC(inode) ((inode)->i_flags & MS_SYNCHRONOUS)
100
101 #define IS_WRITABLE(inode) ((inode)->i_flags & S_WRITE)
102 #define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
103 #define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
104
105
106
107
108 #define BLKROSET _IO(0x12,93)
109 #define BLKROGET _IO(0x12,94)
110 #define BLKRRPART _IO(0x12,95)
111 #define BLKGETSIZE _IO(0x12,96)
112 #define BLKFLSBUF _IO(0x12,97)
113 #define BLKRASET _IO(0x12,98)
114 #define BLKRAGET _IO(0x12,99)
115
116 #define BMAP_IOCTL 1
117 #define FIBMAP _IO(0x00,1)
118 #define FIGETBSZ _IO(0x00,2)
119
120 #ifdef __KERNEL__
121
122 #include <asm/bitops.h>
123
124 extern void buffer_init(void);
125 extern unsigned long inode_init(unsigned long start, unsigned long end);
126 extern unsigned long file_table_init(unsigned long start, unsigned long end);
127 extern unsigned long name_cache_init(unsigned long start, unsigned long end);
128
129 typedef char buffer_block[BLOCK_SIZE];
130
131
132 #define BH_Uptodate 0
133 #define BH_Dirty 1
134 #define BH_Lock 2
135 #define BH_Req 3
136 #define BH_Touched 4
137 #define BH_Has_aged 5
138 #define BH_Protected 6
139
140 struct buffer_head {
141 char * b_data;
142 unsigned long b_size;
143 unsigned long b_blocknr;
144 kdev_t b_dev;
145 unsigned long b_state;
146 unsigned int b_count;
147 unsigned int b_list;
148 unsigned long b_flushtime;
149
150 unsigned long b_lru_time;
151
152 struct wait_queue * b_wait;
153 struct buffer_head * b_prev;
154 struct buffer_head * b_next;
155 struct buffer_head * b_prev_free;
156 struct buffer_head * b_next_free;
157 struct buffer_head * b_this_page;
158 struct buffer_head * b_reqnext;
159 };
160
161 static inline int buffer_uptodate(struct buffer_head * bh)
162 {
163 return test_bit(BH_Uptodate, &bh->b_state);
164 }
165
166 static inline int buffer_dirty(struct buffer_head * bh)
167 {
168 return test_bit(BH_Dirty, &bh->b_state);
169 }
170
171 static inline int buffer_locked(struct buffer_head * bh)
172 {
173 return test_bit(BH_Lock, &bh->b_state);
174 }
175
176 static inline int buffer_req(struct buffer_head * bh)
177 {
178 return test_bit(BH_Req, &bh->b_state);
179 }
180
181 static inline int buffer_touched(struct buffer_head * bh)
182 {
183 return test_bit(BH_Touched, &bh->b_state);
184 }
185
186 static inline int buffer_has_aged(struct buffer_head * bh)
187 {
188 return test_bit(BH_Has_aged, &bh->b_state);
189 }
190
191 static inline int buffer_protected(struct buffer_head * bh)
192 {
193 return test_bit(BH_Protected, &bh->b_state);
194 }
195
196 #include <linux/pipe_fs_i.h>
197 #include <linux/minix_fs_i.h>
198 #include <linux/ext_fs_i.h>
199 #include <linux/ext2_fs_i.h>
200 #include <linux/hpfs_fs_i.h>
201 #include <linux/msdos_fs_i.h>
202 #include <linux/umsdos_fs_i.h>
203 #include <linux/iso_fs_i.h>
204 #include <linux/nfs_fs_i.h>
205 #include <linux/xia_fs_i.h>
206 #include <linux/sysv_fs_i.h>
207
208
209
210
211
212 #define ATTR_MODE 1
213 #define ATTR_UID 2
214 #define ATTR_GID 4
215 #define ATTR_SIZE 8
216 #define ATTR_ATIME 16
217 #define ATTR_MTIME 32
218 #define ATTR_CTIME 64
219 #define ATTR_ATIME_SET 128
220 #define ATTR_MTIME_SET 256
221
222
223
224
225
226
227
228
229
230
231 struct iattr {
232 unsigned int ia_valid;
233 umode_t ia_mode;
234 uid_t ia_uid;
235 gid_t ia_gid;
236 off_t ia_size;
237 time_t ia_atime;
238 time_t ia_mtime;
239 time_t ia_ctime;
240 };
241
242 #include <linux/quota.h>
243
244 struct inode {
245 kdev_t i_dev;
246 unsigned long i_ino;
247 umode_t i_mode;
248 nlink_t i_nlink;
249 uid_t i_uid;
250 gid_t i_gid;
251 kdev_t i_rdev;
252 off_t i_size;
253 time_t i_atime;
254 time_t i_mtime;
255 time_t i_ctime;
256 unsigned long i_blksize;
257 unsigned long i_blocks;
258 unsigned long i_version;
259 unsigned long i_nrpages;
260 struct semaphore i_sem;
261 struct inode_operations *i_op;
262 struct super_block *i_sb;
263 struct wait_queue *i_wait;
264 struct file_lock *i_flock;
265 struct vm_area_struct *i_mmap;
266 struct page *i_pages;
267 struct dquot *i_dquot[MAXQUOTAS];
268 struct inode *i_next, *i_prev;
269 struct inode *i_hash_next, *i_hash_prev;
270 struct inode *i_bound_to, *i_bound_by;
271 struct inode *i_mount;
272 unsigned short i_count;
273 unsigned short i_flags;
274 unsigned char i_lock;
275 unsigned char i_dirt;
276 unsigned char i_pipe;
277 unsigned char i_sock;
278 unsigned char i_seek;
279 unsigned char i_update;
280 unsigned short i_writecount;
281 union {
282 struct pipe_inode_info pipe_i;
283 struct minix_inode_info minix_i;
284 struct ext_inode_info ext_i;
285 struct ext2_inode_info ext2_i;
286 struct hpfs_inode_info hpfs_i;
287 struct msdos_inode_info msdos_i;
288 struct umsdos_inode_info umsdos_i;
289 struct iso_inode_info isofs_i;
290 struct nfs_inode_info nfs_i;
291 struct xiafs_inode_info xiafs_i;
292 struct sysv_inode_info sysv_i;
293 struct socket socket_i;
294 void * generic_ip;
295 } u;
296 };
297
298 struct file {
299 mode_t f_mode;
300 loff_t f_pos;
301 unsigned short f_flags;
302 unsigned short f_count;
303 off_t f_reada;
304 struct file *f_next, *f_prev;
305 int f_owner;
306 struct inode * f_inode;
307 struct file_operations * f_op;
308 unsigned long f_version;
309 void *private_data;
310 };
311
312 struct file_lock {
313 struct file_lock *fl_next;
314 struct file_lock *fl_nextlink;
315 struct file_lock *fl_prevlink;
316 struct file_lock *fl_block;
317 struct task_struct *fl_owner;
318 struct wait_queue *fl_wait;
319 struct file *fl_file;
320 char fl_flags;
321 char fl_type;
322 off_t fl_start;
323 off_t fl_end;
324 };
325
326 struct fasync_struct {
327 int magic;
328 struct fasync_struct *fa_next;
329 struct file *fa_file;
330 };
331
332 #define FASYNC_MAGIC 0x4601
333
334 extern int fasync_helper(struct inode *, struct file *, int, struct fasync_struct **);
335
336 #include <linux/minix_fs_sb.h>
337 #include <linux/ext_fs_sb.h>
338 #include <linux/ext2_fs_sb.h>
339 #include <linux/hpfs_fs_sb.h>
340 #include <linux/msdos_fs_sb.h>
341 #include <linux/iso_fs_sb.h>
342 #include <linux/nfs_fs_sb.h>
343 #include <linux/xia_fs_sb.h>
344 #include <linux/sysv_fs_sb.h>
345
346 struct super_block {
347 kdev_t s_dev;
348 unsigned long s_blocksize;
349 unsigned char s_blocksize_bits;
350 unsigned char s_lock;
351 unsigned char s_rd_only;
352 unsigned char s_dirt;
353 struct file_system_type *s_type;
354 struct super_operations *s_op;
355 struct dquot_operations *dq_op;
356 unsigned long s_flags;
357 unsigned long s_magic;
358 unsigned long s_time;
359 struct inode * s_covered;
360 struct inode * s_mounted;
361 struct wait_queue * s_wait;
362 union {
363 struct minix_sb_info minix_sb;
364 struct ext_sb_info ext_sb;
365 struct ext2_sb_info ext2_sb;
366 struct hpfs_sb_info hpfs_sb;
367 struct msdos_sb_info msdos_sb;
368 struct isofs_sb_info isofs_sb;
369 struct nfs_sb_info nfs_sb;
370 struct xiafs_sb_info xiafs_sb;
371 struct sysv_sb_info sysv_sb;
372 void *generic_sbp;
373 } u;
374 };
375
376
377
378
379
380
381
382 typedef int (*filldir_t)(void *, const char *, int, off_t, ino_t);
383
384 struct file_operations {
385 int (*lseek) (struct inode *, struct file *, off_t, int);
386 int (*read) (struct inode *, struct file *, char *, int);
387 int (*write) (struct inode *, struct file *, const char *, int);
388 int (*readdir) (struct inode *, struct file *, void *, filldir_t);
389 int (*select) (struct inode *, struct file *, int, select_table *);
390 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
391 int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);
392 int (*open) (struct inode *, struct file *);
393 void (*release) (struct inode *, struct file *);
394 int (*fsync) (struct inode *, struct file *);
395 int (*fasync) (struct inode *, struct file *, int);
396 int (*check_media_change) (kdev_t dev);
397 int (*revalidate) (kdev_t dev);
398 };
399
400 struct inode_operations {
401 struct file_operations * default_file_ops;
402 int (*create) (struct inode *,const char *,int,int,struct inode **);
403 int (*lookup) (struct inode *,const char *,int,struct inode **);
404 int (*link) (struct inode *,struct inode *,const char *,int);
405 int (*unlink) (struct inode *,const char *,int);
406 int (*symlink) (struct inode *,const char *,int,const char *);
407 int (*mkdir) (struct inode *,const char *,int,int);
408 int (*rmdir) (struct inode *,const char *,int);
409 int (*mknod) (struct inode *,const char *,int,int,int);
410 int (*rename) (struct inode *,const char *,int,struct inode *,const char *,int);
411 int (*readlink) (struct inode *,char *,int);
412 int (*follow_link) (struct inode *,struct inode *,int,int,struct inode **);
413 int (*readpage) (struct inode *, struct page *);
414 int (*writepage) (struct inode *, struct page *);
415 int (*bmap) (struct inode *,int);
416 void (*truncate) (struct inode *);
417 int (*permission) (struct inode *, int);
418 int (*smap) (struct inode *,int);
419 };
420
421 struct super_operations {
422 void (*read_inode) (struct inode *);
423 int (*notify_change) (struct inode *, struct iattr *);
424 void (*write_inode) (struct inode *);
425 void (*put_inode) (struct inode *);
426 void (*put_super) (struct super_block *);
427 void (*write_super) (struct super_block *);
428 void (*statfs) (struct super_block *, struct statfs *, int);
429 int (*remount_fs) (struct super_block *, int *, char *);
430 };
431
432 struct dquot_operations {
433 void (*initialize) (struct inode *, short);
434 void (*drop) (struct inode *);
435 int (*alloc_block) (const struct inode *, unsigned long);
436 int (*alloc_inode) (const struct inode *, unsigned long);
437 void (*free_block) (const struct inode *, unsigned long);
438 void (*free_inode) (const struct inode *, unsigned long);
439 int (*transfer) (struct inode *, struct iattr *, char);
440 };
441
442 struct file_system_type {
443 struct super_block *(*read_super) (struct super_block *, void *, int);
444 const char *name;
445 int requires_dev;
446 struct file_system_type * next;
447 };
448
449 extern int register_filesystem(struct file_system_type *);
450 extern int unregister_filesystem(struct file_system_type *);
451
452 asmlinkage int sys_open(const char *, int, int);
453 asmlinkage int sys_close(unsigned int);
454
455 extern void kill_fasync(struct fasync_struct *fa, int sig);
456
457 extern int getname(const char * filename, char **result);
458 extern void putname(char * name);
459 extern int do_truncate(struct inode *, unsigned long);
460 extern int register_blkdev(unsigned int, const char *, struct file_operations *);
461 extern int unregister_blkdev(unsigned int major, const char * name);
462 extern int blkdev_open(struct inode * inode, struct file * filp);
463 extern struct file_operations def_blk_fops;
464 extern struct inode_operations blkdev_inode_operations;
465
466 extern int register_chrdev(unsigned int, const char *, struct file_operations *);
467 extern int unregister_chrdev(unsigned int major, const char * name);
468 extern int chrdev_open(struct inode * inode, struct file * filp);
469 extern struct file_operations def_chr_fops;
470 extern struct inode_operations chrdev_inode_operations;
471
472 extern void init_fifo(struct inode * inode);
473
474 extern struct file_operations connecting_fifo_fops;
475 extern struct file_operations read_fifo_fops;
476 extern struct file_operations write_fifo_fops;
477 extern struct file_operations rdwr_fifo_fops;
478 extern struct file_operations read_pipe_fops;
479 extern struct file_operations write_pipe_fops;
480 extern struct file_operations rdwr_pipe_fops;
481
482 extern struct file_system_type *get_fs_type(const char *name);
483
484 extern int fs_may_mount(kdev_t dev);
485 extern int fs_may_umount(kdev_t dev, struct inode * mount_root);
486 extern int fs_may_remount_ro(kdev_t dev);
487
488 extern struct file *first_file;
489 extern int nr_files;
490 extern struct super_block super_blocks[NR_SUPER];
491
492 extern void refile_buffer(struct buffer_head * buf);
493 extern void set_writetime(struct buffer_head * buf, int flag);
494 extern void refill_freelist(int size);
495 extern int try_to_free_buffer(struct buffer_head*, struct buffer_head**, int);
496
497 extern struct buffer_head ** buffer_pages;
498 extern int nr_buffers;
499 extern int buffermem;
500 extern int nr_buffer_heads;
501
502 #define BUF_CLEAN 0
503 #define BUF_UNSHARED 1
504 #define BUF_LOCKED 2
505 #define BUF_LOCKED1 3
506 #define BUF_DIRTY 4
507 #define BUF_SHARED 5
508 #define NR_LIST 6
509
510 extern inline void mark_buffer_uptodate(struct buffer_head * bh, int on)
511 {
512 if (on)
513 set_bit(BH_Uptodate, &bh->b_state);
514 else
515 clear_bit(BH_Uptodate, &bh->b_state);
516 }
517
518 extern inline void mark_buffer_clean(struct buffer_head * bh)
519 {
520 if (clear_bit(BH_Dirty, &bh->b_state)) {
521 if (bh->b_list == BUF_DIRTY)
522 refile_buffer(bh);
523 }
524 }
525
526 extern inline void mark_buffer_dirty(struct buffer_head * bh, int flag)
527 {
528 if (!set_bit(BH_Dirty, &bh->b_state)) {
529 set_writetime(bh, flag);
530 if (bh->b_list != BUF_DIRTY)
531 refile_buffer(bh);
532 }
533 }
534
535 extern int check_disk_change(kdev_t dev);
536 extern void invalidate_inodes(kdev_t dev);
537 extern void invalidate_inode_pages(struct inode *, unsigned long);
538 extern void invalidate_buffers(kdev_t dev);
539 extern int floppy_is_wp(int minor);
540 extern void sync_inodes(kdev_t dev);
541 extern void sync_dev(kdev_t dev);
542 extern int fsync_dev(kdev_t dev);
543 extern void sync_supers(kdev_t dev);
544 extern int bmap(struct inode * inode,int block);
545 extern int notify_change(struct inode *, struct iattr *);
546 extern int namei(const char * pathname, struct inode ** res_inode);
547 extern int lnamei(const char * pathname, struct inode ** res_inode);
548 extern int permission(struct inode * inode,int mask);
549 extern int get_write_access(struct inode *inode);
550 extern void put_write_access(struct inode *inode);
551 extern int open_namei(const char * pathname, int flag, int mode,
552 struct inode ** res_inode, struct inode * base);
553 extern int do_mknod(const char * filename, int mode, dev_t dev);
554 extern int do_pipe(int *);
555 extern void iput(struct inode * inode);
556 extern struct inode * __iget(struct super_block * sb,int nr,int crsmnt);
557 extern struct inode * get_empty_inode(void);
558 extern void insert_inode_hash(struct inode *);
559 extern void clear_inode(struct inode *);
560 extern struct inode * get_pipe_inode(void);
561 extern struct file * get_empty_filp(void);
562 extern int close_fp(struct file *filp);
563 extern struct buffer_head * get_hash_table(kdev_t dev, int block, int size);
564 extern struct buffer_head * getblk(kdev_t dev, int block, int size);
565 extern void ll_rw_block(int rw, int nr, struct buffer_head * bh[]);
566 extern void ll_rw_page(int rw, kdev_t dev, unsigned long nr, char * buffer);
567 extern void ll_rw_swap_file(int rw, kdev_t dev, unsigned int *b, int nb, char *buffer);
568 extern int is_read_only(kdev_t dev);
569 extern void __brelse(struct buffer_head *buf);
570 extern inline void brelse(struct buffer_head *buf)
571 {
572 if (buf)
573 __brelse(buf);
574 }
575 extern void __bforget(struct buffer_head *buf);
576 extern inline void bforget(struct buffer_head *buf)
577 {
578 if (buf)
579 __bforget(buf);
580 }
581 extern void set_blocksize(kdev_t dev, int size);
582 extern struct buffer_head * bread(kdev_t dev, int block, int size);
583 extern struct buffer_head * breada(kdev_t dev,int block, int size,
584 unsigned int pos, unsigned int filesize);
585
586 extern int generic_readpage(struct inode *, struct page *);
587 extern int generic_file_read(struct inode *, struct file *, char *, int);
588 extern int generic_mmap(struct inode *, struct file *, struct vm_area_struct *);
589
590 extern void bwrite_page(unsigned long addr,kdev_t dev,int b[],int size);
591 extern void put_super(kdev_t dev);
592 unsigned long generate_cluster(kdev_t dev, int b[], int size);
593 extern kdev_t ROOT_DEV;
594
595 extern void show_buffers(void);
596 extern void mount_root(void);
597
598 extern int char_read(struct inode *, struct file *, char *, int);
599 extern int block_read(struct inode *, struct file *, char *, int);
600 extern int read_ahead[];
601
602 extern int char_write(struct inode *, struct file *, const char *, int);
603 extern int block_write(struct inode *, struct file *, const char *, int);
604
605 extern int block_fsync(struct inode *, struct file *);
606 extern int file_fsync(struct inode *, struct file *);
607
608 extern void dcache_add(struct inode *, const char *, int, unsigned long);
609 extern int dcache_lookup(struct inode *, const char *, int, unsigned long *);
610
611 extern int inode_change_ok(struct inode *, struct iattr *);
612 extern void inode_setattr(struct inode *, struct iattr *);
613
614 extern inline struct inode * iget(struct super_block * sb,int nr)
615 {
616 return __iget(sb, nr, 1);
617 }
618
619 #endif
620
621 #endif