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