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#include <linux/list.h>
19#include <linux/dcache.h>
20#include <linux/stat.h>
21#include <linux/cache.h>
22#include <linux/stddef.h>
23#include <linux/string.h>
24
25#include <asm/atomic.h>
26#include <asm/bitops.h>
27
28struct poll_table_struct;
29
30
31
32
33
34
35
36
37
38
39
40
41
42#undef NR_OPEN
43#define NR_OPEN (1024*1024)
44#define INR_OPEN 1024
45
46#define BLOCK_SIZE_BITS 10
47#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
48
49
50struct files_stat_struct {
51 int nr_files;
52 int nr_free_files;
53 int max_files;
54};
55extern struct files_stat_struct files_stat;
56
57struct inodes_stat_t {
58 int nr_inodes;
59 int nr_unused;
60 int dummy[5];
61};
62extern struct inodes_stat_t inodes_stat;
63
64extern int leases_enable, dir_notify_enable, lease_break_time;
65
66#define NR_FILE 8192
67#define NR_RESERVED_FILES 10
68#define NR_SUPER 256
69
70#define MAY_EXEC 1
71#define MAY_WRITE 2
72#define MAY_READ 4
73
74#define FMODE_READ 1
75#define FMODE_WRITE 2
76
77#define READ 0
78#define WRITE 1
79#define READA 2
80#define SPECIAL 4
81
82#define SEL_IN 1
83#define SEL_OUT 2
84#define SEL_EX 4
85
86
87#define FS_REQUIRES_DEV 1
88#define FS_NO_DCACHE 2
89#define FS_NO_PRELIM 4
90
91
92#define FS_SINGLE 8
93#define FS_NOMOUNT 16
94#define FS_LITTER 32
95#define FS_ODD_RENAME 32768
96
97
98
99
100
101#define MS_RDONLY 1
102#define MS_NOSUID 2
103#define MS_NODEV 4
104#define MS_NOEXEC 8
105#define MS_SYNCHRONOUS 16
106#define MS_REMOUNT 32
107#define MS_MANDLOCK 64
108#define MS_NOATIME 1024
109#define MS_NODIRATIME 2048
110#define MS_BIND 4096
111#define MS_MOVE 8192
112#define MS_REC 16384
113#define MS_VERBOSE 32768
114#define MS_ACTIVE (1<<30)
115#define MS_NOUSER (1<<31)
116
117
118
119
120#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_NOATIME|\
121 MS_NODIRATIME)
122
123
124
125
126#define MS_MGC_VAL 0xC0ED0000
127#define MS_MGC_MSK 0xffff0000
128
129
130
131#define S_SYNC 1
132#define S_NOATIME 2
133#define S_QUOTA 4
134#define S_APPEND 8
135#define S_IMMUTABLE 16
136#define S_DEAD 32
137#define S_NOQUOTA 64
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152#define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg))
153
154#define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
155#define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || ((inode)->i_flags & S_SYNC))
156#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
157
158#define IS_QUOTAINIT(inode) ((inode)->i_flags & S_QUOTA)
159#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
160#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
161#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
162#define IS_NOATIME(inode) (__IS_FLG(inode, MS_NOATIME) || ((inode)->i_flags & S_NOATIME))
163#define IS_NODIRATIME(inode) __IS_FLG(inode, MS_NODIRATIME)
164
165#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
166
167
168
169
170#define BLKROSET _IO(0x12,93)
171#define BLKROGET _IO(0x12,94)
172#define BLKRRPART _IO(0x12,95)
173#define BLKGETSIZE _IO(0x12,96)
174#define BLKFLSBUF _IO(0x12,97)
175#define BLKRASET _IO(0x12,98)
176#define BLKRAGET _IO(0x12,99)
177#define BLKFRASET _IO(0x12,100)
178#define BLKFRAGET _IO(0x12,101)
179#define BLKSECTSET _IO(0x12,102)
180#define BLKSECTGET _IO(0x12,103)
181#define BLKSSZGET _IO(0x12,104)
182#if 0
183#define BLKPG _IO(0x12,105)
184#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))
185#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))
186
187
188#endif
189
190#define BLKBSZGET _IOR(0x12,112,sizeof(int))
191#define BLKBSZSET _IOW(0x12,113,sizeof(int))
192#define BLKGETSIZE64 _IOR(0x12,114,sizeof(u64))
193
194#define BMAP_IOCTL 1
195#define FIBMAP _IO(0x00,1)
196#define FIGETBSZ _IO(0x00,2)
197
198#ifdef __KERNEL__
199
200#include <asm/semaphore.h>
201#include <asm/byteorder.h>
202
203extern void update_atime (struct inode *);
204#define UPDATE_ATIME(inode) update_atime (inode)
205
206extern void buffer_init(unsigned long);
207extern void inode_init(unsigned long);
208extern void mnt_init(unsigned long);
209extern void files_init(unsigned long mempages);
210
211
212enum bh_state_bits {
213 BH_Uptodate,
214 BH_Dirty,
215 BH_Lock,
216 BH_Req,
217 BH_Mapped,
218 BH_New,
219 BH_Async,
220 BH_Wait_IO,
221 BH_Launder,
222 BH_Attached,
223 BH_JBD,
224
225 BH_PrivateStart,
226
227
228};
229
230#define MAX_BUF_PER_PAGE (PAGE_CACHE_SIZE / 512)
231
232
233
234
235
236
237
238
239
240
241
242
243struct buffer_head {
244
245 struct buffer_head *b_next;
246 unsigned long b_blocknr;
247 unsigned short b_size;
248 unsigned short b_list;
249 kdev_t b_dev;
250
251 atomic_t b_count;
252 kdev_t b_rdev;
253 unsigned long b_state;
254 unsigned long b_flushtime;
255
256 struct buffer_head *b_next_free;
257 struct buffer_head *b_prev_free;
258 struct buffer_head *b_this_page;
259 struct buffer_head *b_reqnext;
260
261 struct buffer_head **b_pprev;
262 char * b_data;
263 struct page *b_page;
264 void (*b_end_io)(struct buffer_head *bh, int uptodate);
265 void *b_private;
266
267 unsigned long b_rsector;
268 wait_queue_head_t b_wait;
269
270 struct list_head b_inode_buffers;
271};
272
273typedef void (bh_end_io_t)(struct buffer_head *bh, int uptodate);
274void init_buffer(struct buffer_head *, bh_end_io_t *, void *);
275
276#define __buffer_state(bh, state) (((bh)->b_state & (1UL << BH_##state)) != 0)
277
278#define buffer_uptodate(bh) __buffer_state(bh,Uptodate)
279#define buffer_dirty(bh) __buffer_state(bh,Dirty)
280#define buffer_locked(bh) __buffer_state(bh,Lock)
281#define buffer_req(bh) __buffer_state(bh,Req)
282#define buffer_mapped(bh) __buffer_state(bh,Mapped)
283#define buffer_new(bh) __buffer_state(bh,New)
284#define buffer_async(bh) __buffer_state(bh,Async)
285#define buffer_launder(bh) __buffer_state(bh,Launder)
286
287#define bh_offset(bh) ((unsigned long)(bh)->b_data & ~PAGE_MASK)
288
289extern void set_bh_page(struct buffer_head *bh, struct page *page, unsigned long offset);
290
291#define touch_buffer(bh) mark_page_accessed(bh->b_page)
292
293
294#include <linux/pipe_fs_i.h>
295#include <linux/minix_fs_i.h>
296#include <linux/ext2_fs_i.h>
297#include <linux/ext3_fs_i.h>
298#include <linux/hpfs_fs_i.h>
299#include <linux/ntfs_fs_i.h>
300#include <linux/msdos_fs_i.h>
301#include <linux/umsdos_fs_i.h>
302#include <linux/iso_fs_i.h>
303#include <linux/nfs_fs_i.h>
304#include <linux/sysv_fs_i.h>
305#include <linux/affs_fs_i.h>
306#include <linux/ufs_fs_i.h>
307#include <linux/efs_fs_i.h>
308#include <linux/coda_fs_i.h>
309#include <linux/romfs_fs_i.h>
310#include <linux/shmem_fs.h>
311#include <linux/smb_fs_i.h>
312#include <linux/hfs_fs_i.h>
313#include <linux/adfs_fs_i.h>
314#include <linux/qnx4_fs_i.h>
315#include <linux/reiserfs_fs_i.h>
316#include <linux/bfs_fs_i.h>
317#include <linux/udf_fs_i.h>
318#include <linux/ncp_fs_i.h>
319#include <linux/proc_fs_i.h>
320#include <linux/usbdev_fs_i.h>
321#include <linux/jffs2_fs_i.h>
322#include <linux/cramfs_fs_sb.h>
323
324
325
326
327
328#define ATTR_MODE 1
329#define ATTR_UID 2
330#define ATTR_GID 4
331#define ATTR_SIZE 8
332#define ATTR_ATIME 16
333#define ATTR_MTIME 32
334#define ATTR_CTIME 64
335#define ATTR_ATIME_SET 128
336#define ATTR_MTIME_SET 256
337#define ATTR_FORCE 512
338#define ATTR_ATTR_FLAG 1024
339
340
341
342
343
344
345
346
347
348
349struct iattr {
350 unsigned int ia_valid;
351 umode_t ia_mode;
352 uid_t ia_uid;
353 gid_t ia_gid;
354 loff_t ia_size;
355 time_t ia_atime;
356 time_t ia_mtime;
357 time_t ia_ctime;
358 unsigned int ia_attr_flags;
359};
360
361
362
363
364#define ATTR_FLAG_SYNCRONOUS 1
365#define ATTR_FLAG_NOATIME 2
366#define ATTR_FLAG_APPEND 4
367#define ATTR_FLAG_IMMUTABLE 8
368#define ATTR_FLAG_NODIRATIME 16
369
370
371
372
373#include <linux/quota.h>
374#include <linux/mount.h>
375
376
377
378
379struct page;
380struct address_space;
381struct kiobuf;
382
383struct address_space_operations {
384 int (*writepage)(struct page *);
385 int (*readpage)(struct file *, struct page *);
386 int (*sync_page)(struct page *);
387
388
389
390
391 int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
392 int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
393
394 int (*bmap)(struct address_space *, long);
395 int (*flushpage) (struct page *, unsigned long);
396 int (*releasepage) (struct page *, int);
397#define KERNEL_HAS_O_DIRECT
398 int (*direct_IO)(int, struct inode *, struct kiobuf *, unsigned long, int);
399 void (*removepage)(struct page *);
400};
401
402struct address_space {
403 struct list_head clean_pages;
404 struct list_head dirty_pages;
405 struct list_head locked_pages;
406 unsigned long nrpages;
407 struct address_space_operations *a_ops;
408 struct inode *host;
409 struct vm_area_struct *i_mmap;
410 struct vm_area_struct *i_mmap_shared;
411 spinlock_t i_shared_lock;
412 int gfp_mask;
413};
414
415struct char_device {
416 struct list_head hash;
417 atomic_t count;
418 dev_t dev;
419 atomic_t openers;
420 struct semaphore sem;
421};
422
423struct block_device {
424 struct list_head bd_hash;
425 atomic_t bd_count;
426 struct inode * bd_inode;
427 dev_t bd_dev;
428 int bd_openers;
429 const struct block_device_operations *bd_op;
430 struct semaphore bd_sem;
431 struct list_head bd_inodes;
432};
433
434struct inode {
435 struct list_head i_hash;
436 struct list_head i_list;
437 struct list_head i_dentry;
438
439 struct list_head i_dirty_buffers;
440 struct list_head i_dirty_data_buffers;
441
442 unsigned long i_ino;
443 atomic_t i_count;
444 kdev_t i_dev;
445 umode_t i_mode;
446 nlink_t i_nlink;
447 uid_t i_uid;
448 gid_t i_gid;
449 kdev_t i_rdev;
450 loff_t i_size;
451 time_t i_atime;
452 time_t i_mtime;
453 time_t i_ctime;
454 unsigned int i_blkbits;
455 unsigned long i_blksize;
456 unsigned long i_blocks;
457 unsigned long i_version;
458 struct semaphore i_sem;
459 struct semaphore i_zombie;
460 struct inode_operations *i_op;
461 struct file_operations *i_fop;
462 struct super_block *i_sb;
463 wait_queue_head_t i_wait;
464 struct file_lock *i_flock;
465 struct address_space *i_mapping;
466 struct address_space i_data;
467 struct dquot *i_dquot[MAXQUOTAS];
468
469 struct list_head i_devices;
470 struct pipe_inode_info *i_pipe;
471 struct block_device *i_bdev;
472 struct char_device *i_cdev;
473
474 unsigned long i_dnotify_mask;
475 struct dnotify_struct *i_dnotify;
476
477 unsigned long i_state;
478
479 unsigned int i_flags;
480 unsigned char i_sock;
481
482 atomic_t i_writecount;
483 unsigned int i_attr_flags;
484 __u32 i_generation;
485 union {
486 struct minix_inode_info minix_i;
487 struct ext2_inode_info ext2_i;
488 struct ext3_inode_info ext3_i;
489 struct hpfs_inode_info hpfs_i;
490 struct ntfs_inode_info ntfs_i;
491 struct msdos_inode_info msdos_i;
492 struct umsdos_inode_info umsdos_i;
493 struct iso_inode_info isofs_i;
494 struct nfs_inode_info nfs_i;
495 struct sysv_inode_info sysv_i;
496 struct affs_inode_info affs_i;
497 struct ufs_inode_info ufs_i;
498 struct efs_inode_info efs_i;
499 struct romfs_inode_info romfs_i;
500 struct shmem_inode_info shmem_i;
501 struct coda_inode_info coda_i;
502 struct smb_inode_info smbfs_i;
503 struct hfs_inode_info hfs_i;
504 struct adfs_inode_info adfs_i;
505 struct qnx4_inode_info qnx4_i;
506 struct reiserfs_inode_info reiserfs_i;
507 struct bfs_inode_info bfs_i;
508 struct udf_inode_info udf_i;
509 struct ncp_inode_info ncpfs_i;
510 struct proc_inode_info proc_i;
511 struct socket socket_i;
512 struct usbdev_inode_info usbdev_i;
513 struct jffs2_inode_info jffs2_i;
514 void *generic_ip;
515 } u;
516};
517
518struct fown_struct {
519 int pid;
520 uid_t uid, euid;
521 int signum;
522};
523
524struct file {
525 struct list_head f_list;
526 struct dentry *f_dentry;
527 struct vfsmount *f_vfsmnt;
528 struct file_operations *f_op;
529 atomic_t f_count;
530 unsigned int f_flags;
531 mode_t f_mode;
532 loff_t f_pos;
533 unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
534 struct fown_struct f_owner;
535 unsigned int f_uid, f_gid;
536 int f_error;
537
538 unsigned long f_version;
539
540
541 void *private_data;
542
543
544 struct kiobuf *f_iobuf;
545 long f_iobuf_lock;
546};
547extern spinlock_t files_lock;
548#define file_list_lock() spin_lock(&files_lock);
549#define file_list_unlock() spin_unlock(&files_lock);
550
551#define get_file(x) atomic_inc(&(x)->f_count)
552#define file_count(x) atomic_read(&(x)->f_count)
553
554extern int init_private_file(struct file *, struct dentry *, int);
555
556#define MAX_NON_LFS ((1UL<<31) - 1)
557
558
559
560#if BITS_PER_LONG==32
561#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
562#elif BITS_PER_LONG==64
563#define MAX_LFS_FILESIZE 0x7fffffffffffffff
564#endif
565
566#define FL_POSIX 1
567#define FL_FLOCK 2
568#define FL_BROKEN 4
569#define FL_ACCESS 8
570#define FL_LOCKD 16
571#define FL_LEASE 32
572
573
574
575
576
577
578
579
580typedef struct files_struct *fl_owner_t;
581
582struct file_lock {
583 struct file_lock *fl_next;
584 struct list_head fl_link;
585 struct list_head fl_block;
586 fl_owner_t fl_owner;
587 unsigned int fl_pid;
588 wait_queue_head_t fl_wait;
589 struct file *fl_file;
590 unsigned char fl_flags;
591 unsigned char fl_type;
592 loff_t fl_start;
593 loff_t fl_end;
594
595 void (*fl_notify)(struct file_lock *);
596 void (*fl_insert)(struct file_lock *);
597 void (*fl_remove)(struct file_lock *);
598
599 struct fasync_struct * fl_fasync;
600 unsigned long fl_break_time;
601
602 union {
603 struct nfs_lock_info nfs_fl;
604 } fl_u;
605};
606
607
608#ifndef OFFSET_MAX
609#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
610#define OFFSET_MAX INT_LIMIT(loff_t)
611#define OFFT_OFFSET_MAX INT_LIMIT(off_t)
612#endif
613
614extern struct list_head file_lock_list;
615
616#include <linux/fcntl.h>
617
618extern int fcntl_getlk(unsigned int, struct flock *);
619extern int fcntl_setlk(unsigned int, unsigned int, struct flock *);
620
621extern int fcntl_getlk64(unsigned int, struct flock64 *);
622extern int fcntl_setlk64(unsigned int, unsigned int, struct flock64 *);
623
624
625extern void locks_init_lock(struct file_lock *);
626extern void locks_copy_lock(struct file_lock *, struct file_lock *);
627extern void locks_remove_posix(struct file *, fl_owner_t);
628extern void locks_remove_flock(struct file *);
629extern struct file_lock *posix_test_lock(struct file *, struct file_lock *);
630extern int posix_lock_file(struct file *, struct file_lock *, unsigned int);
631extern void posix_block_lock(struct file_lock *, struct file_lock *);
632extern void posix_unblock_lock(struct file_lock *);
633extern int posix_locks_deadlock(struct file_lock *, struct file_lock *);
634extern int __get_lease(struct inode *inode, unsigned int flags);
635extern time_t lease_get_mtime(struct inode *);
636extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
637extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
638
639struct fasync_struct {
640 int magic;
641 int fa_fd;
642 struct fasync_struct *fa_next;
643 struct file *fa_file;
644};
645
646#define FASYNC_MAGIC 0x4601
647
648
649extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
650
651extern void kill_fasync(struct fasync_struct **, int, int);
652
653extern void __kill_fasync(struct fasync_struct *, int, int);
654
655struct nameidata {
656 struct dentry *dentry;
657 struct vfsmount *mnt;
658 struct qstr last;
659 unsigned int flags;
660 int last_type;
661};
662
663#define DQUOT_USR_ENABLED 0x01
664#define DQUOT_GRP_ENABLED 0x02
665
666struct quota_mount_options
667{
668 unsigned int flags;
669 struct semaphore dqio_sem;
670 struct semaphore dqoff_sem;
671 struct file *files[MAXQUOTAS];
672 time_t inode_expire[MAXQUOTAS];
673 time_t block_expire[MAXQUOTAS];
674 char rsquash[MAXQUOTAS];
675};
676
677
678
679
680
681#define MNT_FORCE 0x00000001
682#define MNT_DETACH 0x00000002
683
684#include <linux/minix_fs_sb.h>
685#include <linux/ext2_fs_sb.h>
686#include <linux/ext3_fs_sb.h>
687#include <linux/hpfs_fs_sb.h>
688#include <linux/ntfs_fs_sb.h>
689#include <linux/msdos_fs_sb.h>
690#include <linux/iso_fs_sb.h>
691#include <linux/nfs_fs_sb.h>
692#include <linux/sysv_fs_sb.h>
693#include <linux/affs_fs_sb.h>
694#include <linux/ufs_fs_sb.h>
695#include <linux/efs_fs_sb.h>
696#include <linux/romfs_fs_sb.h>
697#include <linux/smb_fs_sb.h>
698#include <linux/hfs_fs_sb.h>
699#include <linux/adfs_fs_sb.h>
700#include <linux/qnx4_fs_sb.h>
701#include <linux/reiserfs_fs_sb.h>
702#include <linux/bfs_fs_sb.h>
703#include <linux/udf_fs_sb.h>
704#include <linux/ncp_fs_sb.h>
705#include <linux/usbdev_fs_sb.h>
706#include <linux/cramfs_fs_sb.h>
707#include <linux/jffs2_fs_sb.h>
708
709extern struct list_head super_blocks;
710extern spinlock_t sb_lock;
711
712#define sb_entry(list) list_entry((list), struct super_block, s_list)
713#define S_BIAS (1<<30)
714struct super_block {
715 struct list_head s_list;
716 kdev_t s_dev;
717 unsigned long s_blocksize;
718 unsigned char s_blocksize_bits;
719 unsigned char s_dirt;
720 unsigned long long s_maxbytes;
721 struct file_system_type *s_type;
722 struct super_operations *s_op;
723 struct dquot_operations *dq_op;
724 unsigned long s_flags;
725 unsigned long s_magic;
726 struct dentry *s_root;
727 struct rw_semaphore s_umount;
728 struct semaphore s_lock;
729 int s_count;
730 atomic_t s_active;
731
732 struct list_head s_dirty;
733 struct list_head s_locked_inodes;
734 struct list_head s_files;
735
736 struct block_device *s_bdev;
737 struct list_head s_instances;
738 struct quota_mount_options s_dquot;
739
740 union {
741 struct minix_sb_info minix_sb;
742 struct ext2_sb_info ext2_sb;
743 struct ext3_sb_info ext3_sb;
744 struct hpfs_sb_info hpfs_sb;
745 struct ntfs_sb_info ntfs_sb;
746 struct msdos_sb_info msdos_sb;
747 struct isofs_sb_info isofs_sb;
748 struct nfs_sb_info nfs_sb;
749 struct sysv_sb_info sysv_sb;
750 struct affs_sb_info affs_sb;
751 struct ufs_sb_info ufs_sb;
752 struct efs_sb_info efs_sb;
753 struct shmem_sb_info shmem_sb;
754 struct romfs_sb_info romfs_sb;
755 struct smb_sb_info smbfs_sb;
756 struct hfs_sb_info hfs_sb;
757 struct adfs_sb_info adfs_sb;
758 struct qnx4_sb_info qnx4_sb;
759 struct reiserfs_sb_info reiserfs_sb;
760 struct bfs_sb_info bfs_sb;
761 struct udf_sb_info udf_sb;
762 struct ncp_sb_info ncpfs_sb;
763 struct usbdev_sb_info usbdevfs_sb;
764 struct jffs2_sb_info jffs2_sb;
765 struct cramfs_sb_info cramfs_sb;
766 void *generic_sbp;
767 } u;
768
769
770
771
772 struct semaphore s_vfs_rename_sem;
773
774
775
776
777
778
779
780
781 struct semaphore s_nfsd_free_path_sem;
782};
783
784
785
786
787extern int vfs_create(struct inode *, struct dentry *, int);
788extern int vfs_mkdir(struct inode *, struct dentry *, int);
789extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
790extern int vfs_symlink(struct inode *, struct dentry *, const char *);
791extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
792extern int vfs_rmdir(struct inode *, struct dentry *);
793extern int vfs_unlink(struct inode *, struct dentry *);
794extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
795
796
797
798
799#define DT_UNKNOWN 0
800#define DT_FIFO 1
801#define DT_CHR 2
802#define DT_DIR 4
803#define DT_BLK 6
804#define DT_REG 8
805#define DT_LNK 10
806#define DT_SOCK 12
807#define DT_WHT 14
808
809
810
811
812
813
814
815typedef int (*filldir_t)(void *, const char *, int, loff_t, ino_t, unsigned);
816
817struct block_device_operations {
818 int (*open) (struct inode *, struct file *);
819 int (*release) (struct inode *, struct file *);
820 int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
821 int (*check_media_change) (kdev_t);
822 int (*revalidate) (kdev_t);
823 struct module *owner;
824};
825
826
827
828
829
830
831struct file_operations {
832 struct module *owner;
833 loff_t (*llseek) (struct file *, loff_t, int);
834 ssize_t (*read) (struct file *, char *, size_t, loff_t *);
835 ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
836 int (*readdir) (struct file *, void *, filldir_t);
837 unsigned int (*poll) (struct file *, struct poll_table_struct *);
838 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
839 int (*mmap) (struct file *, struct vm_area_struct *);
840 int (*open) (struct inode *, struct file *);
841 int (*flush) (struct file *);
842 int (*release) (struct inode *, struct file *);
843 int (*fsync) (struct file *, struct dentry *, int datasync);
844 int (*fasync) (int, struct file *, int);
845 int (*lock) (struct file *, int, struct file_lock *);
846 ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
847 ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
848 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
849 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
850};
851
852struct inode_operations {
853 int (*create) (struct inode *,struct dentry *,int);
854 struct dentry * (*lookup) (struct inode *,struct dentry *);
855 int (*link) (struct dentry *,struct inode *,struct dentry *);
856 int (*unlink) (struct inode *,struct dentry *);
857 int (*symlink) (struct inode *,struct dentry *,const char *);
858 int (*mkdir) (struct inode *,struct dentry *,int);
859 int (*rmdir) (struct inode *,struct dentry *);
860 int (*mknod) (struct inode *,struct dentry *,int,int);
861 int (*rename) (struct inode *, struct dentry *,
862 struct inode *, struct dentry *);
863 int (*readlink) (struct dentry *, char *,int);
864 int (*follow_link) (struct dentry *, struct nameidata *);
865 void (*truncate) (struct inode *);
866 int (*permission) (struct inode *, int);
867 int (*revalidate) (struct dentry *);
868 int (*setattr) (struct dentry *, struct iattr *);
869 int (*getattr) (struct dentry *, struct iattr *);
870 int (*setxattr) (struct dentry *, const char *, void *, size_t, int);
871 ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
872 ssize_t (*listxattr) (struct dentry *, char *, size_t);
873 int (*removexattr) (struct dentry *, const char *);
874};
875
876struct seq_file;
877
878
879
880
881
882struct super_operations {
883 struct inode *(*alloc_inode)(struct super_block *sb);
884 void (*destroy_inode)(struct inode *);
885
886 void (*read_inode) (struct inode *);
887
888
889
890
891
892
893
894 void (*read_inode2) (struct inode *, void *) ;
895 void (*dirty_inode) (struct inode *);
896 void (*write_inode) (struct inode *, int);
897 void (*put_inode) (struct inode *);
898 void (*delete_inode) (struct inode *);
899 void (*put_super) (struct super_block *);
900 void (*write_super) (struct super_block *);
901 int (*sync_fs) (struct super_block *);
902 void (*write_super_lockfs) (struct super_block *);
903 void (*unlockfs) (struct super_block *);
904 int (*statfs) (struct super_block *, struct statfs *);
905 int (*remount_fs) (struct super_block *, int *, char *);
906 void (*clear_inode) (struct inode *);
907 void (*umount_begin) (struct super_block *);
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931 struct dentry * (*fh_to_dentry)(struct super_block *sb, __u32 *fh, int len, int fhtype, int parent);
932 int (*dentry_to_fh)(struct dentry *, __u32 *fh, int *lenp, int need_parent);
933 int (*show_options)(struct seq_file *, struct vfsmount *);
934};
935
936
937#define I_DIRTY_SYNC 1
938#define I_DIRTY_DATASYNC 2
939#define I_DIRTY_PAGES 4
940#define I_LOCK 8
941#define I_FREEING 16
942#define I_CLEAR 32
943
944#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
945
946extern void __mark_inode_dirty(struct inode *, int);
947static inline void mark_inode_dirty(struct inode *inode)
948{
949 __mark_inode_dirty(inode, I_DIRTY);
950}
951
952static inline void mark_inode_dirty_sync(struct inode *inode)
953{
954 __mark_inode_dirty(inode, I_DIRTY_SYNC);
955}
956
957static inline void mark_inode_dirty_pages(struct inode *inode)
958{
959 __mark_inode_dirty(inode, I_DIRTY_PAGES);
960}
961
962struct dquot_operations {
963 void (*initialize) (struct inode *, short);
964 void (*drop) (struct inode *);
965 int (*alloc_block) (struct inode *, unsigned long, char);
966 int (*alloc_inode) (const struct inode *, unsigned long);
967 void (*free_block) (struct inode *, unsigned long);
968 void (*free_inode) (const struct inode *, unsigned long);
969 int (*transfer) (struct inode *, struct iattr *);
970};
971
972struct file_system_type {
973 const char *name;
974 int fs_flags;
975 struct super_block *(*read_super) (struct super_block *, void *, int);
976 struct module *owner;
977 struct file_system_type * next;
978 struct list_head fs_supers;
979};
980
981#define DECLARE_FSTYPE(var,type,read,flags) \
982struct file_system_type var = { \
983 name: type, \
984 read_super: read, \
985 fs_flags: flags, \
986 owner: THIS_MODULE, \
987}
988
989#define DECLARE_FSTYPE_DEV(var,type,read) \
990 DECLARE_FSTYPE(var,type,read,FS_REQUIRES_DEV)
991
992
993#define fops_get(fops) \
994 (((fops) && (fops)->owner) \
995 ? ( try_inc_mod_count((fops)->owner) ? (fops) : NULL ) \
996 : (fops))
997
998#define fops_put(fops) \
999do { \
1000 if ((fops) && (fops)->owner) \
1001 __MOD_DEC_USE_COUNT((fops)->owner); \
1002} while(0)
1003
1004extern int register_filesystem(struct file_system_type *);
1005extern int unregister_filesystem(struct file_system_type *);
1006extern struct vfsmount *kern_mount(struct file_system_type *);
1007extern int may_umount(struct vfsmount *);
1008extern long do_mount(char *, char *, char *, unsigned long, void *);
1009
1010#define kern_umount mntput
1011
1012extern int vfs_statfs(struct super_block *, struct statfs *);
1013
1014
1015
1016
1017#define LOCK_USE_CLNT 1
1018
1019#define FLOCK_VERIFY_READ 1
1020#define FLOCK_VERIFY_WRITE 2
1021
1022extern int locks_mandatory_locked(struct inode *);
1023extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size_t);
1024
1025
1026
1027
1028
1029#define MANDATORY_LOCK(inode) \
1030 (IS_MANDLOCK(inode) && ((inode)->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
1031
1032static inline int locks_verify_locked(struct inode *inode)
1033{
1034 if (MANDATORY_LOCK(inode))
1035 return locks_mandatory_locked(inode);
1036 return 0;
1037}
1038
1039static inline int locks_verify_area(int read_write, struct inode *inode,
1040 struct file *filp, loff_t offset,
1041 size_t count)
1042{
1043 if (inode->i_flock && MANDATORY_LOCK(inode))
1044 return locks_mandatory_area(read_write, inode, filp, offset, count);
1045 return 0;
1046}
1047
1048static inline int locks_verify_truncate(struct inode *inode,
1049 struct file *filp,
1050 loff_t size)
1051{
1052 if (inode->i_flock && MANDATORY_LOCK(inode))
1053 return locks_mandatory_area(
1054 FLOCK_VERIFY_WRITE, inode, filp,
1055 size < inode->i_size ? size : inode->i_size,
1056 (size < inode->i_size ? inode->i_size - size
1057 : size - inode->i_size)
1058 );
1059 return 0;
1060}
1061
1062static inline int get_lease(struct inode *inode, unsigned int mode)
1063{
1064 if (inode->i_flock)
1065 return __get_lease(inode, mode);
1066 return 0;
1067}
1068
1069
1070
1071asmlinkage long sys_open(const char *, int, int);
1072asmlinkage long sys_close(unsigned int);
1073extern int do_truncate(struct dentry *, loff_t start);
1074
1075extern struct file *filp_open(const char *, int, int);
1076extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
1077extern int filp_close(struct file *, fl_owner_t id);
1078extern char * getname(const char *);
1079
1080
1081extern void vfs_caches_init(unsigned long);
1082
1083#define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL)
1084#define putname(name) kmem_cache_free(names_cachep, (void *)(name))
1085
1086enum {BDEV_FILE, BDEV_SWAP, BDEV_FS, BDEV_RAW};
1087extern int register_blkdev(unsigned int, const char *, struct block_device_operations *);
1088extern int unregister_blkdev(unsigned int, const char *);
1089extern struct block_device *bdget(dev_t);
1090extern int bd_acquire(struct inode *inode);
1091extern void bd_forget(struct inode *inode);
1092extern void bdput(struct block_device *);
1093extern struct char_device *cdget(dev_t);
1094extern void cdput(struct char_device *);
1095extern int blkdev_open(struct inode *, struct file *);
1096extern int blkdev_close(struct inode *, struct file *);
1097extern struct file_operations def_blk_fops;
1098extern struct address_space_operations def_blk_aops;
1099extern struct file_operations def_fifo_fops;
1100extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
1101extern int blkdev_get(struct block_device *, mode_t, unsigned, int);
1102extern int blkdev_put(struct block_device *, int);
1103
1104
1105extern const struct block_device_operations *get_blkfops(unsigned int);
1106extern int register_chrdev(unsigned int, const char *, struct file_operations *);
1107extern int unregister_chrdev(unsigned int, const char *);
1108extern int chrdev_open(struct inode *, struct file *);
1109extern const char * bdevname(kdev_t);
1110extern const char * cdevname(kdev_t);
1111extern const char * kdevname(kdev_t);
1112extern void init_special_inode(struct inode *, umode_t, int);
1113
1114
1115extern void make_bad_inode(struct inode *);
1116extern int is_bad_inode(struct inode *);
1117
1118extern struct file_operations read_fifo_fops;
1119extern struct file_operations write_fifo_fops;
1120extern struct file_operations rdwr_fifo_fops;
1121extern struct file_operations read_pipe_fops;
1122extern struct file_operations write_pipe_fops;
1123extern struct file_operations rdwr_pipe_fops;
1124
1125extern int fs_may_remount_ro(struct super_block *);
1126
1127extern int FASTCALL(try_to_free_buffers(struct page *, unsigned int));
1128extern void refile_buffer(struct buffer_head * buf);
1129extern void create_empty_buffers(struct page *, kdev_t, unsigned long);
1130extern void end_buffer_io_sync(struct buffer_head *bh, int uptodate);
1131
1132
1133extern void set_buffer_async_io(struct buffer_head *bh) ;
1134
1135#define BUF_CLEAN 0
1136#define BUF_LOCKED 1
1137#define BUF_DIRTY 2
1138#define NR_LIST 3
1139
1140static inline void get_bh(struct buffer_head * bh)
1141{
1142 atomic_inc(&(bh)->b_count);
1143}
1144
1145static inline void put_bh(struct buffer_head *bh)
1146{
1147 smp_mb__before_atomic_dec();
1148 atomic_dec(&bh->b_count);
1149}
1150
1151
1152
1153
1154static inline void mark_buffer_uptodate(struct buffer_head * bh, int on)
1155{
1156 if (on)
1157 set_bit(BH_Uptodate, &bh->b_state);
1158 else
1159 clear_bit(BH_Uptodate, &bh->b_state);
1160}
1161
1162#define atomic_set_buffer_clean(bh) test_and_clear_bit(BH_Dirty, &(bh)->b_state)
1163
1164static inline void __mark_buffer_clean(struct buffer_head *bh)
1165{
1166 refile_buffer(bh);
1167}
1168
1169static inline void mark_buffer_clean(struct buffer_head * bh)
1170{
1171 if (atomic_set_buffer_clean(bh))
1172 __mark_buffer_clean(bh);
1173}
1174
1175extern void FASTCALL(__mark_dirty(struct buffer_head *bh));
1176extern void FASTCALL(__mark_buffer_dirty(struct buffer_head *bh));
1177extern void FASTCALL(mark_buffer_dirty(struct buffer_head *bh));
1178
1179extern void FASTCALL(buffer_insert_list(struct buffer_head *, struct list_head *));
1180
1181static inline void buffer_insert_inode_queue(struct buffer_head *bh, struct inode *inode)
1182{
1183 buffer_insert_list(bh, &inode->i_dirty_buffers);
1184}
1185
1186static inline void buffer_insert_inode_data_queue(struct buffer_head *bh, struct inode *inode)
1187{
1188 buffer_insert_list(bh, &inode->i_dirty_data_buffers);
1189}
1190
1191static inline int atomic_set_buffer_dirty(struct buffer_head *bh)
1192{
1193 return test_and_set_bit(BH_Dirty, &bh->b_state);
1194}
1195
1196static inline void mark_buffer_async(struct buffer_head * bh, int on)
1197{
1198 if (on)
1199 set_bit(BH_Async, &bh->b_state);
1200 else
1201 clear_bit(BH_Async, &bh->b_state);
1202}
1203
1204static inline void set_buffer_attached(struct buffer_head *bh)
1205{
1206 set_bit(BH_Attached, &bh->b_state);
1207}
1208
1209static inline void clear_buffer_attached(struct buffer_head *bh)
1210{
1211 clear_bit(BH_Attached, &bh->b_state);
1212}
1213
1214static inline int buffer_attached(struct buffer_head *bh)
1215{
1216 return test_bit(BH_Attached, &bh->b_state);
1217}
1218
1219
1220
1221
1222
1223
1224
1225static inline void buffer_IO_error(struct buffer_head * bh)
1226{
1227 mark_buffer_clean(bh);
1228
1229
1230
1231 bh->b_end_io(bh, 0);
1232}
1233
1234static inline void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode)
1235{
1236 mark_buffer_dirty(bh);
1237 buffer_insert_inode_queue(bh, inode);
1238}
1239
1240extern void set_buffer_flushtime(struct buffer_head *);
1241extern void balance_dirty(void);
1242extern int check_disk_change(kdev_t);
1243extern int invalidate_inodes(struct super_block *);
1244extern int invalidate_device(kdev_t, int);
1245extern void invalidate_inode_pages(struct inode *);
1246extern void invalidate_inode_pages2(struct address_space *);
1247extern void invalidate_inode_buffers(struct inode *);
1248#define invalidate_buffers(dev) __invalidate_buffers((dev), 0)
1249#define destroy_buffers(dev) __invalidate_buffers((dev), 1)
1250extern void invalidate_bdev(struct block_device *, int);
1251extern void __invalidate_buffers(kdev_t dev, int);
1252extern void sync_inodes(kdev_t);
1253extern void sync_unlocked_inodes(void);
1254extern void write_inode_now(struct inode *, int);
1255extern int sync_buffers(kdev_t, int);
1256extern void sync_dev(kdev_t);
1257extern int fsync_dev(kdev_t);
1258extern int fsync_super(struct super_block *);
1259extern int fsync_no_super(kdev_t);
1260extern void sync_inodes_sb(struct super_block *);
1261extern int fsync_buffers_list(struct list_head *);
1262static inline int fsync_inode_buffers(struct inode *inode)
1263{
1264 return fsync_buffers_list(&inode->i_dirty_buffers);
1265}
1266static inline int fsync_inode_data_buffers(struct inode *inode)
1267{
1268 return fsync_buffers_list(&inode->i_dirty_data_buffers);
1269}
1270extern int inode_has_buffers(struct inode *);
1271extern int filemap_fdatasync(struct address_space *);
1272extern int filemap_fdatawait(struct address_space *);
1273extern void sync_supers(kdev_t dev, int wait);
1274extern int bmap(struct inode *, int);
1275extern int notify_change(struct dentry *, struct iattr *);
1276extern int permission(struct inode *, int);
1277extern int vfs_permission(struct inode *, int);
1278extern int get_write_access(struct inode *);
1279extern int deny_write_access(struct file *);
1280static inline void put_write_access(struct inode * inode)
1281{
1282 atomic_dec(&inode->i_writecount);
1283}
1284static inline void allow_write_access(struct file *file)
1285{
1286 if (file)
1287 atomic_inc(&file->f_dentry->d_inode->i_writecount);
1288}
1289extern int do_pipe(int *);
1290
1291extern int open_namei(const char *, int, int, struct nameidata *);
1292
1293extern int kernel_read(struct file *, unsigned long, char *, unsigned long);
1294extern struct file * open_exec(const char *);
1295
1296
1297extern int is_subdir(struct dentry *, struct dentry *);
1298extern ino_t find_inode_number(struct dentry *, struct qstr *);
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308static inline void *ERR_PTR(long error)
1309{
1310 return (void *) error;
1311}
1312
1313static inline long PTR_ERR(const void *ptr)
1314{
1315 return (long) ptr;
1316}
1317
1318static inline long IS_ERR(const void *ptr)
1319{
1320 return (unsigned long)ptr > (unsigned long)-1000L;
1321}
1322
1323
1324
1325
1326
1327
1328
1329
1330#define LOOKUP_FOLLOW (1)
1331#define LOOKUP_DIRECTORY (2)
1332#define LOOKUP_CONTINUE (4)
1333#define LOOKUP_POSITIVE (8)
1334#define LOOKUP_PARENT (16)
1335#define LOOKUP_NOALT (32)
1336
1337
1338
1339enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350typedef struct {
1351 size_t written;
1352 size_t count;
1353 char * buf;
1354 int error;
1355} read_descriptor_t;
1356
1357typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
1358
1359
1360extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
1361
1362extern int FASTCALL(__user_walk(const char *, unsigned, struct nameidata *));
1363extern int FASTCALL(path_init(const char *, unsigned, struct nameidata *));
1364extern int FASTCALL(path_walk(const char *, struct nameidata *));
1365extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *));
1366extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
1367extern void path_release(struct nameidata *);
1368extern int follow_down(struct vfsmount **, struct dentry **);
1369extern int follow_up(struct vfsmount **, struct dentry **);
1370extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
1371extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
1372#define user_path_walk(name,nd) __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
1373#define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
1374
1375extern void inode_init_once(struct inode *);
1376extern void iput(struct inode *);
1377extern void force_delete(struct inode *);
1378extern struct inode * igrab(struct inode *);
1379extern ino_t iunique(struct super_block *, ino_t);
1380
1381typedef int (*find_inode_t)(struct inode *, unsigned long, void *);
1382extern struct inode * iget4(struct super_block *, unsigned long, find_inode_t, void *);
1383static inline struct inode *iget(struct super_block *sb, unsigned long ino)
1384{
1385 return iget4(sb, ino, NULL, NULL);
1386}
1387
1388extern void clear_inode(struct inode *);
1389extern struct inode *new_inode(struct super_block *sb);
1390extern void remove_suid(struct inode *inode);
1391
1392extern void insert_inode_hash(struct inode *);
1393extern void remove_inode_hash(struct inode *);
1394extern struct file * get_empty_filp(void);
1395extern void file_move(struct file *f, struct list_head *list);
1396extern struct buffer_head * get_hash_table(kdev_t, int, int);
1397extern struct buffer_head * getblk(kdev_t, int, int);
1398extern void ll_rw_block(int, int, struct buffer_head * bh[]);
1399extern void submit_bh(int, struct buffer_head *);
1400extern int is_read_only(kdev_t);
1401extern void __brelse(struct buffer_head *);
1402static inline void brelse(struct buffer_head *buf)
1403{
1404 if (buf)
1405 __brelse(buf);
1406}
1407extern void __bforget(struct buffer_head *);
1408static inline void bforget(struct buffer_head *buf)
1409{
1410 if (buf)
1411 __bforget(buf);
1412}
1413extern int set_blocksize(kdev_t, int);
1414extern int sb_set_blocksize(struct super_block *, int);
1415extern int sb_min_blocksize(struct super_block *, int);
1416extern struct buffer_head * bread(kdev_t, int, int);
1417static inline struct buffer_head * sb_bread(struct super_block *sb, int block)
1418{
1419 return bread(sb->s_dev, block, sb->s_blocksize);
1420}
1421static inline struct buffer_head * sb_getblk(struct super_block *sb, int block)
1422{
1423 return getblk(sb->s_dev, block, sb->s_blocksize);
1424}
1425static inline struct buffer_head * sb_get_hash_table(struct super_block *sb, int block)
1426{
1427 return get_hash_table(sb->s_dev, block, sb->s_blocksize);
1428}
1429extern void wakeup_bdflush(void);
1430extern void put_unused_buffer_head(struct buffer_head * bh);
1431extern struct buffer_head * get_unused_buffer_head(int async);
1432
1433extern int brw_page(int, struct page *, kdev_t, int [], int);
1434
1435typedef int (get_block_t)(struct inode*,long,struct buffer_head*,int);
1436
1437
1438extern int try_to_release_page(struct page * page, int gfp_mask);
1439extern int discard_bh_page(struct page *, unsigned long, int);
1440#define block_flushpage(page, offset) discard_bh_page(page, offset, 1)
1441#define block_invalidate_page(page) discard_bh_page(page, 0, 0)
1442extern int block_symlink(struct inode *, const char *, int);
1443extern int block_write_full_page(struct page*, get_block_t*);
1444extern int block_read_full_page(struct page*, get_block_t*);
1445extern int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*);
1446extern int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*,
1447 unsigned long *);
1448extern int generic_cont_expand(struct inode *inode, loff_t size) ;
1449extern int block_commit_write(struct page *page, unsigned from, unsigned to);
1450extern int block_sync_page(struct page *);
1451
1452int generic_block_bmap(struct address_space *, long, get_block_t *);
1453int generic_commit_write(struct file *, struct page *, unsigned, unsigned);
1454int block_truncate_page(struct address_space *, loff_t, get_block_t *);
1455extern int generic_direct_IO(int, struct inode *, struct kiobuf *, unsigned long, int, get_block_t *);
1456extern int waitfor_one_page(struct page *);
1457extern int writeout_one_page(struct page *);
1458
1459extern int generic_file_mmap(struct file *, struct vm_area_struct *);
1460extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);
1461extern ssize_t generic_file_read(struct file *, char *, size_t, loff_t *);
1462extern ssize_t generic_file_write(struct file *, const char *, size_t, loff_t *);
1463extern void do_generic_file_read(struct file *, loff_t *, read_descriptor_t *, read_actor_t);
1464extern loff_t no_llseek(struct file *file, loff_t offset, int origin);
1465extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);
1466extern ssize_t generic_read_dir(struct file *, char *, size_t, loff_t *);
1467extern int generic_file_open(struct inode * inode, struct file * filp);
1468
1469extern struct file_operations generic_ro_fops;
1470
1471extern int vfs_readlink(struct dentry *, char *, int, const char *);
1472extern int vfs_follow_link(struct nameidata *, const char *);
1473extern int page_readlink(struct dentry *, char *, int);
1474extern int page_follow_link(struct dentry *, struct nameidata *);
1475extern struct inode_operations page_symlink_inode_operations;
1476
1477extern int vfs_readdir(struct file *, filldir_t, void *);
1478extern int dcache_dir_open(struct inode *, struct file *);
1479extern int dcache_dir_close(struct inode *, struct file *);
1480extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
1481extern int dcache_dir_fsync(struct file *, struct dentry *, int);
1482extern int dcache_readdir(struct file *, void *, filldir_t);
1483extern struct file_operations dcache_dir_ops;
1484
1485extern struct file_system_type *get_fs_type(const char *name);
1486extern struct super_block *get_super(kdev_t);
1487extern void drop_super(struct super_block *sb);
1488static inline int is_mounted(kdev_t dev)
1489{
1490 struct super_block *sb = get_super(dev);
1491 if (sb) {
1492 drop_super(sb);
1493 return 1;
1494 }
1495 return 0;
1496}
1497unsigned long generate_cluster(kdev_t, int b[], int);
1498unsigned long generate_cluster_swab32(kdev_t, int b[], int);
1499extern kdev_t ROOT_DEV;
1500extern char root_device_name[];
1501
1502
1503extern void show_buffers(void);
1504
1505#ifdef CONFIG_BLK_DEV_INITRD
1506extern unsigned int real_root_dev;
1507#endif
1508
1509extern ssize_t char_read(struct file *, char *, size_t, loff_t *);
1510extern ssize_t block_read(struct file *, char *, size_t, loff_t *);
1511extern int read_ahead[];
1512
1513extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);
1514extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);
1515
1516extern int file_fsync(struct file *, struct dentry *, int);
1517extern int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx, unsigned long end_idx);
1518extern int generic_osync_inode(struct inode *, int);
1519#define OSYNC_METADATA (1<<0)
1520#define OSYNC_DATA (1<<1)
1521#define OSYNC_INODE (1<<2)
1522
1523extern int inode_change_ok(struct inode *, struct iattr *);
1524extern int inode_setattr(struct inode *, struct iattr *);
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545static inline struct dentry *lock_parent(struct dentry *dentry)
1546{
1547 struct dentry *dir = dget(dentry->d_parent);
1548
1549 down(&dir->d_inode->i_sem);
1550 return dir;
1551}
1552
1553static inline struct dentry *get_parent(struct dentry *dentry)
1554{
1555 return dget(dentry->d_parent);
1556}
1557
1558static inline void unlock_dir(struct dentry *dir)
1559{
1560 up(&dir->d_inode->i_sem);
1561 dput(dir);
1562}
1563
1564
1565
1566
1567
1568static inline void double_down(struct semaphore *s1, struct semaphore *s2)
1569{
1570 if (s1 != s2) {
1571 if ((unsigned long) s1 < (unsigned long) s2) {
1572 struct semaphore *tmp = s2;
1573 s2 = s1; s1 = tmp;
1574 }
1575 down(s1);
1576 }
1577 down(s2);
1578}
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589static inline void triple_down(struct semaphore *s1,
1590 struct semaphore *s2,
1591 struct semaphore *s3)
1592{
1593 if (s1 != s2) {
1594 if ((unsigned long) s1 < (unsigned long) s2) {
1595 if ((unsigned long) s1 < (unsigned long) s3) {
1596 struct semaphore *tmp = s3;
1597 s3 = s1; s1 = tmp;
1598 }
1599 if ((unsigned long) s1 < (unsigned long) s2) {
1600 struct semaphore *tmp = s2;
1601 s2 = s1; s1 = tmp;
1602 }
1603 } else {
1604 if ((unsigned long) s1 < (unsigned long) s3) {
1605 struct semaphore *tmp = s3;
1606 s3 = s1; s1 = tmp;
1607 }
1608 if ((unsigned long) s2 < (unsigned long) s3) {
1609 struct semaphore *tmp = s3;
1610 s3 = s2; s2 = tmp;
1611 }
1612 }
1613 down(s1);
1614 } else if ((unsigned long) s2 < (unsigned long) s3) {
1615 struct semaphore *tmp = s3;
1616 s3 = s2; s2 = tmp;
1617 }
1618 down(s2);
1619 down(s3);
1620}
1621
1622static inline void double_up(struct semaphore *s1, struct semaphore *s2)
1623{
1624 up(s1);
1625 if (s1 != s2)
1626 up(s2);
1627}
1628
1629static inline void triple_up(struct semaphore *s1,
1630 struct semaphore *s2,
1631 struct semaphore *s3)
1632{
1633 up(s1);
1634 if (s1 != s2)
1635 up(s2);
1636 up(s3);
1637}
1638
1639static inline void double_lock(struct dentry *d1, struct dentry *d2)
1640{
1641 double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
1642}
1643
1644static inline void double_unlock(struct dentry *d1, struct dentry *d2)
1645{
1646 double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
1647 dput(d1);
1648 dput(d2);
1649}
1650
1651#endif
1652
1653#endif
1654