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/kdev_t.h>
15#include <linux/ioctl.h>
16#include <linux/dcache.h>
17#include <linux/stat.h>
18#include <linux/cache.h>
19#include <linux/prio_tree.h>
20#include <linux/kobject.h>
21#include <asm/atomic.h>
22
23struct iovec;
24struct nameidata;
25struct pipe_inode_info;
26struct poll_table_struct;
27struct kstatfs;
28struct vm_area_struct;
29struct vfsmount;
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#define MAY_APPEND 8
74
75#define FMODE_READ 1
76#define FMODE_WRITE 2
77
78
79#define FMODE_LSEEK 4
80#define FMODE_PREAD 8
81#define FMODE_PWRITE FMODE_PREAD
82
83#define RW_MASK 1
84#define RWA_MASK 2
85#define READ 0
86#define WRITE 1
87#define READA 2
88#define SPECIAL 4
89#define READ_SYNC (READ | (1 << BIO_RW_SYNC))
90#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC))
91
92#define SEL_IN 1
93#define SEL_OUT 2
94#define SEL_EX 4
95
96
97#define FS_REQUIRES_DEV 1
98#define FS_BINARY_MOUNTDATA 2
99#define FS_REVAL_DOT 16384
100#define FS_ODD_RENAME 32768
101
102
103
104
105
106#define MS_RDONLY 1
107#define MS_NOSUID 2
108#define MS_NODEV 4
109#define MS_NOEXEC 8
110#define MS_SYNCHRONOUS 16
111#define MS_REMOUNT 32
112#define MS_MANDLOCK 64
113#define MS_DIRSYNC 128
114#define MS_NOATIME 1024
115#define MS_NODIRATIME 2048
116#define MS_BIND 4096
117#define MS_MOVE 8192
118#define MS_REC 16384
119#define MS_VERBOSE 32768
120#define MS_POSIXACL (1<<16)
121#define MS_ONE_SECOND (1<<17)
122#define MS_ACTIVE (1<<30)
123#define MS_NOUSER (1<<31)
124
125
126
127
128#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_NOATIME|\
129 MS_NODIRATIME)
130
131
132
133
134#define MS_MGC_VAL 0xC0ED0000
135#define MS_MGC_MSK 0xffff0000
136
137
138
139#define S_SYNC 1
140#define S_NOATIME 2
141#define S_APPEND 4
142#define S_IMMUTABLE 8
143#define S_DEAD 16
144#define S_NOQUOTA 32
145#define S_DIRSYNC 64
146#define S_NOCMTIME 128
147#define S_SWAPFILE 256
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162#define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg))
163
164#define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
165#define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \
166 ((inode)->i_flags & S_SYNC))
167#define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
168 ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
169#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
170
171#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
172#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
173#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
174#define IS_NOATIME(inode) (__IS_FLG(inode, MS_NOATIME) || ((inode)->i_flags & S_NOATIME))
175#define IS_NODIRATIME(inode) __IS_FLG(inode, MS_NODIRATIME)
176#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
177#define IS_ONE_SECOND(inode) __IS_FLG(inode, MS_ONE_SECOND)
178
179#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
180#define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
181#define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE)
182
183
184
185
186#define BLKROSET _IO(0x12,93)
187#define BLKROGET _IO(0x12,94)
188#define BLKRRPART _IO(0x12,95)
189#define BLKGETSIZE _IO(0x12,96)
190#define BLKFLSBUF _IO(0x12,97)
191#define BLKRASET _IO(0x12,98)
192#define BLKRAGET _IO(0x12,99)
193#define BLKFRASET _IO(0x12,100)
194#define BLKFRAGET _IO(0x12,101)
195#define BLKSECTSET _IO(0x12,102)
196#define BLKSECTGET _IO(0x12,103)
197#define BLKSSZGET _IO(0x12,104)
198#if 0
199#define BLKPG _IO(0x12,105)
200
201
202
203#define BLKELVGET _IOR(0x12,106,size_t)
204#define BLKELVSET _IOW(0x12,107,size_t)
205
206
207#endif
208
209#define BLKBSZGET _IOR(0x12,112,size_t)
210#define BLKBSZSET _IOW(0x12,113,size_t)
211#define BLKGETSIZE64 _IOR(0x12,114,size_t)
212
213#define BMAP_IOCTL 1
214#define FIBMAP _IO(0x00,1)
215#define FIGETBSZ _IO(0x00,2)
216
217#ifdef __KERNEL__
218
219#include <linux/list.h>
220#include <linux/radix-tree.h>
221#include <linux/audit.h>
222#include <linux/init.h>
223#include <asm/semaphore.h>
224#include <asm/byteorder.h>
225
226
227extern void update_atime (struct inode *);
228
229extern void __init inode_init(unsigned long);
230extern void __init inode_init_early(void);
231extern void __init mnt_init(unsigned long);
232extern void __init files_init(unsigned long);
233
234struct buffer_head;
235typedef int (get_block_t)(struct inode *inode, sector_t iblock,
236 struct buffer_head *bh_result, int create);
237typedef int (get_blocks_t)(struct inode *inode, sector_t iblock,
238 unsigned long max_blocks,
239 struct buffer_head *bh_result, int create);
240typedef void (dio_iodone_t)(struct inode *inode, loff_t offset,
241 ssize_t bytes, void *private);
242
243
244
245
246
247#define ATTR_MODE 1
248#define ATTR_UID 2
249#define ATTR_GID 4
250#define ATTR_SIZE 8
251#define ATTR_ATIME 16
252#define ATTR_MTIME 32
253#define ATTR_CTIME 64
254#define ATTR_ATIME_SET 128
255#define ATTR_MTIME_SET 256
256#define ATTR_FORCE 512
257#define ATTR_ATTR_FLAG 1024
258#define ATTR_KILL_SUID 2048
259#define ATTR_KILL_SGID 4096
260
261
262
263
264
265
266
267
268
269
270struct iattr {
271 unsigned int ia_valid;
272 umode_t ia_mode;
273 uid_t ia_uid;
274 gid_t ia_gid;
275 loff_t ia_size;
276 struct timespec ia_atime;
277 struct timespec ia_mtime;
278 struct timespec ia_ctime;
279 unsigned int ia_attr_flags;
280};
281
282
283
284
285#define ATTR_FLAG_SYNCRONOUS 1
286#define ATTR_FLAG_NOATIME 2
287#define ATTR_FLAG_APPEND 4
288#define ATTR_FLAG_IMMUTABLE 8
289#define ATTR_FLAG_NODIRATIME 16
290
291
292
293
294#include <linux/quota.h>
295
296
297
298
299struct page;
300struct address_space;
301struct writeback_control;
302struct kiocb;
303
304struct address_space_operations {
305 int (*writepage)(struct page *page, struct writeback_control *wbc);
306 int (*readpage)(struct file *, struct page *);
307 int (*sync_page)(struct page *);
308
309
310 int (*writepages)(struct address_space *, struct writeback_control *);
311
312
313 int (*set_page_dirty)(struct page *page);
314
315 int (*readpages)(struct file *filp, struct address_space *mapping,
316 struct list_head *pages, unsigned nr_pages);
317
318
319
320
321
322 int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
323 int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
324
325 sector_t (*bmap)(struct address_space *, sector_t);
326 int (*invalidatepage) (struct page *, unsigned long);
327 int (*releasepage) (struct page *, int);
328 ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
329 loff_t offset, unsigned long nr_segs);
330};
331
332struct backing_dev_info;
333struct address_space {
334 struct inode *host;
335 struct radix_tree_root page_tree;
336 spinlock_t tree_lock;
337 unsigned long nrpages;
338 pgoff_t writeback_index;
339 struct address_space_operations *a_ops;
340 struct prio_tree_root i_mmap;
341 unsigned int i_mmap_writable;
342 struct list_head i_mmap_nonlinear;
343 spinlock_t i_mmap_lock;
344 atomic_t truncate_count;
345 unsigned long flags;
346 struct backing_dev_info *backing_dev_info;
347 spinlock_t private_lock;
348 struct list_head private_list;
349 struct address_space *assoc_mapping;
350};
351
352struct block_device {
353 dev_t bd_dev;
354 struct inode * bd_inode;
355 int bd_openers;
356 struct semaphore bd_sem;
357 struct semaphore bd_mount_sem;
358 struct list_head bd_inodes;
359 void * bd_holder;
360 int bd_holders;
361 struct block_device * bd_contains;
362 unsigned bd_block_size;
363 struct hd_struct * bd_part;
364
365 unsigned bd_part_count;
366 int bd_invalidated;
367 struct gendisk * bd_disk;
368 struct list_head bd_list;
369 struct backing_dev_info *bd_inode_backing_dev_info;
370
371
372
373
374
375
376 unsigned long bd_private;
377};
378
379
380
381
382
383#define PAGECACHE_TAG_DIRTY 0
384#define PAGECACHE_TAG_WRITEBACK 1
385
386int mapping_tagged(struct address_space *mapping, int tag);
387
388
389
390
391static inline int mapping_mapped(struct address_space *mapping)
392{
393 return !prio_tree_empty(&mapping->i_mmap) ||
394 !list_empty(&mapping->i_mmap_nonlinear);
395}
396
397
398
399
400
401
402
403static inline int mapping_writably_mapped(struct address_space *mapping)
404{
405 return mapping->i_mmap_writable != 0;
406}
407
408
409
410
411#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
412#include <linux/seqlock.h>
413#define __NEED_I_SIZE_ORDERED
414#define i_size_ordered_init(inode) seqcount_init(&inode->i_size_seqcount)
415#else
416#define i_size_ordered_init(inode) do { } while (0)
417#endif
418
419struct inode {
420 struct hlist_node i_hash;
421 struct list_head i_list;
422 struct list_head i_dentry;
423 unsigned long i_ino;
424 atomic_t i_count;
425 umode_t i_mode;
426 unsigned int i_nlink;
427 uid_t i_uid;
428 gid_t i_gid;
429 dev_t i_rdev;
430 loff_t i_size;
431 struct timespec i_atime;
432 struct timespec i_mtime;
433 struct timespec i_ctime;
434 unsigned int i_blkbits;
435 unsigned long i_blksize;
436 unsigned long i_version;
437 unsigned long i_blocks;
438 unsigned short i_bytes;
439 spinlock_t i_lock;
440 struct semaphore i_sem;
441 struct rw_semaphore i_alloc_sem;
442 struct inode_operations *i_op;
443 struct file_operations *i_fop;
444 struct super_block *i_sb;
445 struct file_lock *i_flock;
446 struct address_space *i_mapping;
447 struct address_space i_data;
448#ifdef CONFIG_QUOTA
449 struct dquot *i_dquot[MAXQUOTAS];
450#endif
451
452 struct list_head i_devices;
453 struct pipe_inode_info *i_pipe;
454 struct block_device *i_bdev;
455 struct cdev *i_cdev;
456 int i_cindex;
457
458 unsigned long i_dnotify_mask;
459 struct dnotify_struct *i_dnotify;
460
461 unsigned long i_state;
462 unsigned long dirtied_when;
463
464 unsigned int i_flags;
465 unsigned char i_sock;
466
467 atomic_t i_writecount;
468 void *i_security;
469 __u32 i_generation;
470 union {
471 void *generic_ip;
472 } u;
473#ifdef __NEED_I_SIZE_ORDERED
474 seqcount_t i_size_seqcount;
475#endif
476};
477
478
479
480
481
482
483
484
485
486
487
488static inline loff_t i_size_read(struct inode *inode)
489{
490#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
491 loff_t i_size;
492 unsigned int seq;
493
494 do {
495 seq = read_seqcount_begin(&inode->i_size_seqcount);
496 i_size = inode->i_size;
497 } while (read_seqcount_retry(&inode->i_size_seqcount, seq));
498 return i_size;
499#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
500 loff_t i_size;
501
502 preempt_disable();
503 i_size = inode->i_size;
504 preempt_enable();
505 return i_size;
506#else
507 return inode->i_size;
508#endif
509}
510
511
512static inline void i_size_write(struct inode *inode, loff_t i_size)
513{
514#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
515 write_seqcount_begin(&inode->i_size_seqcount);
516 inode->i_size = i_size;
517 write_seqcount_end(&inode->i_size_seqcount);
518#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
519 preempt_disable();
520 inode->i_size = i_size;
521 preempt_enable();
522#else
523 inode->i_size = i_size;
524#endif
525}
526
527static inline unsigned iminor(struct inode *inode)
528{
529 return MINOR(inode->i_rdev);
530}
531
532static inline unsigned imajor(struct inode *inode)
533{
534 return MAJOR(inode->i_rdev);
535}
536
537extern struct block_device *I_BDEV(struct inode *inode);
538
539struct fown_struct {
540 rwlock_t lock;
541 int pid;
542 uid_t uid, euid;
543 void *security;
544 int signum;
545};
546
547
548
549
550struct file_ra_state {
551 unsigned long start;
552 unsigned long size;
553 unsigned long next_size;
554 unsigned long prev_page;
555 unsigned long ahead_start;
556 unsigned long ahead_size;
557 unsigned long serial_cnt;
558 unsigned long average;
559 unsigned long ra_pages;
560 unsigned long mmap_hit;
561 unsigned long mmap_miss;
562};
563
564struct file {
565 struct list_head f_list;
566 struct dentry *f_dentry;
567 struct vfsmount *f_vfsmnt;
568 struct file_operations *f_op;
569 atomic_t f_count;
570 unsigned int f_flags;
571 mode_t f_mode;
572 int f_error;
573 loff_t f_pos;
574 struct fown_struct f_owner;
575 unsigned int f_uid, f_gid;
576 struct file_ra_state f_ra;
577
578 unsigned long f_version;
579 void *f_security;
580
581
582 void *private_data;
583
584#ifdef CONFIG_EPOLL
585
586 struct list_head f_ep_links;
587 spinlock_t f_ep_lock;
588#endif
589 struct address_space *f_mapping;
590};
591extern spinlock_t files_lock;
592#define file_list_lock() spin_lock(&files_lock);
593#define file_list_unlock() spin_unlock(&files_lock);
594
595#define get_file(x) atomic_inc(&(x)->f_count)
596#define file_count(x) atomic_read(&(x)->f_count)
597
598
599extern int open_private_file(struct file *, struct dentry *, int);
600
601extern void close_private_file(struct file *file);
602
603#define MAX_NON_LFS ((1UL<<31) - 1)
604
605
606
607#if BITS_PER_LONG==32
608#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
609#elif BITS_PER_LONG==64
610#define MAX_LFS_FILESIZE 0x7fffffffffffffffUL
611#endif
612
613#define FL_POSIX 1
614#define FL_FLOCK 2
615#define FL_ACCESS 8
616#define FL_LOCKD 16
617#define FL_LEASE 32
618#define FL_SLEEP 128
619
620
621
622
623
624
625
626
627typedef struct files_struct *fl_owner_t;
628
629
630#include <linux/nfs_fs_i.h>
631
632struct file_lock {
633 struct file_lock *fl_next;
634 struct list_head fl_link;
635 struct list_head fl_block;
636 fl_owner_t fl_owner;
637 unsigned int fl_pid;
638 wait_queue_head_t fl_wait;
639 struct file *fl_file;
640 unsigned char fl_flags;
641 unsigned char fl_type;
642 loff_t fl_start;
643 loff_t fl_end;
644
645 void (*fl_notify)(struct file_lock *);
646 void (*fl_insert)(struct file_lock *);
647 void (*fl_remove)(struct file_lock *);
648
649 struct fasync_struct * fl_fasync;
650 unsigned long fl_break_time;
651
652 union {
653 struct nfs_lock_info nfs_fl;
654 } fl_u;
655};
656
657
658#ifndef OFFSET_MAX
659#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
660#define OFFSET_MAX INT_LIMIT(loff_t)
661#define OFFT_OFFSET_MAX INT_LIMIT(off_t)
662#endif
663
664extern struct list_head file_lock_list;
665
666#include <linux/fcntl.h>
667
668extern int fcntl_getlk(struct file *, struct flock __user *);
669extern int fcntl_setlk(struct file *, unsigned int, struct flock __user *);
670
671#if BITS_PER_LONG == 32
672extern int fcntl_getlk64(struct file *, struct flock64 __user *);
673extern int fcntl_setlk64(struct file *, unsigned int, struct flock64 __user *);
674#endif
675
676extern void send_sigio(struct fown_struct *fown, int fd, int band);
677extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg);
678extern int fcntl_getlease(struct file *filp);
679
680
681extern void locks_init_lock(struct file_lock *);
682extern void locks_copy_lock(struct file_lock *, struct file_lock *);
683extern void locks_remove_posix(struct file *, fl_owner_t);
684extern void locks_remove_flock(struct file *);
685extern struct file_lock *posix_test_lock(struct file *, struct file_lock *);
686extern int posix_lock_file(struct file *, struct file_lock *);
687extern void posix_block_lock(struct file_lock *, struct file_lock *);
688extern void posix_unblock_lock(struct file *, struct file_lock *);
689extern int posix_locks_deadlock(struct file_lock *, struct file_lock *);
690extern int __break_lease(struct inode *inode, unsigned int flags);
691extern void lease_get_mtime(struct inode *, struct timespec *time);
692extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
693extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
694extern void steal_locks(fl_owner_t from);
695
696struct fasync_struct {
697 int magic;
698 int fa_fd;
699 struct fasync_struct *fa_next;
700 struct file *fa_file;
701};
702
703#define FASYNC_MAGIC 0x4601
704
705
706extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
707
708extern void kill_fasync(struct fasync_struct **, int, int);
709
710extern void __kill_fasync(struct fasync_struct *, int, int);
711
712extern int f_setown(struct file *filp, unsigned long arg, int force);
713extern void f_delown(struct file *filp);
714extern int send_sigurg(struct fown_struct *fown);
715
716
717
718
719
720#define MNT_FORCE 0x00000001
721#define MNT_DETACH 0x00000002
722#define MNT_EXPIRE 0x00000004
723
724extern struct list_head super_blocks;
725extern spinlock_t sb_lock;
726
727#define sb_entry(list) list_entry((list), struct super_block, s_list)
728#define S_BIAS (1<<30)
729struct super_block {
730 struct list_head s_list;
731 dev_t s_dev;
732 unsigned long s_blocksize;
733 unsigned long s_old_blocksize;
734 unsigned char s_blocksize_bits;
735 unsigned char s_dirt;
736 unsigned long long s_maxbytes;
737 struct file_system_type *s_type;
738 struct super_operations *s_op;
739 struct dquot_operations *dq_op;
740 struct quotactl_ops *s_qcop;
741 struct export_operations *s_export_op;
742 unsigned long s_flags;
743 unsigned long s_magic;
744 struct dentry *s_root;
745 struct rw_semaphore s_umount;
746 struct semaphore s_lock;
747 int s_count;
748 int s_syncing;
749 int s_need_sync_fs;
750 atomic_t s_active;
751 void *s_security;
752
753 struct list_head s_dirty;
754 struct list_head s_io;
755 struct hlist_head s_anon;
756 struct list_head s_files;
757
758 struct block_device *s_bdev;
759 struct list_head s_instances;
760 struct quota_info s_dquot;
761
762 int s_frozen;
763 wait_queue_head_t s_wait_unfrozen;
764
765 char s_id[32];
766
767 void *s_fs_info;
768
769
770
771
772
773 struct semaphore s_vfs_rename_sem;
774};
775
776
777
778
779enum {
780 SB_UNFROZEN = 0,
781 SB_FREEZE_WRITE = 1,
782 SB_FREEZE_TRANS = 2,
783};
784
785#define vfs_check_frozen(sb, level) \
786 wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level)))
787
788
789
790
791static inline void lock_super(struct super_block * sb)
792{
793 down(&sb->s_lock);
794}
795
796static inline void unlock_super(struct super_block * sb)
797{
798 up(&sb->s_lock);
799}
800
801
802
803
804extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *);
805extern int vfs_mkdir(struct inode *, struct dentry *, int);
806extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
807extern int vfs_symlink(struct inode *, struct dentry *, const char *, int);
808extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
809extern int vfs_rmdir(struct inode *, struct dentry *);
810extern int vfs_unlink(struct inode *, struct dentry *);
811extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
812
813
814
815
816
817
818
819#define DT_UNKNOWN 0
820#define DT_FIFO 1
821#define DT_CHR 2
822#define DT_DIR 4
823#define DT_BLK 6
824#define DT_REG 8
825#define DT_LNK 10
826#define DT_SOCK 12
827#define DT_WHT 14
828
829
830
831
832
833
834
835typedef int (*filldir_t)(void *, const char *, int, loff_t, ino_t, unsigned);
836
837struct block_device_operations {
838 int (*open) (struct inode *, struct file *);
839 int (*release) (struct inode *, struct file *);
840 int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
841 int (*media_changed) (struct gendisk *);
842 int (*revalidate_disk) (struct gendisk *);
843 struct module *owner;
844};
845
846
847
848
849
850
851
852
853
854
855typedef struct {
856 size_t written;
857 size_t count;
858 union {
859 char __user * buf;
860 void *data;
861 } arg;
862 int error;
863} read_descriptor_t;
864
865typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
866
867
868
869
870
871
872struct file_operations {
873 struct module *owner;
874 loff_t (*llseek) (struct file *, loff_t, int);
875 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
876 ssize_t (*aio_read) (struct kiocb *, char __user *, size_t, loff_t);
877 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
878 ssize_t (*aio_write) (struct kiocb *, const char __user *, size_t, loff_t);
879 int (*readdir) (struct file *, void *, filldir_t);
880 unsigned int (*poll) (struct file *, struct poll_table_struct *);
881 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
882 int (*mmap) (struct file *, struct vm_area_struct *);
883 int (*open) (struct inode *, struct file *);
884 int (*flush) (struct file *);
885 int (*release) (struct inode *, struct file *);
886 int (*fsync) (struct file *, struct dentry *, int datasync);
887 int (*aio_fsync) (struct kiocb *, int datasync);
888 int (*fasync) (int, struct file *, int);
889 int (*lock) (struct file *, int, struct file_lock *);
890 ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
891 ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
892 ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, void *);
893 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
894 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
895 int (*check_flags)(int);
896 int (*dir_notify)(struct file *filp, unsigned long arg);
897};
898
899struct inode_operations {
900 int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
901 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
902 int (*link) (struct dentry *,struct inode *,struct dentry *);
903 int (*unlink) (struct inode *,struct dentry *);
904 int (*symlink) (struct inode *,struct dentry *,const char *);
905 int (*mkdir) (struct inode *,struct dentry *,int);
906 int (*rmdir) (struct inode *,struct dentry *);
907 int (*mknod) (struct inode *,struct dentry *,int,dev_t);
908 int (*rename) (struct inode *, struct dentry *,
909 struct inode *, struct dentry *);
910 int (*readlink) (struct dentry *, char __user *,int);
911 int (*follow_link) (struct dentry *, struct nameidata *);
912 void (*put_link) (struct dentry *, struct nameidata *);
913 void (*truncate) (struct inode *);
914 int (*permission) (struct inode *, int, struct nameidata *);
915 int (*setattr) (struct dentry *, struct iattr *);
916 int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
917 int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
918 ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
919 ssize_t (*listxattr) (struct dentry *, char *, size_t);
920 int (*removexattr) (struct dentry *, const char *);
921};
922
923struct seq_file;
924
925extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
926extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
927extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
928 unsigned long, loff_t *);
929extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
930 unsigned long, loff_t *);
931
932
933
934
935
936struct super_operations {
937 struct inode *(*alloc_inode)(struct super_block *sb);
938 void (*destroy_inode)(struct inode *);
939
940 void (*read_inode) (struct inode *);
941
942 void (*dirty_inode) (struct inode *);
943 void (*write_inode) (struct inode *, int);
944 void (*put_inode) (struct inode *);
945 void (*drop_inode) (struct inode *);
946 void (*delete_inode) (struct inode *);
947 void (*put_super) (struct super_block *);
948 void (*write_super) (struct super_block *);
949 int (*sync_fs)(struct super_block *sb, int wait);
950 void (*write_super_lockfs) (struct super_block *);
951 void (*unlockfs) (struct super_block *);
952 int (*statfs) (struct super_block *, struct kstatfs *);
953 int (*remount_fs) (struct super_block *, int *, char *);
954 void (*clear_inode) (struct inode *);
955 void (*umount_begin) (struct super_block *);
956
957 int (*show_options)(struct seq_file *, struct vfsmount *);
958};
959
960
961#define I_DIRTY_SYNC 1
962#define I_DIRTY_DATASYNC 2
963#define I_DIRTY_PAGES 4
964#define I_LOCK 8
965#define I_FREEING 16
966#define I_CLEAR 32
967#define I_NEW 64
968
969#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
970
971extern void __mark_inode_dirty(struct inode *, int);
972static inline void mark_inode_dirty(struct inode *inode)
973{
974 __mark_inode_dirty(inode, I_DIRTY);
975}
976
977static inline void mark_inode_dirty_sync(struct inode *inode)
978{
979 __mark_inode_dirty(inode, I_DIRTY_SYNC);
980}
981
982static inline void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
983{
984
985 update_atime(dentry->d_inode);
986}
987
988static inline void file_accessed(struct file *file)
989{
990 if (!(file->f_flags & O_NOATIME))
991 touch_atime(file->f_vfsmnt, file->f_dentry);
992}
993
994int sync_inode(struct inode *inode, struct writeback_control *wbc);
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076struct export_operations {
1077 struct dentry *(*decode_fh)(struct super_block *sb, __u32 *fh, int fh_len, int fh_type,
1078 int (*acceptable)(void *context, struct dentry *de),
1079 void *context);
1080 int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len,
1081 int connectable);
1082
1083
1084 int (*get_name)(struct dentry *parent, char *name,
1085 struct dentry *child);
1086 struct dentry * (*get_parent)(struct dentry *child);
1087 struct dentry * (*get_dentry)(struct super_block *sb, void *inump);
1088
1089
1090 struct dentry * (*find_exported_dentry)(
1091 struct super_block *sb, void *obj, void *parent,
1092 int (*acceptable)(void *context, struct dentry *de),
1093 void *context);
1094
1095
1096};
1097
1098
1099struct file_system_type {
1100 const char *name;
1101 int fs_flags;
1102 struct super_block *(*get_sb) (struct file_system_type *, int,
1103 const char *, void *);
1104 void (*kill_sb) (struct super_block *);
1105 struct module *owner;
1106 struct file_system_type * next;
1107 struct list_head fs_supers;
1108};
1109
1110struct super_block *get_sb_bdev(struct file_system_type *fs_type,
1111 int flags, const char *dev_name, void *data,
1112 int (*fill_super)(struct super_block *, void *, int));
1113struct super_block *get_sb_single(struct file_system_type *fs_type,
1114 int flags, void *data,
1115 int (*fill_super)(struct super_block *, void *, int));
1116struct super_block *get_sb_nodev(struct file_system_type *fs_type,
1117 int flags, void *data,
1118 int (*fill_super)(struct super_block *, void *, int));
1119void generic_shutdown_super(struct super_block *sb);
1120void kill_block_super(struct super_block *sb);
1121void kill_anon_super(struct super_block *sb);
1122void kill_litter_super(struct super_block *sb);
1123void deactivate_super(struct super_block *sb);
1124int set_anon_super(struct super_block *s, void *data);
1125struct super_block *sget(struct file_system_type *type,
1126 int (*test)(struct super_block *,void *),
1127 int (*set)(struct super_block *,void *),
1128 void *data);
1129struct super_block *get_sb_pseudo(struct file_system_type *, char *,
1130 struct super_operations *ops, unsigned long);
1131int __put_super(struct super_block *sb);
1132void unnamed_dev_init(void);
1133
1134
1135#define fops_get(fops) \
1136 (((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
1137#define fops_put(fops) \
1138 do { if (fops) module_put((fops)->owner); } while(0)
1139
1140extern int register_filesystem(struct file_system_type *);
1141extern int unregister_filesystem(struct file_system_type *);
1142extern struct vfsmount *kern_mount(struct file_system_type *);
1143extern int may_umount_tree(struct vfsmount *);
1144extern int may_umount(struct vfsmount *);
1145extern long do_mount(char *, char *, char *, unsigned long, void *);
1146
1147extern int vfs_statfs(struct super_block *, struct kstatfs *);
1148
1149
1150
1151
1152#define LOCK_USE_CLNT 1
1153
1154#define FLOCK_VERIFY_READ 1
1155#define FLOCK_VERIFY_WRITE 2
1156
1157extern int locks_mandatory_locked(struct inode *);
1158extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size_t);
1159
1160
1161
1162
1163
1164#define MANDATORY_LOCK(inode) \
1165 (IS_MANDLOCK(inode) && ((inode)->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
1166
1167static inline int locks_verify_locked(struct inode *inode)
1168{
1169 if (MANDATORY_LOCK(inode))
1170 return locks_mandatory_locked(inode);
1171 return 0;
1172}
1173
1174static inline int locks_verify_area(int read_write, struct inode *inode,
1175 struct file *filp, loff_t offset,
1176 size_t count)
1177{
1178 if (inode->i_flock && MANDATORY_LOCK(inode))
1179 return locks_mandatory_area(read_write, inode, filp, offset, count);
1180 return 0;
1181}
1182
1183static inline int locks_verify_truncate(struct inode *inode,
1184 struct file *filp,
1185 loff_t size)
1186{
1187 if (inode->i_flock && MANDATORY_LOCK(inode))
1188 return locks_mandatory_area(
1189 FLOCK_VERIFY_WRITE, inode, filp,
1190 size < inode->i_size ? size : inode->i_size,
1191 (size < inode->i_size ? inode->i_size - size
1192 : size - inode->i_size)
1193 );
1194 return 0;
1195}
1196
1197static inline int break_lease(struct inode *inode, unsigned int mode)
1198{
1199 if (inode->i_flock)
1200 return __break_lease(inode, mode);
1201 return 0;
1202}
1203
1204
1205
1206extern int do_truncate(struct dentry *, loff_t start);
1207extern struct file *filp_open(const char *, int, int);
1208extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
1209extern int filp_close(struct file *, fl_owner_t id);
1210extern char * getname(const char __user *);
1211
1212
1213extern void __init vfs_caches_init_early(void);
1214extern void __init vfs_caches_init(unsigned long);
1215
1216#define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL)
1217#define __putname(name) kmem_cache_free(names_cachep, (void *)(name))
1218#ifndef CONFIG_AUDITSYSCALL
1219#define putname(name) __putname(name)
1220#else
1221#define putname(name) \
1222 do { \
1223 if (unlikely(current->audit_context)) \
1224 audit_putname(name); \
1225 else \
1226 __putname(name); \
1227 } while (0)
1228#endif
1229
1230extern int register_blkdev(unsigned int, const char *);
1231extern int unregister_blkdev(unsigned int, const char *);
1232extern struct block_device *bdget(dev_t);
1233extern void bd_set_size(struct block_device *, loff_t size);
1234extern void bd_forget(struct inode *inode);
1235extern void bdput(struct block_device *);
1236extern int blkdev_open(struct inode *, struct file *);
1237extern struct block_device *open_by_devnum(dev_t, unsigned);
1238extern struct file_operations def_blk_fops;
1239extern struct address_space_operations def_blk_aops;
1240extern struct file_operations def_chr_fops;
1241extern struct file_operations bad_sock_fops;
1242extern struct file_operations def_fifo_fops;
1243extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
1244extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);
1245extern int blkdev_get(struct block_device *, mode_t, unsigned);
1246extern int blkdev_put(struct block_device *);
1247extern int bd_claim(struct block_device *, void *);
1248extern void bd_release(struct block_device *);
1249
1250
1251extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, char *);
1252extern int register_chrdev_region(dev_t, unsigned, char *);
1253extern int register_chrdev(unsigned int, const char *,
1254 struct file_operations *);
1255extern int unregister_chrdev(unsigned int, const char *);
1256extern void unregister_chrdev_region(dev_t, unsigned);
1257extern int chrdev_open(struct inode *, struct file *);
1258
1259
1260#define BDEVNAME_SIZE 32
1261extern const char *__bdevname(dev_t, char *buffer);
1262extern const char *bdevname(struct block_device *bdev, char *buffer);
1263extern struct block_device *lookup_bdev(const char *);
1264extern struct block_device *open_bdev_excl(const char *, int, void *);
1265extern void close_bdev_excl(struct block_device *);
1266
1267extern void init_special_inode(struct inode *, umode_t, dev_t);
1268
1269
1270extern void make_bad_inode(struct inode *);
1271extern int is_bad_inode(struct inode *);
1272
1273extern struct file_operations read_fifo_fops;
1274extern struct file_operations write_fifo_fops;
1275extern struct file_operations rdwr_fifo_fops;
1276extern struct file_operations read_pipe_fops;
1277extern struct file_operations write_pipe_fops;
1278extern struct file_operations rdwr_pipe_fops;
1279
1280extern int fs_may_remount_ro(struct super_block *);
1281
1282
1283
1284
1285#define bio_rw(bio) ((bio)->bi_rw & (RW_MASK | RWA_MASK))
1286
1287
1288
1289
1290#define bio_data_dir(bio) ((bio)->bi_rw & 1)
1291
1292extern int check_disk_change(struct block_device *);
1293extern int invalidate_inodes(struct super_block *);
1294extern int __invalidate_device(struct block_device *, int);
1295extern int invalidate_partition(struct gendisk *, int);
1296unsigned long invalidate_mapping_pages(struct address_space *mapping,
1297 pgoff_t start, pgoff_t end);
1298unsigned long invalidate_inode_pages(struct address_space *mapping);
1299static inline void invalidate_remote_inode(struct inode *inode)
1300{
1301 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1302 S_ISLNK(inode->i_mode))
1303 invalidate_inode_pages(inode->i_mapping);
1304}
1305extern void invalidate_inode_pages2(struct address_space *mapping);
1306extern void write_inode_now(struct inode *, int);
1307extern int filemap_fdatawrite(struct address_space *);
1308extern int filemap_flush(struct address_space *);
1309extern int filemap_fdatawait(struct address_space *);
1310extern int filemap_write_and_wait(struct address_space *mapping);
1311extern void sync_supers(void);
1312extern void sync_filesystems(int wait);
1313extern void emergency_sync(void);
1314extern void emergency_remount(void);
1315extern int do_remount_sb(struct super_block *sb, int flags,
1316 void *data, int force);
1317extern sector_t bmap(struct inode *, sector_t);
1318extern int setattr_mask(unsigned int);
1319extern int notify_change(struct dentry *, struct iattr *);
1320extern int permission(struct inode *, int, struct nameidata *);
1321extern int vfs_permission(struct inode *, int);
1322extern int get_write_access(struct inode *);
1323extern int deny_write_access(struct file *);
1324static inline void put_write_access(struct inode * inode)
1325{
1326 atomic_dec(&inode->i_writecount);
1327}
1328static inline void allow_write_access(struct file *file)
1329{
1330 if (file)
1331 atomic_inc(&file->f_dentry->d_inode->i_writecount);
1332}
1333extern int do_pipe(int *);
1334
1335extern int open_namei(const char *, int, int, struct nameidata *);
1336extern int may_open(struct nameidata *, int, int);
1337
1338extern int kernel_read(struct file *, unsigned long, char *, unsigned long);
1339extern struct file * open_exec(const char *);
1340
1341
1342extern int is_subdir(struct dentry *, struct dentry *);
1343extern ino_t find_inode_number(struct dentry *, struct qstr *);
1344
1345#include <linux/err.h>
1346
1347
1348extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
1349
1350extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin);
1351
1352extern void inode_init_once(struct inode *);
1353extern void iput(struct inode *);
1354extern struct inode * igrab(struct inode *);
1355extern ino_t iunique(struct super_block *, ino_t);
1356extern int inode_needs_sync(struct inode *inode);
1357extern void generic_delete_inode(struct inode *inode);
1358
1359extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
1360 int (*test)(struct inode *, void *), void *data);
1361extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
1362
1363extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
1364extern struct inode * iget_locked(struct super_block *, unsigned long);
1365extern void unlock_new_inode(struct inode *);
1366
1367static inline struct inode *iget(struct super_block *sb, unsigned long ino)
1368{
1369 struct inode *inode = iget_locked(sb, ino);
1370
1371 if (inode && (inode->i_state & I_NEW)) {
1372 sb->s_op->read_inode(inode);
1373 unlock_new_inode(inode);
1374 }
1375
1376 return inode;
1377}
1378
1379extern void __iget(struct inode * inode);
1380extern void clear_inode(struct inode *);
1381extern void destroy_inode(struct inode *);
1382extern struct inode *new_inode(struct super_block *);
1383extern int remove_suid(struct dentry *);
1384extern void remove_dquot_ref(struct super_block *, int, struct list_head *);
1385extern struct semaphore iprune_sem;
1386
1387extern void __insert_inode_hash(struct inode *, unsigned long hashval);
1388extern void remove_inode_hash(struct inode *);
1389static inline void insert_inode_hash(struct inode *inode) {
1390 __insert_inode_hash(inode, inode->i_ino);
1391}
1392
1393extern struct file * get_empty_filp(void);
1394extern void file_move(struct file *f, struct list_head *list);
1395extern void file_kill(struct file *f);
1396struct bio;
1397extern void submit_bio(int, struct bio *);
1398extern int bdev_read_only(struct block_device *);
1399extern int set_blocksize(struct block_device *, int);
1400extern int sb_set_blocksize(struct super_block *, int);
1401extern int sb_min_blocksize(struct super_block *, int);
1402
1403extern int generic_file_mmap(struct file *, struct vm_area_struct *);
1404extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
1405extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);
1406extern int file_send_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);
1407extern ssize_t generic_file_read(struct file *, char __user *, size_t, loff_t *);
1408int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);
1409extern ssize_t generic_file_write(struct file *, const char __user *, size_t, loff_t *);
1410extern ssize_t generic_file_aio_read(struct kiocb *, char __user *, size_t, loff_t);
1411extern ssize_t __generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t *);
1412extern ssize_t generic_file_aio_write(struct kiocb *, const char __user *, size_t, loff_t);
1413extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *,
1414 unsigned long, loff_t *);
1415extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
1416extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
1417ssize_t generic_file_write_nolock(struct file *file, const struct iovec *iov,
1418 unsigned long nr_segs, loff_t *ppos);
1419extern ssize_t generic_file_sendfile(struct file *, loff_t *, size_t, read_actor_t, void *);
1420extern void do_generic_mapping_read(struct address_space *mapping,
1421 struct file_ra_state *, struct file *,
1422 loff_t *, read_descriptor_t *, read_actor_t);
1423extern void
1424file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
1425extern ssize_t generic_file_direct_IO(int rw, struct kiocb *iocb,
1426 const struct iovec *iov, loff_t offset, unsigned long nr_segs);
1427extern ssize_t generic_file_readv(struct file *filp, const struct iovec *iov,
1428 unsigned long nr_segs, loff_t *ppos);
1429ssize_t generic_file_writev(struct file *filp, const struct iovec *iov,
1430 unsigned long nr_segs, loff_t *ppos);
1431extern loff_t no_llseek(struct file *file, loff_t offset, int origin);
1432extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);
1433extern loff_t remote_llseek(struct file *file, loff_t offset, int origin);
1434extern int generic_file_open(struct inode * inode, struct file * filp);
1435extern int nonseekable_open(struct inode * inode, struct file * filp);
1436
1437static inline void do_generic_file_read(struct file * filp, loff_t *ppos,
1438 read_descriptor_t * desc,
1439 read_actor_t actor)
1440{
1441 do_generic_mapping_read(filp->f_mapping,
1442 &filp->f_ra,
1443 filp,
1444 ppos,
1445 desc,
1446 actor);
1447}
1448
1449ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
1450 struct block_device *bdev, const struct iovec *iov, loff_t offset,
1451 unsigned long nr_segs, get_blocks_t get_blocks, dio_iodone_t end_io,
1452 int needs_special_locking);
1453
1454
1455
1456
1457static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
1458 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
1459 loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks,
1460 dio_iodone_t end_io)
1461{
1462 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
1463 nr_segs, get_blocks, end_io, 1);
1464}
1465
1466static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
1467 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
1468 loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks,
1469 dio_iodone_t end_io)
1470{
1471 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
1472 nr_segs, get_blocks, end_io, 0);
1473}
1474
1475extern struct file_operations generic_ro_fops;
1476
1477#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
1478
1479extern int vfs_readlink(struct dentry *, char __user *, int, const char *);
1480extern int vfs_follow_link(struct nameidata *, const char *);
1481extern int page_readlink(struct dentry *, char __user *, int);
1482extern int page_follow_link(struct dentry *, struct nameidata *);
1483extern int page_follow_link_light(struct dentry *, struct nameidata *);
1484extern void page_put_link(struct dentry *, struct nameidata *);
1485extern int page_symlink(struct inode *inode, const char *symname, int len);
1486extern struct inode_operations page_symlink_inode_operations;
1487extern int generic_readlink(struct dentry *, char __user *, int);
1488extern void generic_fillattr(struct inode *, struct kstat *);
1489extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
1490void inode_add_bytes(struct inode *inode, loff_t bytes);
1491void inode_sub_bytes(struct inode *inode, loff_t bytes);
1492loff_t inode_get_bytes(struct inode *inode);
1493void inode_set_bytes(struct inode *inode, loff_t bytes);
1494
1495extern int vfs_readdir(struct file *, filldir_t, void *);
1496
1497extern int vfs_stat(char __user *, struct kstat *);
1498extern int vfs_lstat(char __user *, struct kstat *);
1499extern int vfs_fstat(unsigned int, struct kstat *);
1500
1501extern struct file_system_type *get_fs_type(const char *name);
1502extern struct super_block *get_super(struct block_device *);
1503extern struct super_block *user_get_super(dev_t);
1504extern void drop_super(struct super_block *sb);
1505
1506extern int dcache_dir_open(struct inode *, struct file *);
1507extern int dcache_dir_close(struct inode *, struct file *);
1508extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
1509extern int dcache_readdir(struct file *, void *, filldir_t);
1510extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
1511extern int simple_statfs(struct super_block *, struct kstatfs *);
1512extern int simple_link(struct dentry *, struct inode *, struct dentry *);
1513extern int simple_unlink(struct inode *, struct dentry *);
1514extern int simple_rmdir(struct inode *, struct dentry *);
1515extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
1516extern int simple_sync_file(struct file *, struct dentry *, int);
1517extern int simple_empty(struct dentry *);
1518extern int simple_readpage(struct file *file, struct page *page);
1519extern int simple_prepare_write(struct file *file, struct page *page,
1520 unsigned offset, unsigned to);
1521extern int simple_commit_write(struct file *file, struct page *page,
1522 unsigned offset, unsigned to);
1523
1524extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *);
1525extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
1526extern struct file_operations simple_dir_operations;
1527extern struct inode_operations simple_dir_inode_operations;
1528struct tree_descr { char *name; struct file_operations *ops; int mode; };
1529extern int simple_fill_super(struct super_block *, int, struct tree_descr *);
1530extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count);
1531extern void simple_release_fs(struct vfsmount **mount, int *count);
1532
1533extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t);
1534
1535extern int inode_change_ok(struct inode *, struct iattr *);
1536extern int __must_check inode_setattr(struct inode *, struct iattr *);
1537
1538extern void inode_update_time(struct inode *inode, int ctime_too);
1539
1540static inline ino_t parent_ino(struct dentry *dentry)
1541{
1542 ino_t res;
1543
1544 spin_lock(&dentry->d_lock);
1545 res = dentry->d_parent->d_inode->i_ino;
1546 spin_unlock(&dentry->d_lock);
1547 return res;
1548}
1549
1550
1551extern int unshare_files(void);
1552
1553#ifdef CONFIG_SECURITY
1554static inline char *alloc_secdata(void)
1555{
1556 return (char *)get_zeroed_page(GFP_KERNEL);
1557}
1558
1559static inline void free_secdata(void *secdata)
1560{
1561 free_page((unsigned long)secdata);
1562}
1563#else
1564static inline char *alloc_secdata(void)
1565{
1566 return (char *)1;
1567}
1568
1569static inline void free_secdata(void *secdata)
1570{ }
1571#endif
1572
1573#endif
1574#endif
1575