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