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