1#ifndef _LINUX_FS_H
2#define _LINUX_FS_H
3
4
5
6
7
8
9#include <linux/limits.h>
10#include <linux/ioctl.h>
11
12
13
14
15
16
17
18
19
20
21
22
23#undef NR_OPEN
24#define INR_OPEN 1024
25
26#define BLOCK_SIZE_BITS 10
27#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
28
29#define SEEK_SET 0
30#define SEEK_CUR 1
31#define SEEK_END 2
32#define SEEK_MAX SEEK_END
33
34
35struct files_stat_struct {
36 int nr_files;
37 int nr_free_files;
38 int max_files;
39};
40
41struct inodes_stat_t {
42 int nr_inodes;
43 int nr_unused;
44 int dummy[5];
45};
46
47
48#define NR_FILE 8192
49
50#define MAY_EXEC 1
51#define MAY_WRITE 2
52#define MAY_READ 4
53#define MAY_APPEND 8
54#define MAY_ACCESS 16
55#define MAY_OPEN 32
56
57
58
59
60
61
62
63#define FMODE_READ ((__force fmode_t)1)
64
65#define FMODE_WRITE ((__force fmode_t)2)
66
67#define FMODE_LSEEK ((__force fmode_t)4)
68
69#define FMODE_PREAD ((__force fmode_t)8)
70
71#define FMODE_PWRITE ((__force fmode_t)16)
72
73#define FMODE_EXEC ((__force fmode_t)32)
74
75#define FMODE_NDELAY ((__force fmode_t)64)
76
77#define FMODE_EXCL ((__force fmode_t)128)
78
79
80#define FMODE_WRITE_IOCTL ((__force fmode_t)256)
81
82
83
84
85
86
87
88#define FMODE_NOCMTIME ((__force fmode_t)2048)
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144#define RW_MASK 1
145#define RWA_MASK 2
146#define READ 0
147#define WRITE 1
148#define READA 2
149#define SWRITE 3
150#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
151#define READ_META (READ | (1 << BIO_RW_META))
152#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
153#define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
154#define WRITE_ODIRECT (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
155#define SWRITE_SYNC_PLUG \
156 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
157#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
158#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER))
159
160
161
162
163
164#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
165#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
166
167#define SEL_IN 1
168#define SEL_OUT 2
169#define SEL_EX 4
170
171
172#define FS_REQUIRES_DEV 1
173#define FS_BINARY_MOUNTDATA 2
174#define FS_HAS_SUBTYPE 4
175#define FS_REVAL_DOT 16384
176#define FS_RENAME_DOES_D_MOVE 32768
177
178
179
180
181
182
183#define MS_RDONLY 1
184#define MS_NOSUID 2
185#define MS_NODEV 4
186#define MS_NOEXEC 8
187#define MS_SYNCHRONOUS 16
188#define MS_REMOUNT 32
189#define MS_MANDLOCK 64
190#define MS_DIRSYNC 128
191#define MS_NOATIME 1024
192#define MS_NODIRATIME 2048
193#define MS_BIND 4096
194#define MS_MOVE 8192
195#define MS_REC 16384
196#define MS_VERBOSE 32768
197
198#define MS_SILENT 32768
199#define MS_POSIXACL (1<<16)
200#define MS_UNBINDABLE (1<<17)
201#define MS_PRIVATE (1<<18)
202#define MS_SLAVE (1<<19)
203#define MS_SHARED (1<<20)
204#define MS_RELATIME (1<<21)
205#define MS_KERNMOUNT (1<<22)
206#define MS_I_VERSION (1<<23)
207#define MS_STRICTATIME (1<<24)
208#define MS_ACTIVE (1<<30)
209#define MS_NOUSER (1<<31)
210
211
212
213
214#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION)
215
216
217
218
219#define MS_MGC_VAL 0xC0ED0000
220#define MS_MGC_MSK 0xffff0000
221
222
223
224#define S_SYNC 1
225#define S_NOATIME 2
226#define S_APPEND 4
227#define S_IMMUTABLE 8
228#define S_DEAD 16
229#define S_NOQUOTA 32
230#define S_DIRSYNC 64
231#define S_NOCMTIME 128
232#define S_SWAPFILE 256
233#define S_PRIVATE 512
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248#define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg))
249
250#define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
251#define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \
252 ((inode)->i_flags & S_SYNC))
253#define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
254 ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
255#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
256#define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
257#define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION)
258
259#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
260#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
261#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
262#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
263
264#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
265#define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
266#define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE)
267#define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
268
269
270
271
272#define BLKROSET _IO(0x12,93)
273#define BLKROGET _IO(0x12,94)
274#define BLKRRPART _IO(0x12,95)
275#define BLKGETSIZE _IO(0x12,96)
276#define BLKFLSBUF _IO(0x12,97)
277#define BLKRASET _IO(0x12,98)
278#define BLKRAGET _IO(0x12,99)
279#define BLKFRASET _IO(0x12,100)
280#define BLKFRAGET _IO(0x12,101)
281#define BLKSECTSET _IO(0x12,102)
282#define BLKSECTGET _IO(0x12,103)
283#define BLKSSZGET _IO(0x12,104)
284#if 0
285#define BLKPG _IO(0x12,105)
286
287
288
289#define BLKELVGET _IOR(0x12,106,size_t)
290#define BLKELVSET _IOW(0x12,107,size_t)
291
292
293#endif
294
295#define BLKBSZGET _IOR(0x12,112,size_t)
296#define BLKBSZSET _IOW(0x12,113,size_t)
297#define BLKGETSIZE64 _IOR(0x12,114,size_t)
298#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
299#define BLKTRACESTART _IO(0x12,116)
300#define BLKTRACESTOP _IO(0x12,117)
301#define BLKTRACETEARDOWN _IO(0x12,118)
302#define BLKDISCARD _IO(0x12,119)
303
304#define BMAP_IOCTL 1
305#define FIBMAP _IO(0x00,1)
306#define FIGETBSZ _IO(0x00,2)
307#define FIFREEZE _IOWR('X', 119, int)
308#define FITHAW _IOWR('X', 120, int)
309
310#define FS_IOC_GETFLAGS _IOR('f', 1, long)
311#define FS_IOC_SETFLAGS _IOW('f', 2, long)
312#define FS_IOC_GETVERSION _IOR('v', 1, long)
313#define FS_IOC_SETVERSION _IOW('v', 2, long)
314#define FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap)
315#define FS_IOC32_GETFLAGS _IOR('f', 1, int)
316#define FS_IOC32_SETFLAGS _IOW('f', 2, int)
317#define FS_IOC32_GETVERSION _IOR('v', 1, int)
318#define FS_IOC32_SETVERSION _IOW('v', 2, int)
319
320
321
322
323#define FS_SECRM_FL 0x00000001
324#define FS_UNRM_FL 0x00000002
325#define FS_COMPR_FL 0x00000004
326#define FS_SYNC_FL 0x00000008
327#define FS_IMMUTABLE_FL 0x00000010
328#define FS_APPEND_FL 0x00000020
329#define FS_NODUMP_FL 0x00000040
330#define FS_NOATIME_FL 0x00000080
331
332#define FS_DIRTY_FL 0x00000100
333#define FS_COMPRBLK_FL 0x00000200
334#define FS_NOCOMP_FL 0x00000400
335#define FS_ECOMPR_FL 0x00000800
336
337#define FS_BTREE_FL 0x00001000
338#define FS_INDEX_FL 0x00001000
339#define FS_IMAGIC_FL 0x00002000
340#define FS_JOURNAL_DATA_FL 0x00004000
341#define FS_NOTAIL_FL 0x00008000
342#define FS_DIRSYNC_FL 0x00010000
343#define FS_TOPDIR_FL 0x00020000
344#define FS_EXTENT_FL 0x00080000
345#define FS_DIRECTIO_FL 0x00100000
346#define FS_RESERVED_FL 0x80000000
347
348#define FS_FL_USER_VISIBLE 0x0003DFFF
349#define FS_FL_USER_MODIFIABLE 0x000380FF
350
351
352#define SYNC_FILE_RANGE_WAIT_BEFORE 1
353#define SYNC_FILE_RANGE_WRITE 2
354#define SYNC_FILE_RANGE_WAIT_AFTER 4
355
356#ifdef __KERNEL__
357
358#include <linux/linkage.h>
359#include <linux/wait.h>
360#include <linux/types.h>
361#include <linux/kdev_t.h>
362#include <linux/dcache.h>
363#include <linux/path.h>
364#include <linux/stat.h>
365#include <linux/cache.h>
366#include <linux/kobject.h>
367#include <linux/list.h>
368#include <linux/radix-tree.h>
369#include <linux/prio_tree.h>
370#include <linux/init.h>
371#include <linux/pid.h>
372#include <linux/mutex.h>
373#include <linux/capability.h>
374#include <linux/semaphore.h>
375#include <linux/fiemap.h>
376
377#include <asm/atomic.h>
378#include <asm/byteorder.h>
379
380struct export_operations;
381struct hd_geometry;
382struct iovec;
383struct nameidata;
384struct kiocb;
385struct pipe_inode_info;
386struct poll_table_struct;
387struct kstatfs;
388struct vm_area_struct;
389struct vfsmount;
390struct cred;
391
392extern void __init inode_init(void);
393extern void __init inode_init_early(void);
394extern void __init files_init(unsigned long);
395
396extern struct files_stat_struct files_stat;
397extern int get_max_files(void);
398extern int sysctl_nr_open;
399extern struct inodes_stat_t inodes_stat;
400extern int leases_enable, lease_break_time;
401#ifdef CONFIG_DNOTIFY
402extern int dir_notify_enable;
403#endif
404
405struct buffer_head;
406typedef int (get_block_t)(struct inode *inode, sector_t iblock,
407 struct buffer_head *bh_result, int create);
408typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
409 ssize_t bytes, void *private);
410
411
412
413
414
415#define ATTR_MODE (1 << 0)
416#define ATTR_UID (1 << 1)
417#define ATTR_GID (1 << 2)
418#define ATTR_SIZE (1 << 3)
419#define ATTR_ATIME (1 << 4)
420#define ATTR_MTIME (1 << 5)
421#define ATTR_CTIME (1 << 6)
422#define ATTR_ATIME_SET (1 << 7)
423#define ATTR_MTIME_SET (1 << 8)
424#define ATTR_FORCE (1 << 9)
425#define ATTR_ATTR_FLAG (1 << 10)
426#define ATTR_KILL_SUID (1 << 11)
427#define ATTR_KILL_SGID (1 << 12)
428#define ATTR_FILE (1 << 13)
429#define ATTR_KILL_PRIV (1 << 14)
430#define ATTR_OPEN (1 << 15)
431#define ATTR_TIMES_SET (1 << 16)
432
433
434
435
436
437
438
439
440
441
442struct iattr {
443 unsigned int ia_valid;
444 umode_t ia_mode;
445 uid_t ia_uid;
446 gid_t ia_gid;
447 loff_t ia_size;
448 struct timespec ia_atime;
449 struct timespec ia_mtime;
450 struct timespec ia_ctime;
451
452
453
454
455
456
457 struct file *ia_file;
458};
459
460
461
462
463#include <linux/quota.h>
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491enum positive_aop_returns {
492 AOP_WRITEPAGE_ACTIVATE = 0x80000,
493 AOP_TRUNCATED_PAGE = 0x80001,
494};
495
496#define AOP_FLAG_UNINTERRUPTIBLE 0x0001
497#define AOP_FLAG_CONT_EXPAND 0x0002
498#define AOP_FLAG_NOFS 0x0004
499
500
501
502
503
504
505struct page;
506struct address_space;
507struct writeback_control;
508
509struct iov_iter {
510 const struct iovec *iov;
511 unsigned long nr_segs;
512 size_t iov_offset;
513 size_t count;
514};
515
516size_t iov_iter_copy_from_user_atomic(struct page *page,
517 struct iov_iter *i, unsigned long offset, size_t bytes);
518size_t iov_iter_copy_from_user(struct page *page,
519 struct iov_iter *i, unsigned long offset, size_t bytes);
520void iov_iter_advance(struct iov_iter *i, size_t bytes);
521int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes);
522size_t iov_iter_single_seg_count(struct iov_iter *i);
523
524static inline void iov_iter_init(struct iov_iter *i,
525 const struct iovec *iov, unsigned long nr_segs,
526 size_t count, size_t written)
527{
528 i->iov = iov;
529 i->nr_segs = nr_segs;
530 i->iov_offset = 0;
531 i->count = count + written;
532
533 iov_iter_advance(i, written);
534}
535
536static inline size_t iov_iter_count(struct iov_iter *i)
537{
538 return i->count;
539}
540
541
542
543
544
545
546
547
548
549
550typedef struct {
551 size_t written;
552 size_t count;
553 union {
554 char __user *buf;
555 void *data;
556 } arg;
557 int error;
558} read_descriptor_t;
559
560typedef int (*read_actor_t)(read_descriptor_t *, struct page *,
561 unsigned long, unsigned long);
562
563struct address_space_operations {
564 int (*writepage)(struct page *page, struct writeback_control *wbc);
565 int (*readpage)(struct file *, struct page *);
566 void (*sync_page)(struct page *);
567
568
569 int (*writepages)(struct address_space *, struct writeback_control *);
570
571
572 int (*set_page_dirty)(struct page *page);
573
574 int (*readpages)(struct file *filp, struct address_space *mapping,
575 struct list_head *pages, unsigned nr_pages);
576
577 int (*write_begin)(struct file *, struct address_space *mapping,
578 loff_t pos, unsigned len, unsigned flags,
579 struct page **pagep, void **fsdata);
580 int (*write_end)(struct file *, struct address_space *mapping,
581 loff_t pos, unsigned len, unsigned copied,
582 struct page *page, void *fsdata);
583
584
585 sector_t (*bmap)(struct address_space *, sector_t);
586 void (*invalidatepage) (struct page *, unsigned long);
587 int (*releasepage) (struct page *, gfp_t);
588 ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
589 loff_t offset, unsigned long nr_segs);
590 int (*get_xip_mem)(struct address_space *, pgoff_t, int,
591 void **, unsigned long *);
592
593 int (*migratepage) (struct address_space *,
594 struct page *, struct page *);
595 int (*launder_page) (struct page *);
596 int (*is_partially_uptodate) (struct page *, read_descriptor_t *,
597 unsigned long);
598};
599
600
601
602
603
604int pagecache_write_begin(struct file *, struct address_space *mapping,
605 loff_t pos, unsigned len, unsigned flags,
606 struct page **pagep, void **fsdata);
607
608int pagecache_write_end(struct file *, struct address_space *mapping,
609 loff_t pos, unsigned len, unsigned copied,
610 struct page *page, void *fsdata);
611
612struct backing_dev_info;
613struct address_space {
614 struct inode *host;
615 struct radix_tree_root page_tree;
616 spinlock_t tree_lock;
617 unsigned int i_mmap_writable;
618 struct prio_tree_root i_mmap;
619 struct list_head i_mmap_nonlinear;
620 spinlock_t i_mmap_lock;
621 unsigned int truncate_count;
622 unsigned long nrpages;
623 pgoff_t writeback_index;
624 const struct address_space_operations *a_ops;
625 unsigned long flags;
626 struct backing_dev_info *backing_dev_info;
627 spinlock_t private_lock;
628 struct list_head private_list;
629 struct address_space *assoc_mapping;
630} __attribute__((aligned(sizeof(long))));
631
632
633
634
635
636
637struct block_device {
638 dev_t bd_dev;
639 struct inode * bd_inode;
640 struct super_block * bd_super;
641 int bd_openers;
642 struct mutex bd_mutex;
643 struct semaphore bd_mount_sem;
644 struct list_head bd_inodes;
645 void * bd_holder;
646 int bd_holders;
647#ifdef CONFIG_SYSFS
648 struct list_head bd_holder_list;
649#endif
650 struct block_device * bd_contains;
651 unsigned bd_block_size;
652 struct hd_struct * bd_part;
653
654 unsigned bd_part_count;
655 int bd_invalidated;
656 struct gendisk * bd_disk;
657 struct list_head bd_list;
658 struct backing_dev_info *bd_inode_backing_dev_info;
659
660
661
662
663
664
665 unsigned long bd_private;
666
667
668 int bd_fsfreeze_count;
669
670 struct mutex bd_fsfreeze_mutex;
671};
672
673
674
675
676
677#define PAGECACHE_TAG_DIRTY 0
678#define PAGECACHE_TAG_WRITEBACK 1
679
680int mapping_tagged(struct address_space *mapping, int tag);
681
682
683
684
685static inline int mapping_mapped(struct address_space *mapping)
686{
687 return !prio_tree_empty(&mapping->i_mmap) ||
688 !list_empty(&mapping->i_mmap_nonlinear);
689}
690
691
692
693
694
695
696
697static inline int mapping_writably_mapped(struct address_space *mapping)
698{
699 return mapping->i_mmap_writable != 0;
700}
701
702
703
704
705#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
706#include <linux/seqlock.h>
707#define __NEED_I_SIZE_ORDERED
708#define i_size_ordered_init(inode) seqcount_init(&inode->i_size_seqcount)
709#else
710#define i_size_ordered_init(inode) do { } while (0)
711#endif
712
713struct inode {
714 struct hlist_node i_hash;
715 struct list_head i_list;
716 struct list_head i_sb_list;
717 struct list_head i_dentry;
718 unsigned long i_ino;
719 atomic_t i_count;
720 unsigned int i_nlink;
721 uid_t i_uid;
722 gid_t i_gid;
723 dev_t i_rdev;
724 u64 i_version;
725 loff_t i_size;
726#ifdef __NEED_I_SIZE_ORDERED
727 seqcount_t i_size_seqcount;
728#endif
729 struct timespec i_atime;
730 struct timespec i_mtime;
731 struct timespec i_ctime;
732 unsigned int i_blkbits;
733 blkcnt_t i_blocks;
734 unsigned short i_bytes;
735 umode_t i_mode;
736 spinlock_t i_lock;
737 struct mutex i_mutex;
738 struct rw_semaphore i_alloc_sem;
739 const struct inode_operations *i_op;
740 const struct file_operations *i_fop;
741 struct super_block *i_sb;
742 struct file_lock *i_flock;
743 struct address_space *i_mapping;
744 struct address_space i_data;
745#ifdef CONFIG_QUOTA
746 struct dquot *i_dquot[MAXQUOTAS];
747#endif
748 struct list_head i_devices;
749 union {
750 struct pipe_inode_info *i_pipe;
751 struct block_device *i_bdev;
752 struct cdev *i_cdev;
753 };
754 int i_cindex;
755
756 __u32 i_generation;
757
758#ifdef CONFIG_DNOTIFY
759 unsigned long i_dnotify_mask;
760 struct dnotify_struct *i_dnotify;
761#endif
762
763#ifdef CONFIG_INOTIFY
764 struct list_head inotify_watches;
765 struct mutex inotify_mutex;
766#endif
767
768 unsigned long i_state;
769 unsigned long dirtied_when;
770
771 unsigned int i_flags;
772
773 atomic_t i_writecount;
774#ifdef CONFIG_SECURITY
775 void *i_security;
776#endif
777 void *i_private;
778};
779
780
781
782
783
784
785
786
787
788
789
790
791enum inode_i_mutex_lock_class
792{
793 I_MUTEX_NORMAL,
794 I_MUTEX_PARENT,
795 I_MUTEX_CHILD,
796 I_MUTEX_XATTR,
797 I_MUTEX_QUOTA
798};
799
800
801
802
803
804
805
806
807
808
809
810static inline loff_t i_size_read(const struct inode *inode)
811{
812#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
813 loff_t i_size;
814 unsigned int seq;
815
816 do {
817 seq = read_seqcount_begin(&inode->i_size_seqcount);
818 i_size = inode->i_size;
819 } while (read_seqcount_retry(&inode->i_size_seqcount, seq));
820 return i_size;
821#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
822 loff_t i_size;
823
824 preempt_disable();
825 i_size = inode->i_size;
826 preempt_enable();
827 return i_size;
828#else
829 return inode->i_size;
830#endif
831}
832
833
834
835
836
837
838static inline void i_size_write(struct inode *inode, loff_t i_size)
839{
840#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
841 write_seqcount_begin(&inode->i_size_seqcount);
842 inode->i_size = i_size;
843 write_seqcount_end(&inode->i_size_seqcount);
844#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
845 preempt_disable();
846 inode->i_size = i_size;
847 preempt_enable();
848#else
849 inode->i_size = i_size;
850#endif
851}
852
853static inline unsigned iminor(const struct inode *inode)
854{
855 return MINOR(inode->i_rdev);
856}
857
858static inline unsigned imajor(const struct inode *inode)
859{
860 return MAJOR(inode->i_rdev);
861}
862
863extern struct block_device *I_BDEV(struct inode *inode);
864
865struct fown_struct {
866 rwlock_t lock;
867 struct pid *pid;
868 enum pid_type pid_type;
869 uid_t uid, euid;
870 int signum;
871};
872
873
874
875
876struct file_ra_state {
877 pgoff_t start;
878 unsigned int size;
879 unsigned int async_size;
880
881
882 unsigned int ra_pages;
883 int mmap_miss;
884 loff_t prev_pos;
885};
886
887
888
889
890static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
891{
892 return (index >= ra->start &&
893 index < ra->start + ra->size);
894}
895
896#define FILE_MNT_WRITE_TAKEN 1
897#define FILE_MNT_WRITE_RELEASED 2
898
899struct file {
900
901
902
903
904 union {
905 struct list_head fu_list;
906 struct rcu_head fu_rcuhead;
907 } f_u;
908 struct path f_path;
909#define f_dentry f_path.dentry
910#define f_vfsmnt f_path.mnt
911 const struct file_operations *f_op;
912 spinlock_t f_lock;
913 atomic_long_t f_count;
914 unsigned int f_flags;
915 fmode_t f_mode;
916 loff_t f_pos;
917 struct fown_struct f_owner;
918 const struct cred *f_cred;
919 struct file_ra_state f_ra;
920
921 u64 f_version;
922#ifdef CONFIG_SECURITY
923 void *f_security;
924#endif
925
926 void *private_data;
927
928#ifdef CONFIG_EPOLL
929
930 struct list_head f_ep_links;
931#endif
932 struct address_space *f_mapping;
933#ifdef CONFIG_DEBUG_WRITECOUNT
934 unsigned long f_mnt_write_state;
935#endif
936};
937extern spinlock_t files_lock;
938#define file_list_lock() spin_lock(&files_lock);
939#define file_list_unlock() spin_unlock(&files_lock);
940
941#define get_file(x) atomic_long_inc(&(x)->f_count)
942#define file_count(x) atomic_long_read(&(x)->f_count)
943
944#ifdef CONFIG_DEBUG_WRITECOUNT
945static inline void file_take_write(struct file *f)
946{
947 WARN_ON(f->f_mnt_write_state != 0);
948 f->f_mnt_write_state = FILE_MNT_WRITE_TAKEN;
949}
950static inline void file_release_write(struct file *f)
951{
952 f->f_mnt_write_state |= FILE_MNT_WRITE_RELEASED;
953}
954static inline void file_reset_write(struct file *f)
955{
956 f->f_mnt_write_state = 0;
957}
958static inline void file_check_state(struct file *f)
959{
960
961
962
963
964 WARN_ON(f->f_mnt_write_state == FILE_MNT_WRITE_TAKEN);
965 WARN_ON(f->f_mnt_write_state == FILE_MNT_WRITE_RELEASED);
966}
967static inline int file_check_writeable(struct file *f)
968{
969 if (f->f_mnt_write_state == FILE_MNT_WRITE_TAKEN)
970 return 0;
971 printk(KERN_WARNING "writeable file with no "
972 "mnt_want_write()\n");
973 WARN_ON(1);
974 return -EINVAL;
975}
976#else
977static inline void file_take_write(struct file *filp) {}
978static inline void file_release_write(struct file *filp) {}
979static inline void file_reset_write(struct file *filp) {}
980static inline void file_check_state(struct file *filp) {}
981static inline int file_check_writeable(struct file *filp)
982{
983 return 0;
984}
985#endif
986
987#define MAX_NON_LFS ((1UL<<31) - 1)
988
989
990
991#if BITS_PER_LONG==32
992#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
993#elif BITS_PER_LONG==64
994#define MAX_LFS_FILESIZE 0x7fffffffffffffffUL
995#endif
996
997#define FL_POSIX 1
998#define FL_FLOCK 2
999#define FL_ACCESS 8
1000#define FL_EXISTS 16
1001#define FL_LEASE 32
1002#define FL_CLOSE 64
1003#define FL_SLEEP 128
1004
1005
1006
1007
1008
1009#define FILE_LOCK_DEFERRED 1
1010
1011
1012
1013
1014
1015
1016
1017
1018typedef struct files_struct *fl_owner_t;
1019
1020struct file_lock_operations {
1021 void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
1022 void (*fl_release_private)(struct file_lock *);
1023};
1024
1025struct lock_manager_operations {
1026 int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
1027 void (*fl_notify)(struct file_lock *);
1028 int (*fl_grant)(struct file_lock *, struct file_lock *, int);
1029 void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
1030 void (*fl_release_private)(struct file_lock *);
1031 void (*fl_break)(struct file_lock *);
1032 int (*fl_mylease)(struct file_lock *, struct file_lock *);
1033 int (*fl_change)(struct file_lock **, int);
1034};
1035
1036struct lock_manager {
1037 struct list_head list;
1038};
1039
1040void locks_start_grace(struct lock_manager *);
1041void locks_end_grace(struct lock_manager *);
1042int locks_in_grace(void);
1043
1044
1045#include <linux/nfs_fs_i.h>
1046
1047struct file_lock {
1048 struct file_lock *fl_next;
1049 struct list_head fl_link;
1050 struct list_head fl_block;
1051 fl_owner_t fl_owner;
1052 unsigned char fl_flags;
1053 unsigned char fl_type;
1054 unsigned int fl_pid;
1055 struct pid *fl_nspid;
1056 wait_queue_head_t fl_wait;
1057 struct file *fl_file;
1058 loff_t fl_start;
1059 loff_t fl_end;
1060
1061 struct fasync_struct * fl_fasync;
1062 unsigned long fl_break_time;
1063
1064 struct file_lock_operations *fl_ops;
1065 struct lock_manager_operations *fl_lmops;
1066 union {
1067 struct nfs_lock_info nfs_fl;
1068 struct nfs4_lock_info nfs4_fl;
1069 struct {
1070 struct list_head link;
1071 int state;
1072 } afs;
1073 } fl_u;
1074};
1075
1076
1077#ifndef OFFSET_MAX
1078#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
1079#define OFFSET_MAX INT_LIMIT(loff_t)
1080#define OFFT_OFFSET_MAX INT_LIMIT(off_t)
1081#endif
1082
1083#include <linux/fcntl.h>
1084
1085extern void send_sigio(struct fown_struct *fown, int fd, int band);
1086
1087
1088extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
1089 loff_t endbyte, unsigned int flags);
1090
1091#ifdef CONFIG_FILE_LOCKING
1092extern int fcntl_getlk(struct file *, struct flock __user *);
1093extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
1094 struct flock __user *);
1095
1096#if BITS_PER_LONG == 32
1097extern int fcntl_getlk64(struct file *, struct flock64 __user *);
1098extern int fcntl_setlk64(unsigned int, struct file *, unsigned int,
1099 struct flock64 __user *);
1100#endif
1101
1102extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg);
1103extern int fcntl_getlease(struct file *filp);
1104
1105
1106extern void locks_init_lock(struct file_lock *);
1107extern void locks_copy_lock(struct file_lock *, struct file_lock *);
1108extern void __locks_copy_lock(struct file_lock *, const struct file_lock *);
1109extern void locks_remove_posix(struct file *, fl_owner_t);
1110extern void locks_remove_flock(struct file *);
1111extern void posix_test_lock(struct file *, struct file_lock *);
1112extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
1113extern int posix_lock_file_wait(struct file *, struct file_lock *);
1114extern int posix_unblock_lock(struct file *, struct file_lock *);
1115extern int vfs_test_lock(struct file *, struct file_lock *);
1116extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
1117extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
1118extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl);
1119extern int __break_lease(struct inode *inode, unsigned int flags);
1120extern void lease_get_mtime(struct inode *, struct timespec *time);
1121extern int generic_setlease(struct file *, long, struct file_lock **);
1122extern int vfs_setlease(struct file *, long, struct file_lock **);
1123extern int lease_modify(struct file_lock **, int);
1124extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
1125extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
1126#else
1127static inline int fcntl_getlk(struct file *file, struct flock __user *user)
1128{
1129 return -EINVAL;
1130}
1131
1132static inline int fcntl_setlk(unsigned int fd, struct file *file,
1133 unsigned int cmd, struct flock __user *user)
1134{
1135 return -EACCES;
1136}
1137
1138#if BITS_PER_LONG == 32
1139static inline int fcntl_getlk64(struct file *file, struct flock64 __user *user)
1140{
1141 return -EINVAL;
1142}
1143
1144static inline int fcntl_setlk64(unsigned int fd, struct file *file,
1145 unsigned int cmd, struct flock64 __user *user)
1146{
1147 return -EACCES;
1148}
1149#endif
1150static inline int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
1151{
1152 return 0;
1153}
1154
1155static inline int fcntl_getlease(struct file *filp)
1156{
1157 return 0;
1158}
1159
1160static inline void locks_init_lock(struct file_lock *fl)
1161{
1162 return;
1163}
1164
1165static inline void __locks_copy_lock(struct file_lock *new, struct file_lock *fl)
1166{
1167 return;
1168}
1169
1170static inline void locks_copy_lock(struct file_lock *new, struct file_lock *fl)
1171{
1172 return;
1173}
1174
1175static inline void locks_remove_posix(struct file *filp, fl_owner_t owner)
1176{
1177 return;
1178}
1179
1180static inline void locks_remove_flock(struct file *filp)
1181{
1182 return;
1183}
1184
1185static inline void posix_test_lock(struct file *filp, struct file_lock *fl)
1186{
1187 return;
1188}
1189
1190static inline int posix_lock_file(struct file *filp, struct file_lock *fl,
1191 struct file_lock *conflock)
1192{
1193 return -ENOLCK;
1194}
1195
1196static inline int posix_lock_file_wait(struct file *filp, struct file_lock *fl)
1197{
1198 return -ENOLCK;
1199}
1200
1201static inline int posix_unblock_lock(struct file *filp,
1202 struct file_lock *waiter)
1203{
1204 return -ENOENT;
1205}
1206
1207static inline int vfs_test_lock(struct file *filp, struct file_lock *fl)
1208{
1209 return 0;
1210}
1211
1212static inline int vfs_lock_file(struct file *filp, unsigned int cmd,
1213 struct file_lock *fl, struct file_lock *conf)
1214{
1215 return -ENOLCK;
1216}
1217
1218static inline int vfs_cancel_lock(struct file *filp, struct file_lock *fl)
1219{
1220 return 0;
1221}
1222
1223static inline int flock_lock_file_wait(struct file *filp,
1224 struct file_lock *request)
1225{
1226 return -ENOLCK;
1227}
1228
1229static inline int __break_lease(struct inode *inode, unsigned int mode)
1230{
1231 return 0;
1232}
1233
1234static inline void lease_get_mtime(struct inode *inode, struct timespec *time)
1235{
1236 return;
1237}
1238
1239static inline int generic_setlease(struct file *filp, long arg,
1240 struct file_lock **flp)
1241{
1242 return -EINVAL;
1243}
1244
1245static inline int vfs_setlease(struct file *filp, long arg,
1246 struct file_lock **lease)
1247{
1248 return -EINVAL;
1249}
1250
1251static inline int lease_modify(struct file_lock **before, int arg)
1252{
1253 return -EINVAL;
1254}
1255
1256static inline int lock_may_read(struct inode *inode, loff_t start,
1257 unsigned long len)
1258{
1259 return 1;
1260}
1261
1262static inline int lock_may_write(struct inode *inode, loff_t start,
1263 unsigned long len)
1264{
1265 return 1;
1266}
1267
1268#endif
1269
1270
1271struct fasync_struct {
1272 int magic;
1273 int fa_fd;
1274 struct fasync_struct *fa_next;
1275 struct file *fa_file;
1276};
1277
1278#define FASYNC_MAGIC 0x4601
1279
1280
1281extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
1282
1283extern void kill_fasync(struct fasync_struct **, int, int);
1284
1285extern void __kill_fasync(struct fasync_struct *, int, int);
1286
1287extern int __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
1288extern int f_setown(struct file *filp, unsigned long arg, int force);
1289extern void f_delown(struct file *filp);
1290extern pid_t f_getown(struct file *filp);
1291extern int send_sigurg(struct fown_struct *fown);
1292
1293
1294
1295
1296
1297#define MNT_FORCE 0x00000001
1298#define MNT_DETACH 0x00000002
1299#define MNT_EXPIRE 0x00000004
1300
1301extern struct list_head super_blocks;
1302extern spinlock_t sb_lock;
1303
1304#define sb_entry(list) list_entry((list), struct super_block, s_list)
1305#define S_BIAS (1<<30)
1306struct super_block {
1307 struct list_head s_list;
1308 dev_t s_dev;
1309 unsigned long s_blocksize;
1310 unsigned char s_blocksize_bits;
1311 unsigned char s_dirt;
1312 unsigned long long s_maxbytes;
1313 struct file_system_type *s_type;
1314 const struct super_operations *s_op;
1315 struct dquot_operations *dq_op;
1316 struct quotactl_ops *s_qcop;
1317 const struct export_operations *s_export_op;
1318 unsigned long s_flags;
1319 unsigned long s_magic;
1320 struct dentry *s_root;
1321 struct rw_semaphore s_umount;
1322 struct mutex s_lock;
1323 int s_count;
1324 int s_need_sync_fs;
1325 atomic_t s_active;
1326#ifdef CONFIG_SECURITY
1327 void *s_security;
1328#endif
1329 struct xattr_handler **s_xattr;
1330
1331 struct list_head s_inodes;
1332 struct list_head s_dirty;
1333 struct list_head s_io;
1334 struct list_head s_more_io;
1335 struct hlist_head s_anon;
1336 struct list_head s_files;
1337
1338 struct list_head s_dentry_lru;
1339 int s_nr_dentry_unused;
1340
1341 struct block_device *s_bdev;
1342 struct mtd_info *s_mtd;
1343 struct list_head s_instances;
1344 struct quota_info s_dquot;
1345
1346 int s_frozen;
1347 wait_queue_head_t s_wait_unfrozen;
1348
1349 char s_id[32];
1350
1351 void *s_fs_info;
1352 fmode_t s_mode;
1353
1354
1355
1356
1357
1358 struct mutex s_vfs_rename_mutex;
1359
1360
1361
1362 u32 s_time_gran;
1363
1364
1365
1366
1367
1368 char *s_subtype;
1369
1370
1371
1372
1373
1374 char *s_options;
1375
1376
1377
1378
1379 struct list_head s_async_list;
1380};
1381
1382extern struct timespec current_fs_time(struct super_block *sb);
1383
1384
1385
1386
1387enum {
1388 SB_UNFROZEN = 0,
1389 SB_FREEZE_WRITE = 1,
1390 SB_FREEZE_TRANS = 2,
1391};
1392
1393#define vfs_check_frozen(sb, level) \
1394 wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level)))
1395
1396#define get_fs_excl() atomic_inc(¤t->fs_excl)
1397#define put_fs_excl() atomic_dec(¤t->fs_excl)
1398#define has_fs_excl() atomic_read(¤t->fs_excl)
1399
1400#define is_owner_or_cap(inode) \
1401 ((current_fsuid() == (inode)->i_uid) || capable(CAP_FOWNER))
1402
1403
1404extern void lock_super(struct super_block *);
1405extern void unlock_super(struct super_block *);
1406
1407
1408
1409
1410extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *);
1411extern int vfs_mkdir(struct inode *, struct dentry *, int);
1412extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
1413extern int vfs_symlink(struct inode *, struct dentry *, const char *);
1414extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
1415extern int vfs_rmdir(struct inode *, struct dentry *);
1416extern int vfs_unlink(struct inode *, struct dentry *);
1417extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
1418
1419
1420
1421
1422extern void dentry_unhash(struct dentry *dentry);
1423
1424
1425
1426
1427extern int file_permission(struct file *, int);
1428
1429
1430
1431
1432struct fiemap_extent_info {
1433 unsigned int fi_flags;
1434 unsigned int fi_extents_mapped;
1435 unsigned int fi_extents_max;
1436 struct fiemap_extent *fi_extents_start;
1437
1438};
1439int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
1440 u64 phys, u64 len, u32 flags);
1441int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
1442
1443
1444
1445
1446
1447
1448
1449#define DT_UNKNOWN 0
1450#define DT_FIFO 1
1451#define DT_CHR 2
1452#define DT_DIR 4
1453#define DT_BLK 6
1454#define DT_REG 8
1455#define DT_LNK 10
1456#define DT_SOCK 12
1457#define DT_WHT 14
1458
1459#define OSYNC_METADATA (1<<0)
1460#define OSYNC_DATA (1<<1)
1461#define OSYNC_INODE (1<<2)
1462int generic_osync_inode(struct inode *, struct address_space *, int);
1463
1464
1465
1466
1467
1468
1469
1470typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
1471struct block_device_operations;
1472
1473
1474
1475
1476#define HAVE_COMPAT_IOCTL 1
1477#define HAVE_UNLOCKED_IOCTL 1
1478
1479
1480
1481
1482
1483
1484struct file_operations {
1485 struct module *owner;
1486 loff_t (*llseek) (struct file *, loff_t, int);
1487 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1488 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1489 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1490 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1491 int (*readdir) (struct file *, void *, filldir_t);
1492 unsigned int (*poll) (struct file *, struct poll_table_struct *);
1493 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
1494 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1495 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1496 int (*mmap) (struct file *, struct vm_area_struct *);
1497 int (*open) (struct inode *, struct file *);
1498 int (*flush) (struct file *, fl_owner_t id);
1499 int (*release) (struct inode *, struct file *);
1500 int (*fsync) (struct file *, struct dentry *, int datasync);
1501 int (*aio_fsync) (struct kiocb *, int datasync);
1502 int (*fasync) (int, struct file *, int);
1503 int (*lock) (struct file *, int, struct file_lock *);
1504 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1505 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1506 int (*check_flags)(int);
1507 int (*flock) (struct file *, int, struct file_lock *);
1508 ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
1509 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
1510 int (*setlease)(struct file *, long, struct file_lock **);
1511};
1512
1513struct inode_operations {
1514 int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
1515 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
1516 int (*link) (struct dentry *,struct inode *,struct dentry *);
1517 int (*unlink) (struct inode *,struct dentry *);
1518 int (*symlink) (struct inode *,struct dentry *,const char *);
1519 int (*mkdir) (struct inode *,struct dentry *,int);
1520 int (*rmdir) (struct inode *,struct dentry *);
1521 int (*mknod) (struct inode *,struct dentry *,int,dev_t);
1522 int (*rename) (struct inode *, struct dentry *,
1523 struct inode *, struct dentry *);
1524 int (*readlink) (struct dentry *, char __user *,int);
1525 void * (*follow_link) (struct dentry *, struct nameidata *);
1526 void (*put_link) (struct dentry *, struct nameidata *, void *);
1527 void (*truncate) (struct inode *);
1528 int (*permission) (struct inode *, int);
1529 int (*setattr) (struct dentry *, struct iattr *);
1530 int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
1531 int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
1532 ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
1533 ssize_t (*listxattr) (struct dentry *, char *, size_t);
1534 int (*removexattr) (struct dentry *, const char *);
1535 void (*truncate_range)(struct inode *, loff_t, loff_t);
1536 long (*fallocate)(struct inode *inode, int mode, loff_t offset,
1537 loff_t len);
1538 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
1539 u64 len);
1540};
1541
1542struct seq_file;
1543
1544ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
1545 unsigned long nr_segs, unsigned long fast_segs,
1546 struct iovec *fast_pointer,
1547 struct iovec **ret_pointer);
1548
1549extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
1550extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
1551extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
1552 unsigned long, loff_t *);
1553extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
1554 unsigned long, loff_t *);
1555
1556struct super_operations {
1557 struct inode *(*alloc_inode)(struct super_block *sb);
1558 void (*destroy_inode)(struct inode *);
1559
1560 void (*dirty_inode) (struct inode *);
1561 int (*write_inode) (struct inode *, int);
1562 void (*drop_inode) (struct inode *);
1563 void (*delete_inode) (struct inode *);
1564 void (*put_super) (struct super_block *);
1565 void (*write_super) (struct super_block *);
1566 int (*sync_fs)(struct super_block *sb, int wait);
1567 int (*freeze_fs) (struct super_block *);
1568 int (*unfreeze_fs) (struct super_block *);
1569 int (*statfs) (struct dentry *, struct kstatfs *);
1570 int (*remount_fs) (struct super_block *, int *, char *);
1571 void (*clear_inode) (struct inode *);
1572 void (*umount_begin) (struct super_block *);
1573
1574 int (*show_options)(struct seq_file *, struct vfsmount *);
1575 int (*show_stats)(struct seq_file *, struct vfsmount *);
1576#ifdef CONFIG_QUOTA
1577 ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
1578 ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
1579#endif
1580 int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
1581};
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636#define I_DIRTY_SYNC 1
1637#define I_DIRTY_DATASYNC 2
1638#define I_DIRTY_PAGES 4
1639#define I_NEW 8
1640#define I_WILL_FREE 16
1641#define I_FREEING 32
1642#define I_CLEAR 64
1643#define __I_LOCK 7
1644#define I_LOCK (1 << __I_LOCK)
1645#define __I_SYNC 8
1646#define I_SYNC (1 << __I_SYNC)
1647
1648#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
1649
1650extern void __mark_inode_dirty(struct inode *, int);
1651static inline void mark_inode_dirty(struct inode *inode)
1652{
1653 __mark_inode_dirty(inode, I_DIRTY);
1654}
1655
1656static inline void mark_inode_dirty_sync(struct inode *inode)
1657{
1658 __mark_inode_dirty(inode, I_DIRTY_SYNC);
1659}
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669static inline void inc_nlink(struct inode *inode)
1670{
1671 inode->i_nlink++;
1672}
1673
1674static inline void inode_inc_link_count(struct inode *inode)
1675{
1676 inc_nlink(inode);
1677 mark_inode_dirty(inode);
1678}
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691static inline void drop_nlink(struct inode *inode)
1692{
1693 inode->i_nlink--;
1694}
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704static inline void clear_nlink(struct inode *inode)
1705{
1706 inode->i_nlink = 0;
1707}
1708
1709static inline void inode_dec_link_count(struct inode *inode)
1710{
1711 drop_nlink(inode);
1712 mark_inode_dirty(inode);
1713}
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723static inline void inode_inc_iversion(struct inode *inode)
1724{
1725 spin_lock(&inode->i_lock);
1726 inode->i_version++;
1727 spin_unlock(&inode->i_lock);
1728}
1729
1730extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry);
1731static inline void file_accessed(struct file *file)
1732{
1733 if (!(file->f_flags & O_NOATIME))
1734 touch_atime(file->f_path.mnt, file->f_path.dentry);
1735}
1736
1737int sync_inode(struct inode *inode, struct writeback_control *wbc);
1738
1739struct file_system_type {
1740 const char *name;
1741 int fs_flags;
1742 int (*get_sb) (struct file_system_type *, int,
1743 const char *, void *, struct vfsmount *);
1744 void (*kill_sb) (struct super_block *);
1745 struct module *owner;
1746 struct file_system_type * next;
1747 struct list_head fs_supers;
1748
1749 struct lock_class_key s_lock_key;
1750 struct lock_class_key s_umount_key;
1751
1752 struct lock_class_key i_lock_key;
1753 struct lock_class_key i_mutex_key;
1754 struct lock_class_key i_mutex_dir_key;
1755 struct lock_class_key i_alloc_sem_key;
1756};
1757
1758extern int get_sb_ns(struct file_system_type *fs_type, int flags, void *data,
1759 int (*fill_super)(struct super_block *, void *, int),
1760 struct vfsmount *mnt);
1761extern int get_sb_bdev(struct file_system_type *fs_type,
1762 int flags, const char *dev_name, void *data,
1763 int (*fill_super)(struct super_block *, void *, int),
1764 struct vfsmount *mnt);
1765extern int get_sb_single(struct file_system_type *fs_type,
1766 int flags, void *data,
1767 int (*fill_super)(struct super_block *, void *, int),
1768 struct vfsmount *mnt);
1769extern int get_sb_nodev(struct file_system_type *fs_type,
1770 int flags, void *data,
1771 int (*fill_super)(struct super_block *, void *, int),
1772 struct vfsmount *mnt);
1773void generic_shutdown_super(struct super_block *sb);
1774void kill_block_super(struct super_block *sb);
1775void kill_anon_super(struct super_block *sb);
1776void kill_litter_super(struct super_block *sb);
1777void deactivate_super(struct super_block *sb);
1778void deactivate_locked_super(struct super_block *sb);
1779int set_anon_super(struct super_block *s, void *data);
1780struct super_block *sget(struct file_system_type *type,
1781 int (*test)(struct super_block *,void *),
1782 int (*set)(struct super_block *,void *),
1783 void *data);
1784extern int get_sb_pseudo(struct file_system_type *, char *,
1785 const struct super_operations *ops, unsigned long,
1786 struct vfsmount *mnt);
1787extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
1788int __put_super_and_need_restart(struct super_block *sb);
1789
1790
1791#define fops_get(fops) \
1792 (((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
1793#define fops_put(fops) \
1794 do { if (fops) module_put((fops)->owner); } while(0)
1795
1796extern int register_filesystem(struct file_system_type *);
1797extern int unregister_filesystem(struct file_system_type *);
1798extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data);
1799#define kern_mount(type) kern_mount_data(type, NULL)
1800extern int may_umount_tree(struct vfsmount *);
1801extern int may_umount(struct vfsmount *);
1802extern long do_mount(char *, char *, char *, unsigned long, void *);
1803extern struct vfsmount *collect_mounts(struct vfsmount *, struct dentry *);
1804extern void drop_collected_mounts(struct vfsmount *);
1805
1806extern int vfs_statfs(struct dentry *, struct kstatfs *);
1807
1808extern int current_umask(void);
1809
1810
1811extern struct kobject *fs_kobj;
1812
1813extern int rw_verify_area(int, struct file *, loff_t *, size_t);
1814
1815#define FLOCK_VERIFY_READ 1
1816#define FLOCK_VERIFY_WRITE 2
1817
1818#ifdef CONFIG_FILE_LOCKING
1819extern int locks_mandatory_locked(struct inode *);
1820extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size_t);
1821
1822
1823
1824
1825
1826
1827static inline int __mandatory_lock(struct inode *ino)
1828{
1829 return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID;
1830}
1831
1832
1833
1834
1835
1836
1837static inline int mandatory_lock(struct inode *ino)
1838{
1839 return IS_MANDLOCK(ino) && __mandatory_lock(ino);
1840}
1841
1842static inline int locks_verify_locked(struct inode *inode)
1843{
1844 if (mandatory_lock(inode))
1845 return locks_mandatory_locked(inode);
1846 return 0;
1847}
1848
1849static inline int locks_verify_truncate(struct inode *inode,
1850 struct file *filp,
1851 loff_t size)
1852{
1853 if (inode->i_flock && mandatory_lock(inode))
1854 return locks_mandatory_area(
1855 FLOCK_VERIFY_WRITE, inode, filp,
1856 size < inode->i_size ? size : inode->i_size,
1857 (size < inode->i_size ? inode->i_size - size
1858 : size - inode->i_size)
1859 );
1860 return 0;
1861}
1862
1863static inline int break_lease(struct inode *inode, unsigned int mode)
1864{
1865 if (inode->i_flock)
1866 return __break_lease(inode, mode);
1867 return 0;
1868}
1869#else
1870static inline int locks_mandatory_locked(struct inode *inode)
1871{
1872 return 0;
1873}
1874
1875static inline int locks_mandatory_area(int rw, struct inode *inode,
1876 struct file *filp, loff_t offset,
1877 size_t count)
1878{
1879 return 0;
1880}
1881
1882static inline int __mandatory_lock(struct inode *inode)
1883{
1884 return 0;
1885}
1886
1887static inline int mandatory_lock(struct inode *inode)
1888{
1889 return 0;
1890}
1891
1892static inline int locks_verify_locked(struct inode *inode)
1893{
1894 return 0;
1895}
1896
1897static inline int locks_verify_truncate(struct inode *inode, struct file *filp,
1898 size_t size)
1899{
1900 return 0;
1901}
1902
1903static inline int break_lease(struct inode *inode, unsigned int mode)
1904{
1905 return 0;
1906}
1907
1908#endif
1909
1910
1911
1912extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
1913 struct file *filp);
1914extern long do_sys_open(int dfd, const char __user *filename, int flags,
1915 int mode);
1916extern struct file *filp_open(const char *, int, int);
1917extern struct file * dentry_open(struct dentry *, struct vfsmount *, int,
1918 const struct cred *);
1919extern int filp_close(struct file *, fl_owner_t id);
1920extern char * getname(const char __user *);
1921
1922
1923extern void __init vfs_caches_init_early(void);
1924extern void __init vfs_caches_init(unsigned long);
1925
1926extern struct kmem_cache *names_cachep;
1927
1928#define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL)
1929#define __putname(name) kmem_cache_free(names_cachep, (void *)(name))
1930#ifndef CONFIG_AUDITSYSCALL
1931#define putname(name) __putname(name)
1932#else
1933extern void putname(const char *name);
1934#endif
1935
1936#ifdef CONFIG_BLOCK
1937extern int register_blkdev(unsigned int, const char *);
1938extern void unregister_blkdev(unsigned int, const char *);
1939extern struct block_device *bdget(dev_t);
1940extern void bd_set_size(struct block_device *, loff_t size);
1941extern void bd_forget(struct inode *inode);
1942extern void bdput(struct block_device *);
1943extern struct block_device *open_by_devnum(dev_t, fmode_t);
1944extern void invalidate_bdev(struct block_device *);
1945extern int sync_blockdev(struct block_device *bdev);
1946extern struct super_block *freeze_bdev(struct block_device *);
1947extern void emergency_thaw_all(void);
1948extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
1949extern int fsync_bdev(struct block_device *);
1950extern int fsync_super(struct super_block *);
1951extern int fsync_no_super(struct block_device *);
1952#else
1953static inline void bd_forget(struct inode *inode) {}
1954static inline int sync_blockdev(struct block_device *bdev) { return 0; }
1955static inline void invalidate_bdev(struct block_device *bdev) {}
1956
1957static inline struct super_block *freeze_bdev(struct block_device *sb)
1958{
1959 return NULL;
1960}
1961
1962static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)
1963{
1964 return 0;
1965}
1966#endif
1967extern const struct file_operations def_blk_fops;
1968extern const struct file_operations def_chr_fops;
1969extern const struct file_operations bad_sock_fops;
1970extern const struct file_operations def_fifo_fops;
1971#ifdef CONFIG_BLOCK
1972extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
1973extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long);
1974extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
1975extern int blkdev_get(struct block_device *, fmode_t);
1976extern int blkdev_put(struct block_device *, fmode_t);
1977extern int bd_claim(struct block_device *, void *);
1978extern void bd_release(struct block_device *);
1979#ifdef CONFIG_SYSFS
1980extern int bd_claim_by_disk(struct block_device *, void *, struct gendisk *);
1981extern void bd_release_from_disk(struct block_device *, struct gendisk *);
1982#else
1983#define bd_claim_by_disk(bdev, holder, disk) bd_claim(bdev, holder)
1984#define bd_release_from_disk(bdev, disk) bd_release(bdev)
1985#endif
1986#endif
1987
1988
1989#define CHRDEV_MAJOR_HASH_SIZE 255
1990extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
1991extern int register_chrdev_region(dev_t, unsigned, const char *);
1992extern int register_chrdev(unsigned int, const char *,
1993 const struct file_operations *);
1994extern void unregister_chrdev(unsigned int, const char *);
1995extern void unregister_chrdev_region(dev_t, unsigned);
1996extern void chrdev_show(struct seq_file *,off_t);
1997
1998
1999#define BDEVNAME_SIZE 32
2000#define BDEVT_SIZE 10
2001
2002#ifdef CONFIG_BLOCK
2003#define BLKDEV_MAJOR_HASH_SIZE 255
2004extern const char *__bdevname(dev_t, char *buffer);
2005extern const char *bdevname(struct block_device *bdev, char *buffer);
2006extern struct block_device *lookup_bdev(const char *);
2007extern struct block_device *open_bdev_exclusive(const char *, fmode_t, void *);
2008extern void close_bdev_exclusive(struct block_device *, fmode_t);
2009extern void blkdev_show(struct seq_file *,off_t);
2010
2011#else
2012#define BLKDEV_MAJOR_HASH_SIZE 0
2013#endif
2014
2015extern void init_special_inode(struct inode *, umode_t, dev_t);
2016
2017
2018extern void make_bad_inode(struct inode *);
2019extern int is_bad_inode(struct inode *);
2020
2021extern const struct file_operations read_pipefifo_fops;
2022extern const struct file_operations write_pipefifo_fops;
2023extern const struct file_operations rdwr_pipefifo_fops;
2024
2025extern int fs_may_remount_ro(struct super_block *);
2026
2027#ifdef CONFIG_BLOCK
2028
2029
2030
2031#define bio_rw(bio) ((bio)->bi_rw & (RW_MASK | RWA_MASK))
2032
2033
2034
2035
2036#define bio_data_dir(bio) ((bio)->bi_rw & 1)
2037
2038extern void check_disk_size_change(struct gendisk *disk,
2039 struct block_device *bdev);
2040extern int revalidate_disk(struct gendisk *);
2041extern int check_disk_change(struct block_device *);
2042extern int __invalidate_device(struct block_device *);
2043extern int invalidate_partition(struct gendisk *, int);
2044#endif
2045extern int invalidate_inodes(struct super_block *);
2046unsigned long __invalidate_mapping_pages(struct address_space *mapping,
2047 pgoff_t start, pgoff_t end,
2048 bool be_atomic);
2049unsigned long invalidate_mapping_pages(struct address_space *mapping,
2050 pgoff_t start, pgoff_t end);
2051
2052static inline unsigned long __deprecated
2053invalidate_inode_pages(struct address_space *mapping)
2054{
2055 return invalidate_mapping_pages(mapping, 0, ~0UL);
2056}
2057
2058static inline void invalidate_remote_inode(struct inode *inode)
2059{
2060 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
2061 S_ISLNK(inode->i_mode))
2062 invalidate_mapping_pages(inode->i_mapping, 0, -1);
2063}
2064extern int invalidate_inode_pages2(struct address_space *mapping);
2065extern int invalidate_inode_pages2_range(struct address_space *mapping,
2066 pgoff_t start, pgoff_t end);
2067extern void generic_sync_sb_inodes(struct super_block *sb,
2068 struct writeback_control *wbc);
2069extern int write_inode_now(struct inode *, int);
2070extern int filemap_fdatawrite(struct address_space *);
2071extern int filemap_flush(struct address_space *);
2072extern int filemap_fdatawait(struct address_space *);
2073extern int filemap_write_and_wait(struct address_space *mapping);
2074extern int filemap_write_and_wait_range(struct address_space *mapping,
2075 loff_t lstart, loff_t lend);
2076extern int wait_on_page_writeback_range(struct address_space *mapping,
2077 pgoff_t start, pgoff_t end);
2078extern int __filemap_fdatawrite_range(struct address_space *mapping,
2079 loff_t start, loff_t end, int sync_mode);
2080extern int filemap_fdatawrite_range(struct address_space *mapping,
2081 loff_t start, loff_t end);
2082
2083extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync);
2084extern void sync_supers(void);
2085extern void sync_filesystems(int wait);
2086extern void __fsync_super(struct super_block *sb);
2087extern void emergency_sync(void);
2088extern void emergency_remount(void);
2089extern int do_remount_sb(struct super_block *sb, int flags,
2090 void *data, int force);
2091#ifdef CONFIG_BLOCK
2092extern sector_t bmap(struct inode *, sector_t);
2093#endif
2094extern int notify_change(struct dentry *, struct iattr *);
2095extern int inode_permission(struct inode *, int);
2096extern int generic_permission(struct inode *, int,
2097 int (*check_acl)(struct inode *, int));
2098
2099static inline bool execute_ok(struct inode *inode)
2100{
2101 return (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode);
2102}
2103
2104extern int get_write_access(struct inode *);
2105extern int deny_write_access(struct file *);
2106static inline void put_write_access(struct inode * inode)
2107{
2108 atomic_dec(&inode->i_writecount);
2109}
2110static inline void allow_write_access(struct file *file)
2111{
2112 if (file)
2113 atomic_inc(&file->f_path.dentry->d_inode->i_writecount);
2114}
2115extern int do_pipe_flags(int *, int);
2116extern struct file *create_read_pipe(struct file *f, int flags);
2117extern struct file *create_write_pipe(int flags);
2118extern void free_write_pipe(struct file *);
2119
2120extern struct file *do_filp_open(int dfd, const char *pathname,
2121 int open_flag, int mode, int acc_mode);
2122extern int may_open(struct path *, int, int);
2123
2124extern int kernel_read(struct file *, unsigned long, char *, unsigned long);
2125extern struct file * open_exec(const char *);
2126
2127
2128extern int is_subdir(struct dentry *, struct dentry *);
2129extern ino_t find_inode_number(struct dentry *, struct qstr *);
2130
2131#include <linux/err.h>
2132
2133
2134extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
2135
2136extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin);
2137
2138extern struct inode * inode_init_always(struct super_block *, struct inode *);
2139extern void inode_init_once(struct inode *);
2140extern void inode_add_to_lists(struct super_block *, struct inode *);
2141extern void iput(struct inode *);
2142extern struct inode * igrab(struct inode *);
2143extern ino_t iunique(struct super_block *, ino_t);
2144extern int inode_needs_sync(struct inode *inode);
2145extern void generic_delete_inode(struct inode *inode);
2146extern void generic_drop_inode(struct inode *inode);
2147
2148extern struct inode *ilookup5_nowait(struct super_block *sb,
2149 unsigned long hashval, int (*test)(struct inode *, void *),
2150 void *data);
2151extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
2152 int (*test)(struct inode *, void *), void *data);
2153extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
2154
2155extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
2156extern struct inode * iget_locked(struct super_block *, unsigned long);
2157extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
2158extern int insert_inode_locked(struct inode *);
2159extern void unlock_new_inode(struct inode *);
2160
2161extern void __iget(struct inode * inode);
2162extern void iget_failed(struct inode *);
2163extern void clear_inode(struct inode *);
2164extern void destroy_inode(struct inode *);
2165extern struct inode *new_inode(struct super_block *);
2166extern int should_remove_suid(struct dentry *);
2167extern int file_remove_suid(struct file *);
2168
2169extern void __insert_inode_hash(struct inode *, unsigned long hashval);
2170extern void remove_inode_hash(struct inode *);
2171static inline void insert_inode_hash(struct inode *inode) {
2172 __insert_inode_hash(inode, inode->i_ino);
2173}
2174
2175extern struct file * get_empty_filp(void);
2176extern void file_move(struct file *f, struct list_head *list);
2177extern void file_kill(struct file *f);
2178#ifdef CONFIG_BLOCK
2179struct bio;
2180extern void submit_bio(int, struct bio *);
2181extern int bdev_read_only(struct block_device *);
2182#endif
2183extern int set_blocksize(struct block_device *, int);
2184extern int sb_set_blocksize(struct super_block *, int);
2185extern int sb_min_blocksize(struct super_block *, int);
2186extern int sb_has_dirty_inodes(struct super_block *);
2187
2188extern int generic_file_mmap(struct file *, struct vm_area_struct *);
2189extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
2190extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);
2191int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);
2192extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t);
2193extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t);
2194extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *,
2195 unsigned long, loff_t);
2196extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *,
2197 unsigned long *, loff_t, loff_t *, size_t, size_t);
2198extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *,
2199 unsigned long, loff_t, loff_t *, size_t, ssize_t);
2200extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
2201extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
2202extern int generic_segment_checks(const struct iovec *iov,
2203 unsigned long *nr_segs, size_t *count, int access_flags);
2204
2205
2206extern ssize_t generic_file_splice_read(struct file *, loff_t *,
2207 struct pipe_inode_info *, size_t, unsigned int);
2208extern ssize_t generic_file_splice_write(struct pipe_inode_info *,
2209 struct file *, loff_t *, size_t, unsigned int);
2210extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
2211 struct file *out, loff_t *, size_t len, unsigned int flags);
2212extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
2213 size_t len, unsigned int flags);
2214
2215extern void
2216file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
2217extern loff_t no_llseek(struct file *file, loff_t offset, int origin);
2218extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);
2219extern loff_t generic_file_llseek_unlocked(struct file *file, loff_t offset,
2220 int origin);
2221extern int generic_file_open(struct inode * inode, struct file * filp);
2222extern int nonseekable_open(struct inode * inode, struct file * filp);
2223
2224#ifdef CONFIG_FS_XIP
2225extern ssize_t xip_file_read(struct file *filp, char __user *buf, size_t len,
2226 loff_t *ppos);
2227extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma);
2228extern ssize_t xip_file_write(struct file *filp, const char __user *buf,
2229 size_t len, loff_t *ppos);
2230extern int xip_truncate_page(struct address_space *mapping, loff_t from);
2231#else
2232static inline int xip_truncate_page(struct address_space *mapping, loff_t from)
2233{
2234 return 0;
2235}
2236#endif
2237
2238#ifdef CONFIG_BLOCK
2239ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
2240 struct block_device *bdev, const struct iovec *iov, loff_t offset,
2241 unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io,
2242 int lock_type);
2243
2244enum {
2245 DIO_LOCKING = 1,
2246 DIO_NO_LOCKING,
2247 DIO_OWN_LOCKING,
2248};
2249
2250static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
2251 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
2252 loff_t offset, unsigned long nr_segs, get_block_t get_block,
2253 dio_iodone_t end_io)
2254{
2255 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2256 nr_segs, get_block, end_io, DIO_LOCKING);
2257}
2258
2259static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
2260 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
2261 loff_t offset, unsigned long nr_segs, get_block_t get_block,
2262 dio_iodone_t end_io)
2263{
2264 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2265 nr_segs, get_block, end_io, DIO_NO_LOCKING);
2266}
2267
2268static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb,
2269 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
2270 loff_t offset, unsigned long nr_segs, get_block_t get_block,
2271 dio_iodone_t end_io)
2272{
2273 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2274 nr_segs, get_block, end_io, DIO_OWN_LOCKING);
2275}
2276#endif
2277
2278extern const struct file_operations generic_ro_fops;
2279
2280#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
2281
2282extern int vfs_readlink(struct dentry *, char __user *, int, const char *);
2283extern int vfs_follow_link(struct nameidata *, const char *);
2284extern int page_readlink(struct dentry *, char __user *, int);
2285extern void *page_follow_link_light(struct dentry *, struct nameidata *);
2286extern void page_put_link(struct dentry *, struct nameidata *, void *);
2287extern int __page_symlink(struct inode *inode, const char *symname, int len,
2288 int nofs);
2289extern int page_symlink(struct inode *inode, const char *symname, int len);
2290extern const struct inode_operations page_symlink_inode_operations;
2291extern int generic_readlink(struct dentry *, char __user *, int);
2292extern void generic_fillattr(struct inode *, struct kstat *);
2293extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
2294void inode_add_bytes(struct inode *inode, loff_t bytes);
2295void inode_sub_bytes(struct inode *inode, loff_t bytes);
2296loff_t inode_get_bytes(struct inode *inode);
2297void inode_set_bytes(struct inode *inode, loff_t bytes);
2298
2299extern int vfs_readdir(struct file *, filldir_t, void *);
2300
2301extern int vfs_stat(char __user *, struct kstat *);
2302extern int vfs_lstat(char __user *, struct kstat *);
2303extern int vfs_fstat(unsigned int, struct kstat *);
2304extern int vfs_fstatat(int , char __user *, struct kstat *, int);
2305
2306extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
2307 unsigned long arg);
2308extern int __generic_block_fiemap(struct inode *inode,
2309 struct fiemap_extent_info *fieinfo, u64 start,
2310 u64 len, get_block_t *get_block);
2311extern int generic_block_fiemap(struct inode *inode,
2312 struct fiemap_extent_info *fieinfo, u64 start,
2313 u64 len, get_block_t *get_block);
2314
2315extern void get_filesystem(struct file_system_type *fs);
2316extern void put_filesystem(struct file_system_type *fs);
2317extern struct file_system_type *get_fs_type(const char *name);
2318extern struct super_block *get_super(struct block_device *);
2319extern struct super_block *user_get_super(dev_t);
2320extern void drop_super(struct super_block *sb);
2321
2322extern int dcache_dir_open(struct inode *, struct file *);
2323extern int dcache_dir_close(struct inode *, struct file *);
2324extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
2325extern int dcache_readdir(struct file *, void *, filldir_t);
2326extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
2327extern int simple_statfs(struct dentry *, struct kstatfs *);
2328extern int simple_link(struct dentry *, struct inode *, struct dentry *);
2329extern int simple_unlink(struct inode *, struct dentry *);
2330extern int simple_rmdir(struct inode *, struct dentry *);
2331extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
2332extern int simple_sync_file(struct file *, struct dentry *, int);
2333extern int simple_empty(struct dentry *);
2334extern int simple_readpage(struct file *file, struct page *page);
2335extern int simple_prepare_write(struct file *file, struct page *page,
2336 unsigned offset, unsigned to);
2337extern int simple_write_begin(struct file *file, struct address_space *mapping,
2338 loff_t pos, unsigned len, unsigned flags,
2339 struct page **pagep, void **fsdata);
2340extern int simple_write_end(struct file *file, struct address_space *mapping,
2341 loff_t pos, unsigned len, unsigned copied,
2342 struct page *page, void *fsdata);
2343
2344extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *);
2345extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
2346extern const struct file_operations simple_dir_operations;
2347extern const struct inode_operations simple_dir_inode_operations;
2348struct tree_descr { char *name; const struct file_operations *ops; int mode; };
2349struct dentry *d_alloc_name(struct dentry *, const char *);
2350extern int simple_fill_super(struct super_block *, int, struct tree_descr *);
2351extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
2352extern void simple_release_fs(struct vfsmount **mount, int *count);
2353
2354extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
2355 loff_t *ppos, const void *from, size_t available);
2356
2357#ifdef CONFIG_MIGRATION
2358extern int buffer_migrate_page(struct address_space *,
2359 struct page *, struct page *);
2360#else
2361#define buffer_migrate_page NULL
2362#endif
2363
2364extern int inode_change_ok(struct inode *, struct iattr *);
2365extern int __must_check inode_setattr(struct inode *, struct iattr *);
2366
2367extern void file_update_time(struct file *file);
2368
2369extern int generic_show_options(struct seq_file *m, struct vfsmount *mnt);
2370extern void save_mount_options(struct super_block *sb, char *options);
2371extern void replace_mount_options(struct super_block *sb, char *options);
2372
2373static inline ino_t parent_ino(struct dentry *dentry)
2374{
2375 ino_t res;
2376
2377 spin_lock(&dentry->d_lock);
2378 res = dentry->d_parent->d_inode->i_ino;
2379 spin_unlock(&dentry->d_lock);
2380 return res;
2381}
2382
2383
2384
2385
2386
2387
2388
2389struct simple_transaction_argresp {
2390 ssize_t size;
2391 char data[0];
2392};
2393
2394#define SIMPLE_TRANSACTION_LIMIT (PAGE_SIZE - sizeof(struct simple_transaction_argresp))
2395
2396char *simple_transaction_get(struct file *file, const char __user *buf,
2397 size_t size);
2398ssize_t simple_transaction_read(struct file *file, char __user *buf,
2399 size_t size, loff_t *pos);
2400int simple_transaction_release(struct inode *inode, struct file *file);
2401
2402void simple_transaction_set(struct file *file, size_t n);
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
2421static int __fops ## _open(struct inode *inode, struct file *file) \
2422{ \
2423 __simple_attr_check_format(__fmt, 0ull); \
2424 return simple_attr_open(inode, file, __get, __set, __fmt); \
2425} \
2426static struct file_operations __fops = { \
2427 .owner = THIS_MODULE, \
2428 .open = __fops ## _open, \
2429 .release = simple_attr_release, \
2430 .read = simple_attr_read, \
2431 .write = simple_attr_write, \
2432};
2433
2434static inline void __attribute__((format(printf, 1, 2)))
2435__simple_attr_check_format(const char *fmt, ...)
2436{
2437
2438}
2439
2440int simple_attr_open(struct inode *inode, struct file *file,
2441 int (*get)(void *, u64 *), int (*set)(void *, u64),
2442 const char *fmt);
2443int simple_attr_release(struct inode *inode, struct file *file);
2444ssize_t simple_attr_read(struct file *file, char __user *buf,
2445 size_t len, loff_t *ppos);
2446ssize_t simple_attr_write(struct file *file, const char __user *buf,
2447 size_t len, loff_t *ppos);
2448
2449struct ctl_table;
2450int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
2451 void __user *buffer, size_t *lenp, loff_t *ppos);
2452
2453int __init get_filesystem_list(char *buf);
2454
2455#endif
2456#endif
2457