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