This source file includes following definitions.
- buffer_uptodate
- buffer_dirty
- buffer_locked
- buffer_req
- buffer_touched
- buffer_has_aged
- buffer_protected
- locks_verify_locked
- locks_verify_area
- 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/config.h>
10 #include <linux/linkage.h>
11 #include <linux/limits.h>
12 #include <linux/wait.h>
13 #include <linux/types.h>
14 #include <linux/vfs.h>
15 #include <linux/net.h>
16 #include <linux/kdev_t.h>
17 #include <linux/ioctl.h>
18
19
20
21
22
23
24
25
26
27
28
29 #undef NR_OPEN
30 #define NR_OPEN 256
31
32 #define NR_SUPER 64
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 3072
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 #define BH_FreeOnIO 7
140
141
142
143
144
145
146
147
148
149
150
151
152
153 struct buffer_head {
154
155 unsigned long b_blocknr;
156 kdev_t b_dev;
157 kdev_t b_rdev;
158 unsigned long b_rsector;
159 struct buffer_head * b_next;
160 struct buffer_head * b_this_page;
161
162
163 unsigned long b_state;
164 struct buffer_head * b_next_free;
165 unsigned int b_count;
166 unsigned long b_size;
167
168
169 char * b_data;
170 unsigned int b_list;
171 unsigned long b_flushtime;
172
173 unsigned long b_lru_time;
174
175 struct wait_queue * b_wait;
176 struct buffer_head * b_prev;
177 struct buffer_head * b_prev_free;
178 struct buffer_head * b_reqnext;
179 };
180
181 static inline int buffer_uptodate(struct buffer_head * bh)
182 {
183 return test_bit(BH_Uptodate, &bh->b_state);
184 }
185
186 static inline int buffer_dirty(struct buffer_head * bh)
187 {
188 return test_bit(BH_Dirty, &bh->b_state);
189 }
190
191 static inline int buffer_locked(struct buffer_head * bh)
192 {
193 return test_bit(BH_Lock, &bh->b_state);
194 }
195
196 static inline int buffer_req(struct buffer_head * bh)
197 {
198 return test_bit(BH_Req, &bh->b_state);
199 }
200
201 static inline int buffer_touched(struct buffer_head * bh)
202 {
203 return test_bit(BH_Touched, &bh->b_state);
204 }
205
206 static inline int buffer_has_aged(struct buffer_head * bh)
207 {
208 return test_bit(BH_Has_aged, &bh->b_state);
209 }
210
211 static inline int buffer_protected(struct buffer_head * bh)
212 {
213 return test_bit(BH_Protected, &bh->b_state);
214 }
215
216 #include <linux/pipe_fs_i.h>
217 #include <linux/minix_fs_i.h>
218 #include <linux/ext_fs_i.h>
219 #include <linux/ext2_fs_i.h>
220 #include <linux/hpfs_fs_i.h>
221 #include <linux/msdos_fs_i.h>
222 #include <linux/umsdos_fs_i.h>
223 #include <linux/iso_fs_i.h>
224 #include <linux/nfs_fs_i.h>
225 #include <linux/xia_fs_i.h>
226 #include <linux/sysv_fs_i.h>
227 #include <linux/affs_fs_i.h>
228 #include <linux/ufs_fs_i.h>
229
230
231
232
233
234 #define ATTR_MODE 1
235 #define ATTR_UID 2
236 #define ATTR_GID 4
237 #define ATTR_SIZE 8
238 #define ATTR_ATIME 16
239 #define ATTR_MTIME 32
240 #define ATTR_CTIME 64
241 #define ATTR_ATIME_SET 128
242 #define ATTR_MTIME_SET 256
243 #define ATTR_FORCE 512
244
245
246
247
248
249
250
251
252
253
254 struct iattr {
255 unsigned int ia_valid;
256 umode_t ia_mode;
257 uid_t ia_uid;
258 gid_t ia_gid;
259 off_t ia_size;
260 time_t ia_atime;
261 time_t ia_mtime;
262 time_t ia_ctime;
263 };
264
265 #include <linux/quota.h>
266
267 struct inode {
268 kdev_t i_dev;
269 unsigned long i_ino;
270 umode_t i_mode;
271 nlink_t i_nlink;
272 uid_t i_uid;
273 gid_t i_gid;
274 kdev_t i_rdev;
275 off_t i_size;
276 time_t i_atime;
277 time_t i_mtime;
278 time_t i_ctime;
279 unsigned long i_blksize;
280 unsigned long i_blocks;
281 unsigned long i_version;
282 unsigned long i_nrpages;
283 struct semaphore i_sem;
284 struct inode_operations *i_op;
285 struct super_block *i_sb;
286 struct wait_queue *i_wait;
287 struct file_lock *i_flock;
288 struct vm_area_struct *i_mmap;
289 struct page *i_pages;
290 struct dquot *i_dquot[MAXQUOTAS];
291 struct inode *i_next, *i_prev;
292 struct inode *i_hash_next, *i_hash_prev;
293 struct inode *i_bound_to, *i_bound_by;
294 struct inode *i_mount;
295 unsigned short i_count;
296 unsigned short i_flags;
297 unsigned char i_lock;
298 unsigned char i_dirt;
299 unsigned char i_pipe;
300 unsigned char i_sock;
301 unsigned char i_seek;
302 unsigned char i_update;
303 unsigned short i_writecount;
304 union {
305 struct pipe_inode_info pipe_i;
306 struct minix_inode_info minix_i;
307 struct ext_inode_info ext_i;
308 struct ext2_inode_info ext2_i;
309 struct hpfs_inode_info hpfs_i;
310 struct msdos_inode_info msdos_i;
311 struct umsdos_inode_info umsdos_i;
312 struct iso_inode_info isofs_i;
313 struct nfs_inode_info nfs_i;
314 struct xiafs_inode_info xiafs_i;
315 struct sysv_inode_info sysv_i;
316 struct affs_inode_info affs_i;
317 struct ufs_inode_info ufs_i;
318 struct socket socket_i;
319 void * generic_ip;
320 } u;
321 };
322
323 struct file {
324 mode_t f_mode;
325 loff_t f_pos;
326 unsigned short f_flags;
327 unsigned short f_count;
328 unsigned long f_reada, f_ramax, f_rapos, f_ralen, f_rawin;
329 struct file *f_next, *f_prev;
330 int f_owner;
331 struct inode * f_inode;
332 struct file_operations * f_op;
333 unsigned long f_version;
334 void *private_data;
335 };
336
337 struct file_lock {
338 struct file_lock *fl_next;
339 struct file_lock *fl_nextlink;
340 struct file_lock *fl_prevlink;
341 struct file_lock *fl_block;
342 struct task_struct *fl_owner;
343 struct wait_queue *fl_wait;
344 struct file *fl_file;
345 char fl_flags;
346 char fl_type;
347 off_t fl_start;
348 off_t fl_end;
349 };
350
351 #include <linux/fcntl.h>
352
353 extern int fcntl_getlk(unsigned int fd, struct flock *l);
354 extern int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l);
355 extern void locks_remove_locks(struct task_struct *task, struct file *filp);
356
357 #include <linux/stat.h>
358
359 #define FLOCK_VERIFY_READ 1
360 #define FLOCK_VERIFY_WRITE 2
361
362 extern int locks_mandatory_locked(struct inode *inode);
363 extern inline int locks_verify_locked(struct inode *inode)
364 {
365
366
367
368 if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
369 return (locks_mandatory_locked(inode));
370 return (0);
371 }
372 extern int locks_mandatory_area(int read_write, struct inode *inode,
373 struct file *filp, unsigned int offset,
374 unsigned int count);
375 extern inline int locks_verify_area(int read_write, struct inode *inode,
376 struct file *filp, unsigned int offset,
377 unsigned int count)
378 {
379
380
381
382 if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
383 return (locks_mandatory_area(read_write, inode, filp, offset,
384 count));
385 return (0);
386 }
387
388 struct fasync_struct {
389 int magic;
390 struct fasync_struct *fa_next;
391 struct file *fa_file;
392 };
393
394 #define FASYNC_MAGIC 0x4601
395
396 extern int fasync_helper(struct inode *, struct file *, int, struct fasync_struct **);
397
398 #include <linux/minix_fs_sb.h>
399 #include <linux/ext_fs_sb.h>
400 #include <linux/ext2_fs_sb.h>
401 #include <linux/hpfs_fs_sb.h>
402 #include <linux/msdos_fs_sb.h>
403 #include <linux/iso_fs_sb.h>
404 #include <linux/nfs_fs_sb.h>
405 #include <linux/xia_fs_sb.h>
406 #include <linux/sysv_fs_sb.h>
407 #include <linux/affs_fs_sb.h>
408 #include <linux/ufs_fs_sb.h>
409
410 struct super_block {
411 kdev_t s_dev;
412 unsigned long s_blocksize;
413 unsigned char s_blocksize_bits;
414 unsigned char s_lock;
415 unsigned char s_rd_only;
416 unsigned char s_dirt;
417 struct file_system_type *s_type;
418 struct super_operations *s_op;
419 struct dquot_operations *dq_op;
420 unsigned long s_flags;
421 unsigned long s_magic;
422 unsigned long s_time;
423 struct inode * s_covered;
424 struct inode * s_mounted;
425 struct wait_queue * s_wait;
426 union {
427 struct minix_sb_info minix_sb;
428 struct ext_sb_info ext_sb;
429 struct ext2_sb_info ext2_sb;
430 struct hpfs_sb_info hpfs_sb;
431 struct msdos_sb_info msdos_sb;
432 struct isofs_sb_info isofs_sb;
433 struct nfs_sb_info nfs_sb;
434 struct xiafs_sb_info xiafs_sb;
435 struct sysv_sb_info sysv_sb;
436 struct affs_sb_info affs_sb;
437 struct ufs_sb_info ufs_sb;
438 void *generic_sbp;
439 } u;
440 };
441
442
443
444
445
446
447
448 typedef int (*filldir_t)(void *, const char *, int, off_t, ino_t);
449
450 struct file_operations {
451 int (*lseek) (struct inode *, struct file *, off_t, int);
452 int (*read) (struct inode *, struct file *, char *, int);
453 int (*write) (struct inode *, struct file *, const char *, int);
454 int (*readdir) (struct inode *, struct file *, void *, filldir_t);
455 int (*select) (struct inode *, struct file *, int, select_table *);
456 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
457 int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);
458 int (*open) (struct inode *, struct file *);
459 void (*release) (struct inode *, struct file *);
460 int (*fsync) (struct inode *, struct file *);
461 int (*fasync) (struct inode *, struct file *, int);
462 int (*check_media_change) (kdev_t dev);
463 int (*revalidate) (kdev_t dev);
464 };
465
466 struct inode_operations {
467 struct file_operations * default_file_ops;
468 int (*create) (struct inode *,const char *,int,int,struct inode **);
469 int (*lookup) (struct inode *,const char *,int,struct inode **);
470 int (*link) (struct inode *,struct inode *,const char *,int);
471 int (*unlink) (struct inode *,const char *,int);
472 int (*symlink) (struct inode *,const char *,int,const char *);
473 int (*mkdir) (struct inode *,const char *,int,int);
474 int (*rmdir) (struct inode *,const char *,int);
475 int (*mknod) (struct inode *,const char *,int,int,int);
476 int (*rename) (struct inode *,const char *,int,struct inode *,const char *,int);
477 int (*readlink) (struct inode *,char *,int);
478 int (*follow_link) (struct inode *,struct inode *,int,int,struct inode **);
479 int (*readpage) (struct inode *, struct page *);
480 int (*writepage) (struct inode *, struct page *);
481 int (*bmap) (struct inode *,int);
482 void (*truncate) (struct inode *);
483 int (*permission) (struct inode *, int);
484 int (*smap) (struct inode *,int);
485 };
486
487 struct super_operations {
488 void (*read_inode) (struct inode *);
489 int (*notify_change) (struct inode *, struct iattr *);
490 void (*write_inode) (struct inode *);
491 void (*put_inode) (struct inode *);
492 void (*put_super) (struct super_block *);
493 void (*write_super) (struct super_block *);
494 void (*statfs) (struct super_block *, struct statfs *, int);
495 int (*remount_fs) (struct super_block *, int *, char *);
496 };
497
498 struct dquot_operations {
499 void (*initialize) (struct inode *, short);
500 void (*drop) (struct inode *);
501 int (*alloc_block) (const struct inode *, unsigned long);
502 int (*alloc_inode) (const struct inode *, unsigned long);
503 void (*free_block) (const struct inode *, unsigned long);
504 void (*free_inode) (const struct inode *, unsigned long);
505 int (*transfer) (struct inode *, struct iattr *, char);
506 };
507
508 struct file_system_type {
509 struct super_block *(*read_super) (struct super_block *, void *, int);
510 const char *name;
511 int requires_dev;
512 struct file_system_type * next;
513 };
514
515 extern int register_filesystem(struct file_system_type *);
516 extern int unregister_filesystem(struct file_system_type *);
517
518 asmlinkage int sys_open(const char *, int, int);
519 asmlinkage int sys_close(unsigned int);
520
521 extern void kill_fasync(struct fasync_struct *fa, int sig);
522
523 extern int getname(const char * filename, char **result);
524 extern void putname(char * name);
525 extern int do_truncate(struct inode *, unsigned long);
526 extern int register_blkdev(unsigned int, const char *, struct file_operations *);
527 extern int unregister_blkdev(unsigned int major, const char * name);
528 extern int blkdev_open(struct inode * inode, struct file * filp);
529 extern void blkdev_release (struct inode * inode);
530 extern struct file_operations def_blk_fops;
531 extern struct inode_operations blkdev_inode_operations;
532
533 extern int register_chrdev(unsigned int, const char *, struct file_operations *);
534 extern int unregister_chrdev(unsigned int major, const char * name);
535 extern int chrdev_open(struct inode * inode, struct file * filp);
536 extern struct file_operations def_chr_fops;
537 extern struct inode_operations chrdev_inode_operations;
538
539 extern void init_fifo(struct inode * inode);
540 extern struct inode_operations fifo_inode_operations;
541
542 extern struct file_operations connecting_fifo_fops;
543 extern struct file_operations read_fifo_fops;
544 extern struct file_operations write_fifo_fops;
545 extern struct file_operations rdwr_fifo_fops;
546 extern struct file_operations read_pipe_fops;
547 extern struct file_operations write_pipe_fops;
548 extern struct file_operations rdwr_pipe_fops;
549
550 extern struct file_system_type *get_fs_type(const char *name);
551
552 extern int fs_may_mount(kdev_t dev);
553 extern int fs_may_umount(kdev_t dev, struct inode * mount_root);
554 extern int fs_may_remount_ro(kdev_t dev);
555
556 extern struct file *first_file;
557 extern struct super_block super_blocks[NR_SUPER];
558
559 extern void refile_buffer(struct buffer_head * buf);
560 extern void set_writetime(struct buffer_head * buf, int flag);
561 extern void refill_freelist(int size);
562 extern int try_to_free_buffer(struct buffer_head*, struct buffer_head**, int);
563
564 extern int nr_buffers;
565 extern int buffermem;
566 extern int nr_buffer_heads;
567
568 #define BUF_CLEAN 0
569 #define BUF_UNSHARED 1
570 #define BUF_LOCKED 2
571 #define BUF_LOCKED1 3
572 #define BUF_DIRTY 4
573 #define BUF_SHARED 5
574 #define NR_LIST 6
575
576 void mark_buffer_uptodate(struct buffer_head * bh, int on);
577
578 extern inline void mark_buffer_clean(struct buffer_head * bh)
579 {
580 if (clear_bit(BH_Dirty, &bh->b_state)) {
581 if (bh->b_list == BUF_DIRTY)
582 refile_buffer(bh);
583 }
584 }
585
586 extern inline void mark_buffer_dirty(struct buffer_head * bh, int flag)
587 {
588 if (!set_bit(BH_Dirty, &bh->b_state)) {
589 set_writetime(bh, flag);
590 if (bh->b_list != BUF_DIRTY)
591 refile_buffer(bh);
592 }
593 }
594
595 extern int check_disk_change(kdev_t dev);
596 extern void invalidate_inodes(kdev_t dev);
597 extern void invalidate_inode_pages(struct inode *);
598 extern void invalidate_buffers(kdev_t dev);
599 extern int floppy_is_wp(int minor);
600 extern void sync_inodes(kdev_t dev);
601 extern void sync_dev(kdev_t dev);
602 extern int fsync_dev(kdev_t dev);
603 extern void sync_supers(kdev_t dev);
604 extern int bmap(struct inode * inode,int block);
605 extern int notify_change(struct inode *, struct iattr *);
606 extern int namei(const char * pathname, struct inode ** res_inode);
607 extern int lnamei(const char * pathname, struct inode ** res_inode);
608 extern int permission(struct inode * inode,int mask);
609 extern int get_write_access(struct inode *inode);
610 extern void put_write_access(struct inode *inode);
611 extern int open_namei(const char * pathname, int flag, int mode,
612 struct inode ** res_inode, struct inode * base);
613 extern int do_mknod(const char * filename, int mode, dev_t dev);
614 extern int do_pipe(int *);
615 extern void iput(struct inode * inode);
616 extern struct inode * __iget(struct super_block * sb,int nr,int crsmnt);
617 extern struct inode * get_empty_inode(void);
618 extern void insert_inode_hash(struct inode *);
619 extern void clear_inode(struct inode *);
620 extern struct inode * get_pipe_inode(void);
621 extern struct file * get_empty_filp(void);
622 extern int close_fp(struct file *filp);
623 extern struct buffer_head * get_hash_table(kdev_t dev, int block, int size);
624 extern struct buffer_head * getblk(kdev_t dev, int block, int size);
625 extern void ll_rw_block(int rw, int nr, struct buffer_head * bh[]);
626 extern void ll_rw_page(int rw, kdev_t dev, unsigned long nr, char * buffer);
627 extern void ll_rw_swap_file(int rw, kdev_t dev, unsigned int *b, int nb, char *buffer);
628 extern int is_read_only(kdev_t dev);
629 extern void __brelse(struct buffer_head *buf);
630 extern inline void brelse(struct buffer_head *buf)
631 {
632 if (buf)
633 __brelse(buf);
634 }
635 extern void __bforget(struct buffer_head *buf);
636 extern inline void bforget(struct buffer_head *buf)
637 {
638 if (buf)
639 __bforget(buf);
640 }
641 extern void set_blocksize(kdev_t dev, int size);
642 extern struct buffer_head * bread(kdev_t dev, int block, int size);
643 extern struct buffer_head * breada(kdev_t dev,int block, int size,
644 unsigned int pos, unsigned int filesize);
645
646 extern int generic_readpage(struct inode *, struct page *);
647 extern int generic_file_read(struct inode *, struct file *, char *, int);
648 extern int generic_file_mmap(struct inode *, struct file *, struct vm_area_struct *);
649 extern int brw_page(int, unsigned long, kdev_t, int [], int, int);
650
651 extern void put_super(kdev_t dev);
652 unsigned long generate_cluster(kdev_t dev, int b[], int size);
653 extern kdev_t ROOT_DEV;
654
655 extern void show_buffers(void);
656 extern void mount_root(void);
657
658 #ifdef CONFIG_BLK_DEV_INITRD
659 extern kdev_t real_root_dev;
660 extern int change_root(kdev_t new_root_dev,const char *put_old);
661 #endif
662
663 extern int char_read(struct inode *, struct file *, char *, int);
664 extern int block_read(struct inode *, struct file *, char *, int);
665 extern int read_ahead[];
666
667 extern int char_write(struct inode *, struct file *, const char *, int);
668 extern int block_write(struct inode *, struct file *, const char *, int);
669
670 extern int block_fsync(struct inode *, struct file *);
671 extern int file_fsync(struct inode *, struct file *);
672
673 extern void dcache_add(struct inode *, const char *, int, unsigned long);
674 extern int dcache_lookup(struct inode *, const char *, int, unsigned long *);
675
676 extern int inode_change_ok(struct inode *, struct iattr *);
677 extern void inode_setattr(struct inode *, struct iattr *);
678
679 extern inline struct inode * iget(struct super_block * sb,int nr)
680 {
681 return __iget(sb, nr, 1);
682 }
683
684
685 #include <linux/minix_fs.h>
686 #include <linux/minix_fs_sb.h>
687
688 #endif
689
690 #endif