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