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