1
2#ifndef _LINUX_FS_H
3#define _LINUX_FS_H
4
5#include <linux/linkage.h>
6#include <linux/wait_bit.h>
7#include <linux/kdev_t.h>
8#include <linux/dcache.h>
9#include <linux/path.h>
10#include <linux/stat.h>
11#include <linux/cache.h>
12#include <linux/list.h>
13#include <linux/list_lru.h>
14#include <linux/llist.h>
15#include <linux/radix-tree.h>
16#include <linux/xarray.h>
17#include <linux/rbtree.h>
18#include <linux/init.h>
19#include <linux/pid.h>
20#include <linux/bug.h>
21#include <linux/mutex.h>
22#include <linux/rwsem.h>
23#include <linux/mm_types.h>
24#include <linux/capability.h>
25#include <linux/semaphore.h>
26#include <linux/fcntl.h>
27#include <linux/fiemap.h>
28#include <linux/rculist_bl.h>
29#include <linux/atomic.h>
30#include <linux/shrinker.h>
31#include <linux/migrate_mode.h>
32#include <linux/uidgid.h>
33#include <linux/lockdep.h>
34#include <linux/percpu-rwsem.h>
35#include <linux/workqueue.h>
36#include <linux/delayed_call.h>
37#include <linux/uuid.h>
38#include <linux/errseq.h>
39#include <linux/ioprio.h>
40
41#include <asm/byteorder.h>
42#include <uapi/linux/fs.h>
43
44struct backing_dev_info;
45struct bdi_writeback;
46struct bio;
47struct export_operations;
48struct hd_geometry;
49struct iovec;
50struct kiocb;
51struct kobject;
52struct pipe_inode_info;
53struct poll_table_struct;
54struct kstatfs;
55struct vm_area_struct;
56struct vfsmount;
57struct cred;
58struct swap_info_struct;
59struct seq_file;
60struct workqueue_struct;
61struct iov_iter;
62struct fscrypt_info;
63struct fscrypt_operations;
64
65extern void __init inode_init(void);
66extern void __init inode_init_early(void);
67extern void __init files_init(void);
68extern void __init files_maxfiles_init(void);
69
70extern struct files_stat_struct files_stat;
71extern unsigned long get_max_files(void);
72extern unsigned int sysctl_nr_open;
73extern struct inodes_stat_t inodes_stat;
74extern int leases_enable, lease_break_time;
75extern int sysctl_protected_symlinks;
76extern int sysctl_protected_hardlinks;
77
78typedef __kernel_rwf_t rwf_t;
79
80struct buffer_head;
81typedef int (get_block_t)(struct inode *inode, sector_t iblock,
82 struct buffer_head *bh_result, int create);
83typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
84 ssize_t bytes, void *private);
85
86#define MAY_EXEC 0x00000001
87#define MAY_WRITE 0x00000002
88#define MAY_READ 0x00000004
89#define MAY_APPEND 0x00000008
90#define MAY_ACCESS 0x00000010
91#define MAY_OPEN 0x00000020
92#define MAY_CHDIR 0x00000040
93
94#define MAY_NOT_BLOCK 0x00000080
95
96
97
98
99
100
101
102#define FMODE_READ ((__force fmode_t)0x1)
103
104#define FMODE_WRITE ((__force fmode_t)0x2)
105
106#define FMODE_LSEEK ((__force fmode_t)0x4)
107
108#define FMODE_PREAD ((__force fmode_t)0x8)
109
110#define FMODE_PWRITE ((__force fmode_t)0x10)
111
112#define FMODE_EXEC ((__force fmode_t)0x20)
113
114#define FMODE_NDELAY ((__force fmode_t)0x40)
115
116#define FMODE_EXCL ((__force fmode_t)0x80)
117
118
119#define FMODE_WRITE_IOCTL ((__force fmode_t)0x100)
120
121#define FMODE_32BITHASH ((__force fmode_t)0x200)
122
123#define FMODE_64BITHASH ((__force fmode_t)0x400)
124
125
126
127
128
129
130
131#define FMODE_NOCMTIME ((__force fmode_t)0x800)
132
133
134#define FMODE_RANDOM ((__force fmode_t)0x1000)
135
136
137#define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000)
138
139
140#define FMODE_PATH ((__force fmode_t)0x4000)
141
142
143#define FMODE_ATOMIC_POS ((__force fmode_t)0x8000)
144
145#define FMODE_WRITER ((__force fmode_t)0x10000)
146
147#define FMODE_CAN_READ ((__force fmode_t)0x20000)
148
149#define FMODE_CAN_WRITE ((__force fmode_t)0x40000)
150
151
152#define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
153
154
155#define FMODE_NOWAIT ((__force fmode_t)0x8000000)
156
157
158
159
160
161
162
163#define CHECK_IOVEC_ONLY -1
164
165
166
167
168
169#define ATTR_MODE (1 << 0)
170#define ATTR_UID (1 << 1)
171#define ATTR_GID (1 << 2)
172#define ATTR_SIZE (1 << 3)
173#define ATTR_ATIME (1 << 4)
174#define ATTR_MTIME (1 << 5)
175#define ATTR_CTIME (1 << 6)
176#define ATTR_ATIME_SET (1 << 7)
177#define ATTR_MTIME_SET (1 << 8)
178#define ATTR_FORCE (1 << 9)
179#define ATTR_ATTR_FLAG (1 << 10)
180#define ATTR_KILL_SUID (1 << 11)
181#define ATTR_KILL_SGID (1 << 12)
182#define ATTR_FILE (1 << 13)
183#define ATTR_KILL_PRIV (1 << 14)
184#define ATTR_OPEN (1 << 15)
185#define ATTR_TIMES_SET (1 << 16)
186#define ATTR_TOUCH (1 << 17)
187
188
189
190
191
192#define WHITEOUT_MODE 0
193#define WHITEOUT_DEV 0
194
195
196
197
198
199
200
201
202
203
204struct iattr {
205 unsigned int ia_valid;
206 umode_t ia_mode;
207 kuid_t ia_uid;
208 kgid_t ia_gid;
209 loff_t ia_size;
210 struct timespec64 ia_atime;
211 struct timespec64 ia_mtime;
212 struct timespec64 ia_ctime;
213
214
215
216
217
218
219 struct file *ia_file;
220};
221
222
223
224
225#include <linux/quota.h>
226
227
228
229
230
231#define FILESYSTEM_MAX_STACK_DEPTH 2
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259enum positive_aop_returns {
260 AOP_WRITEPAGE_ACTIVATE = 0x80000,
261 AOP_TRUNCATED_PAGE = 0x80001,
262};
263
264#define AOP_FLAG_CONT_EXPAND 0x0001
265#define AOP_FLAG_NOFS 0x0002
266
267
268
269
270
271
272struct page;
273struct address_space;
274struct writeback_control;
275
276
277
278
279enum rw_hint {
280 WRITE_LIFE_NOT_SET = 0,
281 WRITE_LIFE_NONE = RWH_WRITE_LIFE_NONE,
282 WRITE_LIFE_SHORT = RWH_WRITE_LIFE_SHORT,
283 WRITE_LIFE_MEDIUM = RWH_WRITE_LIFE_MEDIUM,
284 WRITE_LIFE_LONG = RWH_WRITE_LIFE_LONG,
285 WRITE_LIFE_EXTREME = RWH_WRITE_LIFE_EXTREME,
286};
287
288#define IOCB_EVENTFD (1 << 0)
289#define IOCB_APPEND (1 << 1)
290#define IOCB_DIRECT (1 << 2)
291#define IOCB_HIPRI (1 << 3)
292#define IOCB_DSYNC (1 << 4)
293#define IOCB_SYNC (1 << 5)
294#define IOCB_WRITE (1 << 6)
295#define IOCB_NOWAIT (1 << 7)
296
297struct kiocb {
298 struct file *ki_filp;
299 loff_t ki_pos;
300 void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
301 void *private;
302 int ki_flags;
303 u16 ki_hint;
304 u16 ki_ioprio;
305} __randomize_layout;
306
307static inline bool is_sync_kiocb(struct kiocb *kiocb)
308{
309 return kiocb->ki_complete == NULL;
310}
311
312
313
314
315
316
317
318
319
320
321typedef struct {
322 size_t written;
323 size_t count;
324 union {
325 char __user *buf;
326 void *data;
327 } arg;
328 int error;
329} read_descriptor_t;
330
331typedef int (*read_actor_t)(read_descriptor_t *, struct page *,
332 unsigned long, unsigned long);
333
334struct address_space_operations {
335 int (*writepage)(struct page *page, struct writeback_control *wbc);
336 int (*readpage)(struct file *, struct page *);
337
338
339 int (*writepages)(struct address_space *, struct writeback_control *);
340
341
342 int (*set_page_dirty)(struct page *page);
343
344 int (*readpages)(struct file *filp, struct address_space *mapping,
345 struct list_head *pages, unsigned nr_pages);
346
347 int (*write_begin)(struct file *, struct address_space *mapping,
348 loff_t pos, unsigned len, unsigned flags,
349 struct page **pagep, void **fsdata);
350 int (*write_end)(struct file *, struct address_space *mapping,
351 loff_t pos, unsigned len, unsigned copied,
352 struct page *page, void *fsdata);
353
354
355 sector_t (*bmap)(struct address_space *, sector_t);
356 void (*invalidatepage) (struct page *, unsigned int, unsigned int);
357 int (*releasepage) (struct page *, gfp_t);
358 void (*freepage)(struct page *);
359 ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *iter);
360
361
362
363
364 int (*migratepage) (struct address_space *,
365 struct page *, struct page *, enum migrate_mode);
366 bool (*isolate_page)(struct page *, isolate_mode_t);
367 void (*putback_page)(struct page *);
368 int (*launder_page) (struct page *);
369 int (*is_partially_uptodate) (struct page *, unsigned long,
370 unsigned long);
371 void (*is_dirty_writeback) (struct page *, bool *, bool *);
372 int (*error_remove_page)(struct address_space *, struct page *);
373
374
375 int (*swap_activate)(struct swap_info_struct *sis, struct file *file,
376 sector_t *span);
377 void (*swap_deactivate)(struct file *file);
378};
379
380extern const struct address_space_operations empty_aops;
381
382
383
384
385
386int pagecache_write_begin(struct file *, struct address_space *mapping,
387 loff_t pos, unsigned len, unsigned flags,
388 struct page **pagep, void **fsdata);
389
390int pagecache_write_end(struct file *, struct address_space *mapping,
391 loff_t pos, unsigned len, unsigned copied,
392 struct page *page, void *fsdata);
393
394struct address_space {
395 struct inode *host;
396 struct radix_tree_root i_pages;
397 atomic_t i_mmap_writable;
398 struct rb_root_cached i_mmap;
399 struct rw_semaphore i_mmap_rwsem;
400
401 unsigned long nrpages;
402
403 unsigned long nrexceptional;
404 pgoff_t writeback_index;
405 const struct address_space_operations *a_ops;
406 unsigned long flags;
407 spinlock_t private_lock;
408 gfp_t gfp_mask;
409 struct list_head private_list;
410 void *private_data;
411 errseq_t wb_err;
412} __attribute__((aligned(sizeof(long)))) __randomize_layout;
413
414
415
416
417
418struct request_queue;
419
420struct block_device {
421 dev_t bd_dev;
422 int bd_openers;
423 struct inode * bd_inode;
424 struct super_block * bd_super;
425 struct mutex bd_mutex;
426 void * bd_claiming;
427 void * bd_holder;
428 int bd_holders;
429 bool bd_write_holder;
430#ifdef CONFIG_SYSFS
431 struct list_head bd_holder_disks;
432#endif
433 struct block_device * bd_contains;
434 unsigned bd_block_size;
435 u8 bd_partno;
436 struct hd_struct * bd_part;
437
438 unsigned bd_part_count;
439 int bd_invalidated;
440 struct gendisk * bd_disk;
441 struct request_queue * bd_queue;
442 struct backing_dev_info *bd_bdi;
443 struct list_head bd_list;
444
445
446
447
448
449
450 unsigned long bd_private;
451
452
453 int bd_fsfreeze_count;
454
455 struct mutex bd_fsfreeze_mutex;
456} __randomize_layout;
457
458
459
460
461
462#define PAGECACHE_TAG_DIRTY 0
463#define PAGECACHE_TAG_WRITEBACK 1
464#define PAGECACHE_TAG_TOWRITE 2
465
466int mapping_tagged(struct address_space *mapping, int tag);
467
468static inline void i_mmap_lock_write(struct address_space *mapping)
469{
470 down_write(&mapping->i_mmap_rwsem);
471}
472
473static inline void i_mmap_unlock_write(struct address_space *mapping)
474{
475 up_write(&mapping->i_mmap_rwsem);
476}
477
478static inline void i_mmap_lock_read(struct address_space *mapping)
479{
480 down_read(&mapping->i_mmap_rwsem);
481}
482
483static inline void i_mmap_unlock_read(struct address_space *mapping)
484{
485 up_read(&mapping->i_mmap_rwsem);
486}
487
488
489
490
491static inline int mapping_mapped(struct address_space *mapping)
492{
493 return !RB_EMPTY_ROOT(&mapping->i_mmap.rb_root);
494}
495
496
497
498
499
500
501
502
503
504
505static inline int mapping_writably_mapped(struct address_space *mapping)
506{
507 return atomic_read(&mapping->i_mmap_writable) > 0;
508}
509
510static inline int mapping_map_writable(struct address_space *mapping)
511{
512 return atomic_inc_unless_negative(&mapping->i_mmap_writable) ?
513 0 : -EPERM;
514}
515
516static inline void mapping_unmap_writable(struct address_space *mapping)
517{
518 atomic_dec(&mapping->i_mmap_writable);
519}
520
521static inline int mapping_deny_writable(struct address_space *mapping)
522{
523 return atomic_dec_unless_positive(&mapping->i_mmap_writable) ?
524 0 : -EBUSY;
525}
526
527static inline void mapping_allow_writable(struct address_space *mapping)
528{
529 atomic_inc(&mapping->i_mmap_writable);
530}
531
532
533
534
535#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
536#include <linux/seqlock.h>
537#define __NEED_I_SIZE_ORDERED
538#define i_size_ordered_init(inode) seqcount_init(&inode->i_size_seqcount)
539#else
540#define i_size_ordered_init(inode) do { } while (0)
541#endif
542
543struct posix_acl;
544#define ACL_NOT_CACHED ((void *)(-1))
545#define ACL_DONT_CACHE ((void *)(-3))
546
547static inline struct posix_acl *
548uncached_acl_sentinel(struct task_struct *task)
549{
550 return (void *)task + 1;
551}
552
553static inline bool
554is_uncached_acl(struct posix_acl *acl)
555{
556 return (long)acl & 1;
557}
558
559#define IOP_FASTPERM 0x0001
560#define IOP_LOOKUP 0x0002
561#define IOP_NOFOLLOW 0x0004
562#define IOP_XATTR 0x0008
563#define IOP_DEFAULT_READLINK 0x0010
564
565struct fsnotify_mark_connector;
566
567
568
569
570
571
572struct inode {
573 umode_t i_mode;
574 unsigned short i_opflags;
575 kuid_t i_uid;
576 kgid_t i_gid;
577 unsigned int i_flags;
578
579#ifdef CONFIG_FS_POSIX_ACL
580 struct posix_acl *i_acl;
581 struct posix_acl *i_default_acl;
582#endif
583
584 const struct inode_operations *i_op;
585 struct super_block *i_sb;
586 struct address_space *i_mapping;
587
588#ifdef CONFIG_SECURITY
589 void *i_security;
590#endif
591
592
593 unsigned long i_ino;
594
595
596
597
598
599
600
601 union {
602 const unsigned int i_nlink;
603 unsigned int __i_nlink;
604 };
605 dev_t i_rdev;
606 loff_t i_size;
607 struct timespec64 i_atime;
608 struct timespec64 i_mtime;
609 struct timespec64 i_ctime;
610 spinlock_t i_lock;
611 unsigned short i_bytes;
612 unsigned int i_blkbits;
613 enum rw_hint i_write_hint;
614 blkcnt_t i_blocks;
615
616#ifdef __NEED_I_SIZE_ORDERED
617 seqcount_t i_size_seqcount;
618#endif
619
620
621 unsigned long i_state;
622 struct rw_semaphore i_rwsem;
623
624 unsigned long dirtied_when;
625 unsigned long dirtied_time_when;
626
627 struct hlist_node i_hash;
628 struct list_head i_io_list;
629#ifdef CONFIG_CGROUP_WRITEBACK
630 struct bdi_writeback *i_wb;
631
632
633 int i_wb_frn_winner;
634 u16 i_wb_frn_avg_time;
635 u16 i_wb_frn_history;
636#endif
637 struct list_head i_lru;
638 struct list_head i_sb_list;
639 struct list_head i_wb_list;
640 union {
641 struct hlist_head i_dentry;
642 struct rcu_head i_rcu;
643 };
644 atomic64_t i_version;
645 atomic_t i_count;
646 atomic_t i_dio_count;
647 atomic_t i_writecount;
648#ifdef CONFIG_IMA
649 atomic_t i_readcount;
650#endif
651 const struct file_operations *i_fop;
652 struct file_lock_context *i_flctx;
653 struct address_space i_data;
654 struct list_head i_devices;
655 union {
656 struct pipe_inode_info *i_pipe;
657 struct block_device *i_bdev;
658 struct cdev *i_cdev;
659 char *i_link;
660 unsigned i_dir_seq;
661 };
662
663 __u32 i_generation;
664
665#ifdef CONFIG_FSNOTIFY
666 __u32 i_fsnotify_mask;
667 struct fsnotify_mark_connector __rcu *i_fsnotify_marks;
668#endif
669
670#if IS_ENABLED(CONFIG_FS_ENCRYPTION)
671 struct fscrypt_info *i_crypt_info;
672#endif
673
674 void *i_private;
675} __randomize_layout;
676
677static inline unsigned int i_blocksize(const struct inode *node)
678{
679 return (1 << node->i_blkbits);
680}
681
682static inline int inode_unhashed(struct inode *inode)
683{
684 return hlist_unhashed(&inode->i_hash);
685}
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703enum inode_i_mutex_lock_class
704{
705 I_MUTEX_NORMAL,
706 I_MUTEX_PARENT,
707 I_MUTEX_CHILD,
708 I_MUTEX_XATTR,
709 I_MUTEX_NONDIR2,
710 I_MUTEX_PARENT2,
711};
712
713static inline void inode_lock(struct inode *inode)
714{
715 down_write(&inode->i_rwsem);
716}
717
718static inline void inode_unlock(struct inode *inode)
719{
720 up_write(&inode->i_rwsem);
721}
722
723static inline void inode_lock_shared(struct inode *inode)
724{
725 down_read(&inode->i_rwsem);
726}
727
728static inline void inode_unlock_shared(struct inode *inode)
729{
730 up_read(&inode->i_rwsem);
731}
732
733static inline int inode_trylock(struct inode *inode)
734{
735 return down_write_trylock(&inode->i_rwsem);
736}
737
738static inline int inode_trylock_shared(struct inode *inode)
739{
740 return down_read_trylock(&inode->i_rwsem);
741}
742
743static inline int inode_is_locked(struct inode *inode)
744{
745 return rwsem_is_locked(&inode->i_rwsem);
746}
747
748static inline void inode_lock_nested(struct inode *inode, unsigned subclass)
749{
750 down_write_nested(&inode->i_rwsem, subclass);
751}
752
753static inline void inode_lock_shared_nested(struct inode *inode, unsigned subclass)
754{
755 down_read_nested(&inode->i_rwsem, subclass);
756}
757
758void lock_two_nondirectories(struct inode *, struct inode*);
759void unlock_two_nondirectories(struct inode *, struct inode*);
760
761
762
763
764
765
766
767
768
769
770
771static inline loff_t i_size_read(const struct inode *inode)
772{
773#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
774 loff_t i_size;
775 unsigned int seq;
776
777 do {
778 seq = read_seqcount_begin(&inode->i_size_seqcount);
779 i_size = inode->i_size;
780 } while (read_seqcount_retry(&inode->i_size_seqcount, seq));
781 return i_size;
782#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
783 loff_t i_size;
784
785 preempt_disable();
786 i_size = inode->i_size;
787 preempt_enable();
788 return i_size;
789#else
790 return inode->i_size;
791#endif
792}
793
794
795
796
797
798
799static inline void i_size_write(struct inode *inode, loff_t i_size)
800{
801#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
802 preempt_disable();
803 write_seqcount_begin(&inode->i_size_seqcount);
804 inode->i_size = i_size;
805 write_seqcount_end(&inode->i_size_seqcount);
806 preempt_enable();
807#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
808 preempt_disable();
809 inode->i_size = i_size;
810 preempt_enable();
811#else
812 inode->i_size = i_size;
813#endif
814}
815
816static inline unsigned iminor(const struct inode *inode)
817{
818 return MINOR(inode->i_rdev);
819}
820
821static inline unsigned imajor(const struct inode *inode)
822{
823 return MAJOR(inode->i_rdev);
824}
825
826extern struct block_device *I_BDEV(struct inode *inode);
827
828struct fown_struct {
829 rwlock_t lock;
830 struct pid *pid;
831 enum pid_type pid_type;
832 kuid_t uid, euid;
833 int signum;
834};
835
836
837
838
839struct file_ra_state {
840 pgoff_t start;
841 unsigned int size;
842 unsigned int async_size;
843
844
845 unsigned int ra_pages;
846 unsigned int mmap_miss;
847 loff_t prev_pos;
848};
849
850
851
852
853static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
854{
855 return (index >= ra->start &&
856 index < ra->start + ra->size);
857}
858
859struct file {
860 union {
861 struct llist_node fu_llist;
862 struct rcu_head fu_rcuhead;
863 } f_u;
864 struct path f_path;
865 struct inode *f_inode;
866 const struct file_operations *f_op;
867
868
869
870
871
872 spinlock_t f_lock;
873 enum rw_hint f_write_hint;
874 atomic_long_t f_count;
875 unsigned int f_flags;
876 fmode_t f_mode;
877 struct mutex f_pos_lock;
878 loff_t f_pos;
879 struct fown_struct f_owner;
880 const struct cred *f_cred;
881 struct file_ra_state f_ra;
882
883 u64 f_version;
884#ifdef CONFIG_SECURITY
885 void *f_security;
886#endif
887
888 void *private_data;
889
890#ifdef CONFIG_EPOLL
891
892 struct list_head f_ep_links;
893 struct list_head f_tfile_llink;
894#endif
895 struct address_space *f_mapping;
896 errseq_t f_wb_err;
897} __randomize_layout
898 __attribute__((aligned(4)));
899
900struct file_handle {
901 __u32 handle_bytes;
902 int handle_type;
903
904 unsigned char f_handle[0];
905};
906
907static inline struct file *get_file(struct file *f)
908{
909 atomic_long_inc(&f->f_count);
910 return f;
911}
912#define get_file_rcu(x) atomic_long_inc_not_zero(&(x)->f_count)
913#define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1)
914#define file_count(x) atomic_long_read(&(x)->f_count)
915
916#define MAX_NON_LFS ((1UL<<31) - 1)
917
918
919
920#if BITS_PER_LONG==32
921#define MAX_LFS_FILESIZE ((loff_t)ULONG_MAX << PAGE_SHIFT)
922#elif BITS_PER_LONG==64
923#define MAX_LFS_FILESIZE ((loff_t)LLONG_MAX)
924#endif
925
926#define FL_POSIX 1
927#define FL_FLOCK 2
928#define FL_DELEG 4
929#define FL_ACCESS 8
930#define FL_EXISTS 16
931#define FL_LEASE 32
932#define FL_CLOSE 64
933#define FL_SLEEP 128
934#define FL_DOWNGRADE_PENDING 256
935#define FL_UNLOCK_PENDING 512
936#define FL_OFDLCK 1024
937#define FL_LAYOUT 2048
938
939#define FL_CLOSE_POSIX (FL_POSIX | FL_CLOSE)
940
941
942
943
944
945#define FILE_LOCK_DEFERRED 1
946
947
948typedef void *fl_owner_t;
949
950struct file_lock;
951
952struct file_lock_operations {
953 void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
954 void (*fl_release_private)(struct file_lock *);
955};
956
957struct lock_manager_operations {
958 int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
959 unsigned long (*lm_owner_key)(struct file_lock *);
960 fl_owner_t (*lm_get_owner)(fl_owner_t);
961 void (*lm_put_owner)(fl_owner_t);
962 void (*lm_notify)(struct file_lock *);
963 int (*lm_grant)(struct file_lock *, int);
964 bool (*lm_break)(struct file_lock *);
965 int (*lm_change)(struct file_lock *, int, struct list_head *);
966 void (*lm_setup)(struct file_lock *, void **);
967};
968
969struct lock_manager {
970 struct list_head list;
971
972
973
974
975 bool block_opens;
976};
977
978struct net;
979void locks_start_grace(struct net *, struct lock_manager *);
980void locks_end_grace(struct lock_manager *);
981bool locks_in_grace(struct net *);
982bool opens_in_grace(struct net *);
983
984
985#include <linux/nfs_fs_i.h>
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004struct file_lock {
1005 struct file_lock *fl_next;
1006 struct list_head fl_list;
1007 struct hlist_node fl_link;
1008 struct list_head fl_block;
1009 fl_owner_t fl_owner;
1010 unsigned int fl_flags;
1011 unsigned char fl_type;
1012 unsigned int fl_pid;
1013 int fl_link_cpu;
1014 wait_queue_head_t fl_wait;
1015 struct file *fl_file;
1016 loff_t fl_start;
1017 loff_t fl_end;
1018
1019 struct fasync_struct * fl_fasync;
1020
1021 unsigned long fl_break_time;
1022 unsigned long fl_downgrade_time;
1023
1024 const struct file_lock_operations *fl_ops;
1025 const struct lock_manager_operations *fl_lmops;
1026 union {
1027 struct nfs_lock_info nfs_fl;
1028 struct nfs4_lock_info nfs4_fl;
1029 struct {
1030 struct list_head link;
1031 int state;
1032 } afs;
1033 } fl_u;
1034} __randomize_layout;
1035
1036struct file_lock_context {
1037 spinlock_t flc_lock;
1038 struct list_head flc_flock;
1039 struct list_head flc_posix;
1040 struct list_head flc_lease;
1041};
1042
1043
1044#ifndef OFFSET_MAX
1045#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
1046#define OFFSET_MAX INT_LIMIT(loff_t)
1047#define OFFT_OFFSET_MAX INT_LIMIT(off_t)
1048#endif
1049
1050extern void send_sigio(struct fown_struct *fown, int fd, int band);
1051
1052
1053
1054
1055
1056
1057
1058
1059static inline struct inode *locks_inode(const struct file *f)
1060{
1061 return f->f_path.dentry->d_inode;
1062}
1063
1064#ifdef CONFIG_FILE_LOCKING
1065extern int fcntl_getlk(struct file *, unsigned int, struct flock *);
1066extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
1067 struct flock *);
1068
1069#if BITS_PER_LONG == 32
1070extern int fcntl_getlk64(struct file *, unsigned int, struct flock64 *);
1071extern int fcntl_setlk64(unsigned int, struct file *, unsigned int,
1072 struct flock64 *);
1073#endif
1074
1075extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg);
1076extern int fcntl_getlease(struct file *filp);
1077
1078
1079void locks_free_lock_context(struct inode *inode);
1080void locks_free_lock(struct file_lock *fl);
1081extern void locks_init_lock(struct file_lock *);
1082extern struct file_lock * locks_alloc_lock(void);
1083extern void locks_copy_lock(struct file_lock *, struct file_lock *);
1084extern void locks_copy_conflock(struct file_lock *, struct file_lock *);
1085extern void locks_remove_posix(struct file *, fl_owner_t);
1086extern void locks_remove_file(struct file *);
1087extern void locks_release_private(struct file_lock *);
1088extern void posix_test_lock(struct file *, struct file_lock *);
1089extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
1090extern int posix_unblock_lock(struct file_lock *);
1091extern int vfs_test_lock(struct file *, struct file_lock *);
1092extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
1093extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
1094extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl);
1095extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
1096extern void lease_get_mtime(struct inode *, struct timespec64 *time);
1097extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
1098extern int vfs_setlease(struct file *, long, struct file_lock **, void **);
1099extern int lease_modify(struct file_lock *, int, struct list_head *);
1100struct files_struct;
1101extern void show_fd_locks(struct seq_file *f,
1102 struct file *filp, struct files_struct *files);
1103#else
1104static inline int fcntl_getlk(struct file *file, unsigned int cmd,
1105 struct flock __user *user)
1106{
1107 return -EINVAL;
1108}
1109
1110static inline int fcntl_setlk(unsigned int fd, struct file *file,
1111 unsigned int cmd, struct flock __user *user)
1112{
1113 return -EACCES;
1114}
1115
1116#if BITS_PER_LONG == 32
1117static inline int fcntl_getlk64(struct file *file, unsigned int cmd,
1118 struct flock64 __user *user)
1119{
1120 return -EINVAL;
1121}
1122
1123static inline int fcntl_setlk64(unsigned int fd, struct file *file,
1124 unsigned int cmd, struct flock64 __user *user)
1125{
1126 return -EACCES;
1127}
1128#endif
1129static inline int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
1130{
1131 return -EINVAL;
1132}
1133
1134static inline int fcntl_getlease(struct file *filp)
1135{
1136 return F_UNLCK;
1137}
1138
1139static inline void
1140locks_free_lock_context(struct inode *inode)
1141{
1142}
1143
1144static inline void locks_init_lock(struct file_lock *fl)
1145{
1146 return;
1147}
1148
1149static inline void locks_copy_conflock(struct file_lock *new, struct file_lock *fl)
1150{
1151 return;
1152}
1153
1154static inline void locks_copy_lock(struct file_lock *new, struct file_lock *fl)
1155{
1156 return;
1157}
1158
1159static inline void locks_remove_posix(struct file *filp, fl_owner_t owner)
1160{
1161 return;
1162}
1163
1164static inline void locks_remove_file(struct file *filp)
1165{
1166 return;
1167}
1168
1169static inline void posix_test_lock(struct file *filp, struct file_lock *fl)
1170{
1171 return;
1172}
1173
1174static inline int posix_lock_file(struct file *filp, struct file_lock *fl,
1175 struct file_lock *conflock)
1176{
1177 return -ENOLCK;
1178}
1179
1180static inline int posix_unblock_lock(struct file_lock *waiter)
1181{
1182 return -ENOENT;
1183}
1184
1185static inline int vfs_test_lock(struct file *filp, struct file_lock *fl)
1186{
1187 return 0;
1188}
1189
1190static inline int vfs_lock_file(struct file *filp, unsigned int cmd,
1191 struct file_lock *fl, struct file_lock *conf)
1192{
1193 return -ENOLCK;
1194}
1195
1196static inline int vfs_cancel_lock(struct file *filp, struct file_lock *fl)
1197{
1198 return 0;
1199}
1200
1201static inline int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
1202{
1203 return -ENOLCK;
1204}
1205
1206static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
1207{
1208 return 0;
1209}
1210
1211static inline void lease_get_mtime(struct inode *inode,
1212 struct timespec64 *time)
1213{
1214 return;
1215}
1216
1217static inline int generic_setlease(struct file *filp, long arg,
1218 struct file_lock **flp, void **priv)
1219{
1220 return -EINVAL;
1221}
1222
1223static inline int vfs_setlease(struct file *filp, long arg,
1224 struct file_lock **lease, void **priv)
1225{
1226 return -EINVAL;
1227}
1228
1229static inline int lease_modify(struct file_lock *fl, int arg,
1230 struct list_head *dispose)
1231{
1232 return -EINVAL;
1233}
1234
1235struct files_struct;
1236static inline void show_fd_locks(struct seq_file *f,
1237 struct file *filp, struct files_struct *files) {}
1238#endif
1239
1240static inline struct inode *file_inode(const struct file *f)
1241{
1242 return f->f_inode;
1243}
1244
1245static inline struct dentry *file_dentry(const struct file *file)
1246{
1247 return d_real(file->f_path.dentry, file_inode(file), 0, 0);
1248}
1249
1250static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
1251{
1252 return locks_lock_inode_wait(locks_inode(filp), fl);
1253}
1254
1255struct fasync_struct {
1256 rwlock_t fa_lock;
1257 int magic;
1258 int fa_fd;
1259 struct fasync_struct *fa_next;
1260 struct file *fa_file;
1261 struct rcu_head fa_rcu;
1262};
1263
1264#define FASYNC_MAGIC 0x4601
1265
1266
1267extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
1268extern struct fasync_struct *fasync_insert_entry(int, struct file *, struct fasync_struct **, struct fasync_struct *);
1269extern int fasync_remove_entry(struct file *, struct fasync_struct **);
1270extern struct fasync_struct *fasync_alloc(void);
1271extern void fasync_free(struct fasync_struct *);
1272
1273
1274extern void kill_fasync(struct fasync_struct **, int, int);
1275
1276extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
1277extern int f_setown(struct file *filp, unsigned long arg, int force);
1278extern void f_delown(struct file *filp);
1279extern pid_t f_getown(struct file *filp);
1280extern int send_sigurg(struct fown_struct *fown);
1281
1282
1283
1284
1285
1286#define SB_RDONLY 1
1287#define SB_NOSUID 2
1288#define SB_NODEV 4
1289#define SB_NOEXEC 8
1290#define SB_SYNCHRONOUS 16
1291#define SB_MANDLOCK 64
1292#define SB_DIRSYNC 128
1293#define SB_NOATIME 1024
1294#define SB_NODIRATIME 2048
1295#define SB_SILENT 32768
1296#define SB_POSIXACL (1<<16)
1297#define SB_KERNMOUNT (1<<22)
1298#define SB_I_VERSION (1<<23)
1299#define SB_LAZYTIME (1<<25)
1300
1301
1302#define SB_SUBMOUNT (1<<26)
1303#define SB_NOREMOTELOCK (1<<27)
1304#define SB_NOSEC (1<<28)
1305#define SB_BORN (1<<29)
1306#define SB_ACTIVE (1<<30)
1307#define SB_NOUSER (1<<31)
1308
1309
1310
1311
1312
1313#define MNT_FORCE 0x00000001
1314#define MNT_DETACH 0x00000002
1315#define MNT_EXPIRE 0x00000004
1316#define UMOUNT_NOFOLLOW 0x00000008
1317#define UMOUNT_UNUSED 0x80000000
1318
1319
1320#define SB_I_CGROUPWB 0x00000001
1321#define SB_I_NOEXEC 0x00000002
1322#define SB_I_NODEV 0x00000004
1323#define SB_I_MULTIROOT 0x00000008
1324
1325
1326#define SB_I_USERNS_VISIBLE 0x00000010
1327#define SB_I_IMA_UNVERIFIABLE_SIGNATURE 0x00000020
1328#define SB_I_UNTRUSTED_MOUNTER 0x00000040
1329
1330
1331enum {
1332 SB_UNFROZEN = 0,
1333 SB_FREEZE_WRITE = 1,
1334 SB_FREEZE_PAGEFAULT = 2,
1335 SB_FREEZE_FS = 3,
1336
1337 SB_FREEZE_COMPLETE = 4,
1338};
1339
1340#define SB_FREEZE_LEVELS (SB_FREEZE_COMPLETE - 1)
1341
1342struct sb_writers {
1343 int frozen;
1344 wait_queue_head_t wait_unfrozen;
1345 struct percpu_rw_semaphore rw_sem[SB_FREEZE_LEVELS];
1346};
1347
1348struct super_block {
1349 struct list_head s_list;
1350 dev_t s_dev;
1351 unsigned char s_blocksize_bits;
1352 unsigned long s_blocksize;
1353 loff_t s_maxbytes;
1354 struct file_system_type *s_type;
1355 const struct super_operations *s_op;
1356 const struct dquot_operations *dq_op;
1357 const struct quotactl_ops *s_qcop;
1358 const struct export_operations *s_export_op;
1359 unsigned long s_flags;
1360 unsigned long s_iflags;
1361 unsigned long s_magic;
1362 struct dentry *s_root;
1363 struct rw_semaphore s_umount;
1364 int s_count;
1365 atomic_t s_active;
1366#ifdef CONFIG_SECURITY
1367 void *s_security;
1368#endif
1369 const struct xattr_handler **s_xattr;
1370#if IS_ENABLED(CONFIG_FS_ENCRYPTION)
1371 const struct fscrypt_operations *s_cop;
1372#endif
1373 struct hlist_bl_head s_roots;
1374 struct list_head s_mounts;
1375 struct block_device *s_bdev;
1376 struct backing_dev_info *s_bdi;
1377 struct mtd_info *s_mtd;
1378 struct hlist_node s_instances;
1379 unsigned int s_quota_types;
1380 struct quota_info s_dquot;
1381
1382 struct sb_writers s_writers;
1383
1384 char s_id[32];
1385 uuid_t s_uuid;
1386
1387 void *s_fs_info;
1388 unsigned int s_max_links;
1389 fmode_t s_mode;
1390
1391
1392
1393 u32 s_time_gran;
1394
1395
1396
1397
1398
1399 struct mutex s_vfs_rename_mutex;
1400
1401
1402
1403
1404
1405 char *s_subtype;
1406
1407 const struct dentry_operations *s_d_op;
1408
1409
1410
1411
1412 int cleancache_poolid;
1413
1414 struct shrinker s_shrink;
1415
1416
1417 atomic_long_t s_remove_count;
1418
1419
1420 int s_readonly_remount;
1421
1422
1423 struct workqueue_struct *s_dio_done_wq;
1424 struct hlist_head s_pins;
1425
1426
1427
1428
1429
1430
1431 struct user_namespace *s_user_ns;
1432
1433
1434
1435
1436
1437 struct list_lru s_dentry_lru ____cacheline_aligned_in_smp;
1438 struct list_lru s_inode_lru ____cacheline_aligned_in_smp;
1439 struct rcu_head rcu;
1440 struct work_struct destroy_work;
1441
1442 struct mutex s_sync_lock;
1443
1444
1445
1446
1447 int s_stack_depth;
1448
1449
1450 spinlock_t s_inode_list_lock ____cacheline_aligned_in_smp;
1451 struct list_head s_inodes;
1452
1453 spinlock_t s_inode_wblist_lock;
1454 struct list_head s_inodes_wb;
1455} __randomize_layout;
1456
1457
1458
1459
1460
1461
1462static inline uid_t i_uid_read(const struct inode *inode)
1463{
1464 return from_kuid(inode->i_sb->s_user_ns, inode->i_uid);
1465}
1466
1467static inline gid_t i_gid_read(const struct inode *inode)
1468{
1469 return from_kgid(inode->i_sb->s_user_ns, inode->i_gid);
1470}
1471
1472static inline void i_uid_write(struct inode *inode, uid_t uid)
1473{
1474 inode->i_uid = make_kuid(inode->i_sb->s_user_ns, uid);
1475}
1476
1477static inline void i_gid_write(struct inode *inode, gid_t gid)
1478{
1479 inode->i_gid = make_kgid(inode->i_sb->s_user_ns, gid);
1480}
1481
1482extern struct timespec64 timespec64_trunc(struct timespec64 t, unsigned gran);
1483extern struct timespec64 current_time(struct inode *inode);
1484
1485
1486
1487
1488
1489void __sb_end_write(struct super_block *sb, int level);
1490int __sb_start_write(struct super_block *sb, int level, bool wait);
1491
1492#define __sb_writers_acquired(sb, lev) \
1493 percpu_rwsem_acquire(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_)
1494#define __sb_writers_release(sb, lev) \
1495 percpu_rwsem_release(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_)
1496
1497
1498
1499
1500
1501
1502
1503
1504static inline void sb_end_write(struct super_block *sb)
1505{
1506 __sb_end_write(sb, SB_FREEZE_WRITE);
1507}
1508
1509
1510
1511
1512
1513
1514
1515
1516static inline void sb_end_pagefault(struct super_block *sb)
1517{
1518 __sb_end_write(sb, SB_FREEZE_PAGEFAULT);
1519}
1520
1521
1522
1523
1524
1525
1526
1527
1528static inline void sb_end_intwrite(struct super_block *sb)
1529{
1530 __sb_end_write(sb, SB_FREEZE_FS);
1531}
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552static inline void sb_start_write(struct super_block *sb)
1553{
1554 __sb_start_write(sb, SB_FREEZE_WRITE, true);
1555}
1556
1557static inline int sb_start_write_trylock(struct super_block *sb)
1558{
1559 return __sb_start_write(sb, SB_FREEZE_WRITE, false);
1560}
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581static inline void sb_start_pagefault(struct super_block *sb)
1582{
1583 __sb_start_write(sb, SB_FREEZE_PAGEFAULT, true);
1584}
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599static inline void sb_start_intwrite(struct super_block *sb)
1600{
1601 __sb_start_write(sb, SB_FREEZE_FS, true);
1602}
1603
1604static inline int sb_start_intwrite_trylock(struct super_block *sb)
1605{
1606 return __sb_start_write(sb, SB_FREEZE_FS, false);
1607}
1608
1609
1610extern bool inode_owner_or_capable(const struct inode *inode);
1611
1612
1613
1614
1615extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
1616extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
1617extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
1618extern int vfs_symlink(struct inode *, struct dentry *, const char *);
1619extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
1620extern int vfs_rmdir(struct inode *, struct dentry *);
1621extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
1622extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
1623extern int vfs_whiteout(struct inode *, struct dentry *);
1624
1625extern struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode,
1626 int open_flag);
1627
1628int vfs_mkobj(struct dentry *, umode_t,
1629 int (*f)(struct dentry *, umode_t, void *),
1630 void *);
1631
1632
1633
1634
1635extern void inode_init_owner(struct inode *inode, const struct inode *dir,
1636 umode_t mode);
1637extern bool may_open_dev(const struct path *path);
1638
1639
1640
1641struct fiemap_extent_info {
1642 unsigned int fi_flags;
1643 unsigned int fi_extents_mapped;
1644 unsigned int fi_extents_max;
1645 struct fiemap_extent __user *fi_extents_start;
1646
1647};
1648int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
1649 u64 phys, u64 len, u32 flags);
1650int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
1651
1652
1653
1654
1655
1656
1657
1658#define DT_UNKNOWN 0
1659#define DT_FIFO 1
1660#define DT_CHR 2
1661#define DT_DIR 4
1662#define DT_BLK 6
1663#define DT_REG 8
1664#define DT_LNK 10
1665#define DT_SOCK 12
1666#define DT_WHT 14
1667
1668
1669
1670
1671
1672
1673
1674struct dir_context;
1675typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64,
1676 unsigned);
1677
1678struct dir_context {
1679 filldir_t actor;
1680 loff_t pos;
1681};
1682
1683struct block_device_operations;
1684
1685
1686
1687
1688#define HAVE_COMPAT_IOCTL 1
1689#define HAVE_UNLOCKED_IOCTL 1
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701#define NOMMU_MAP_COPY 0x00000001
1702#define NOMMU_MAP_DIRECT 0x00000008
1703#define NOMMU_MAP_READ VM_MAYREAD
1704#define NOMMU_MAP_WRITE VM_MAYWRITE
1705#define NOMMU_MAP_EXEC VM_MAYEXEC
1706
1707#define NOMMU_VMFLAGS \
1708 (NOMMU_MAP_READ | NOMMU_MAP_WRITE | NOMMU_MAP_EXEC)
1709
1710
1711struct iov_iter;
1712
1713struct file_operations {
1714 struct module *owner;
1715 loff_t (*llseek) (struct file *, loff_t, int);
1716 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1717 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1718 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
1719 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
1720 int (*iterate) (struct file *, struct dir_context *);
1721 int (*iterate_shared) (struct file *, struct dir_context *);
1722 __poll_t (*poll) (struct file *, struct poll_table_struct *);
1723 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1724 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1725 int (*mmap) (struct file *, struct vm_area_struct *);
1726 unsigned long mmap_supported_flags;
1727 int (*open) (struct inode *, struct file *);
1728 int (*flush) (struct file *, fl_owner_t id);
1729 int (*release) (struct inode *, struct file *);
1730 int (*fsync) (struct file *, loff_t, loff_t, int datasync);
1731 int (*fasync) (int, struct file *, int);
1732 int (*lock) (struct file *, int, struct file_lock *);
1733 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1734 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1735 int (*check_flags)(int);
1736 int (*flock) (struct file *, int, struct file_lock *);
1737 ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
1738 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
1739 int (*setlease)(struct file *, long, struct file_lock **, void **);
1740 long (*fallocate)(struct file *file, int mode, loff_t offset,
1741 loff_t len);
1742 void (*show_fdinfo)(struct seq_file *m, struct file *f);
1743#ifndef CONFIG_MMU
1744 unsigned (*mmap_capabilities)(struct file *);
1745#endif
1746 ssize_t (*copy_file_range)(struct file *, loff_t, struct file *,
1747 loff_t, size_t, unsigned int);
1748 int (*clone_file_range)(struct file *, loff_t, struct file *, loff_t,
1749 u64);
1750 ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *,
1751 u64);
1752} __randomize_layout;
1753
1754struct inode_operations {
1755 struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
1756 const char * (*get_link) (struct dentry *, struct inode *, struct delayed_call *);
1757 int (*permission) (struct inode *, int);
1758 struct posix_acl * (*get_acl)(struct inode *, int);
1759
1760 int (*readlink) (struct dentry *, char __user *,int);
1761
1762 int (*create) (struct inode *,struct dentry *, umode_t, bool);
1763 int (*link) (struct dentry *,struct inode *,struct dentry *);
1764 int (*unlink) (struct inode *,struct dentry *);
1765 int (*symlink) (struct inode *,struct dentry *,const char *);
1766 int (*mkdir) (struct inode *,struct dentry *,umode_t);
1767 int (*rmdir) (struct inode *,struct dentry *);
1768 int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
1769 int (*rename) (struct inode *, struct dentry *,
1770 struct inode *, struct dentry *, unsigned int);
1771 int (*setattr) (struct dentry *, struct iattr *);
1772 int (*getattr) (const struct path *, struct kstat *, u32, unsigned int);
1773 ssize_t (*listxattr) (struct dentry *, char *, size_t);
1774 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
1775 u64 len);
1776 int (*update_time)(struct inode *, struct timespec64 *, int);
1777 int (*atomic_open)(struct inode *, struct dentry *,
1778 struct file *, unsigned open_flag,
1779 umode_t create_mode, int *opened);
1780 int (*tmpfile) (struct inode *, struct dentry *, umode_t);
1781 int (*set_acl)(struct inode *, struct posix_acl *, int);
1782} ____cacheline_aligned;
1783
1784static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio,
1785 struct iov_iter *iter)
1786{
1787 return file->f_op->read_iter(kio, iter);
1788}
1789
1790static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio,
1791 struct iov_iter *iter)
1792{
1793 return file->f_op->write_iter(kio, iter);
1794}
1795
1796static inline int call_mmap(struct file *file, struct vm_area_struct *vma)
1797{
1798 return file->f_op->mmap(file, vma);
1799}
1800
1801ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
1802 unsigned long nr_segs, unsigned long fast_segs,
1803 struct iovec *fast_pointer,
1804 struct iovec **ret_pointer);
1805
1806extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
1807extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
1808extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
1809extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
1810 unsigned long, loff_t *, rwf_t);
1811extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *,
1812 loff_t, size_t, unsigned int);
1813extern int vfs_clone_file_prep_inodes(struct inode *inode_in, loff_t pos_in,
1814 struct inode *inode_out, loff_t pos_out,
1815 u64 *len, bool is_dedupe);
1816extern int vfs_clone_file_range(struct file *file_in, loff_t pos_in,
1817 struct file *file_out, loff_t pos_out, u64 len);
1818extern int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
1819 struct inode *dest, loff_t destoff,
1820 loff_t len, bool *is_same);
1821extern int vfs_dedupe_file_range(struct file *file,
1822 struct file_dedupe_range *same);
1823
1824struct super_operations {
1825 struct inode *(*alloc_inode)(struct super_block *sb);
1826 void (*destroy_inode)(struct inode *);
1827
1828 void (*dirty_inode) (struct inode *, int flags);
1829 int (*write_inode) (struct inode *, struct writeback_control *wbc);
1830 int (*drop_inode) (struct inode *);
1831 void (*evict_inode) (struct inode *);
1832 void (*put_super) (struct super_block *);
1833 int (*sync_fs)(struct super_block *sb, int wait);
1834 int (*freeze_super) (struct super_block *);
1835 int (*freeze_fs) (struct super_block *);
1836 int (*thaw_super) (struct super_block *);
1837 int (*unfreeze_fs) (struct super_block *);
1838 int (*statfs) (struct dentry *, struct kstatfs *);
1839 int (*remount_fs) (struct super_block *, int *, char *);
1840 void (*umount_begin) (struct super_block *);
1841
1842 int (*show_options)(struct seq_file *, struct dentry *);
1843 int (*show_devname)(struct seq_file *, struct dentry *);
1844 int (*show_path)(struct seq_file *, struct dentry *);
1845 int (*show_stats)(struct seq_file *, struct dentry *);
1846#ifdef CONFIG_QUOTA
1847 ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
1848 ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
1849 struct dquot **(*get_dquots)(struct inode *);
1850#endif
1851 int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
1852 long (*nr_cached_objects)(struct super_block *,
1853 struct shrink_control *);
1854 long (*free_cached_objects)(struct super_block *,
1855 struct shrink_control *);
1856};
1857
1858
1859
1860
1861#define S_SYNC 1
1862#define S_NOATIME 2
1863#define S_APPEND 4
1864#define S_IMMUTABLE 8
1865#define S_DEAD 16
1866#define S_NOQUOTA 32
1867#define S_DIRSYNC 64
1868#define S_NOCMTIME 128
1869#define S_SWAPFILE 256
1870#define S_PRIVATE 512
1871#define S_IMA 1024
1872#define S_AUTOMOUNT 2048
1873#define S_NOSEC 4096
1874#ifdef CONFIG_FS_DAX
1875#define S_DAX 8192
1876#else
1877#define S_DAX 0
1878#endif
1879#define S_ENCRYPTED 16384
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894#define __IS_FLG(inode, flg) ((inode)->i_sb->s_flags & (flg))
1895
1896static inline bool sb_rdonly(const struct super_block *sb) { return sb->s_flags & SB_RDONLY; }
1897#define IS_RDONLY(inode) sb_rdonly((inode)->i_sb)
1898#define IS_SYNC(inode) (__IS_FLG(inode, SB_SYNCHRONOUS) || \
1899 ((inode)->i_flags & S_SYNC))
1900#define IS_DIRSYNC(inode) (__IS_FLG(inode, SB_SYNCHRONOUS|SB_DIRSYNC) || \
1901 ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
1902#define IS_MANDLOCK(inode) __IS_FLG(inode, SB_MANDLOCK)
1903#define IS_NOATIME(inode) __IS_FLG(inode, SB_RDONLY|SB_NOATIME)
1904#define IS_I_VERSION(inode) __IS_FLG(inode, SB_I_VERSION)
1905
1906#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
1907#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
1908#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
1909#define IS_POSIXACL(inode) __IS_FLG(inode, SB_POSIXACL)
1910
1911#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
1912#define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
1913#define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE)
1914#define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
1915#define IS_IMA(inode) ((inode)->i_flags & S_IMA)
1916#define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
1917#define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC)
1918#define IS_DAX(inode) ((inode)->i_flags & S_DAX)
1919#define IS_ENCRYPTED(inode) ((inode)->i_flags & S_ENCRYPTED)
1920
1921#define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \
1922 (inode)->i_rdev == WHITEOUT_DEV)
1923
1924static inline bool HAS_UNMAPPED_ID(struct inode *inode)
1925{
1926 return !uid_valid(inode->i_uid) || !gid_valid(inode->i_gid);
1927}
1928
1929static inline enum rw_hint file_write_hint(struct file *file)
1930{
1931 if (file->f_write_hint != WRITE_LIFE_NOT_SET)
1932 return file->f_write_hint;
1933
1934 return file_inode(file)->i_write_hint;
1935}
1936
1937static inline int iocb_flags(struct file *file);
1938
1939static inline u16 ki_hint_validate(enum rw_hint hint)
1940{
1941 typeof(((struct kiocb *)0)->ki_hint) max_hint = -1;
1942
1943 if (hint <= max_hint)
1944 return hint;
1945 return 0;
1946}
1947
1948static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
1949{
1950 *kiocb = (struct kiocb) {
1951 .ki_filp = filp,
1952 .ki_flags = iocb_flags(filp),
1953 .ki_hint = ki_hint_validate(file_write_hint(filp)),
1954 .ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0),
1955 };
1956}
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019#define I_DIRTY_SYNC (1 << 0)
2020#define I_DIRTY_DATASYNC (1 << 1)
2021#define I_DIRTY_PAGES (1 << 2)
2022#define __I_NEW 3
2023#define I_NEW (1 << __I_NEW)
2024#define I_WILL_FREE (1 << 4)
2025#define I_FREEING (1 << 5)
2026#define I_CLEAR (1 << 6)
2027#define __I_SYNC 7
2028#define I_SYNC (1 << __I_SYNC)
2029#define I_REFERENCED (1 << 8)
2030#define __I_DIO_WAKEUP 9
2031#define I_DIO_WAKEUP (1 << __I_DIO_WAKEUP)
2032#define I_LINKABLE (1 << 10)
2033#define I_DIRTY_TIME (1 << 11)
2034#define __I_DIRTY_TIME_EXPIRED 12
2035#define I_DIRTY_TIME_EXPIRED (1 << __I_DIRTY_TIME_EXPIRED)
2036#define I_WB_SWITCH (1 << 13)
2037#define I_OVL_INUSE (1 << 14)
2038
2039#define I_DIRTY_INODE (I_DIRTY_SYNC | I_DIRTY_DATASYNC)
2040#define I_DIRTY (I_DIRTY_INODE | I_DIRTY_PAGES)
2041#define I_DIRTY_ALL (I_DIRTY | I_DIRTY_TIME)
2042
2043extern void __mark_inode_dirty(struct inode *, int);
2044static inline void mark_inode_dirty(struct inode *inode)
2045{
2046 __mark_inode_dirty(inode, I_DIRTY);
2047}
2048
2049static inline void mark_inode_dirty_sync(struct inode *inode)
2050{
2051 __mark_inode_dirty(inode, I_DIRTY_SYNC);
2052}
2053
2054extern void inc_nlink(struct inode *inode);
2055extern void drop_nlink(struct inode *inode);
2056extern void clear_nlink(struct inode *inode);
2057extern void set_nlink(struct inode *inode, unsigned int nlink);
2058
2059static inline void inode_inc_link_count(struct inode *inode)
2060{
2061 inc_nlink(inode);
2062 mark_inode_dirty(inode);
2063}
2064
2065static inline void inode_dec_link_count(struct inode *inode)
2066{
2067 drop_nlink(inode);
2068 mark_inode_dirty(inode);
2069}
2070
2071enum file_time_flags {
2072 S_ATIME = 1,
2073 S_MTIME = 2,
2074 S_CTIME = 4,
2075 S_VERSION = 8,
2076};
2077
2078extern void touch_atime(const struct path *);
2079static inline void file_accessed(struct file *file)
2080{
2081 if (!(file->f_flags & O_NOATIME))
2082 touch_atime(&file->f_path);
2083}
2084
2085int sync_inode(struct inode *inode, struct writeback_control *wbc);
2086int sync_inode_metadata(struct inode *inode, int wait);
2087
2088struct file_system_type {
2089 const char *name;
2090 int fs_flags;
2091#define FS_REQUIRES_DEV 1
2092#define FS_BINARY_MOUNTDATA 2
2093#define FS_HAS_SUBTYPE 4
2094#define FS_USERNS_MOUNT 8
2095#define FS_RENAME_DOES_D_MOVE 32768
2096 struct dentry *(*mount) (struct file_system_type *, int,
2097 const char *, void *);
2098 void (*kill_sb) (struct super_block *);
2099 struct module *owner;
2100 struct file_system_type * next;
2101 struct hlist_head fs_supers;
2102
2103 struct lock_class_key s_lock_key;
2104 struct lock_class_key s_umount_key;
2105 struct lock_class_key s_vfs_rename_key;
2106 struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
2107
2108 struct lock_class_key i_lock_key;
2109 struct lock_class_key i_mutex_key;
2110 struct lock_class_key i_mutex_dir_key;
2111};
2112
2113#define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME)
2114
2115extern struct dentry *mount_ns(struct file_system_type *fs_type,
2116 int flags, void *data, void *ns, struct user_namespace *user_ns,
2117 int (*fill_super)(struct super_block *, void *, int));
2118#ifdef CONFIG_BLOCK
2119extern struct dentry *mount_bdev(struct file_system_type *fs_type,
2120 int flags, const char *dev_name, void *data,
2121 int (*fill_super)(struct super_block *, void *, int));
2122#else
2123static inline struct dentry *mount_bdev(struct file_system_type *fs_type,
2124 int flags, const char *dev_name, void *data,
2125 int (*fill_super)(struct super_block *, void *, int))
2126{
2127 return ERR_PTR(-ENODEV);
2128}
2129#endif
2130extern struct dentry *mount_single(struct file_system_type *fs_type,
2131 int flags, void *data,
2132 int (*fill_super)(struct super_block *, void *, int));
2133extern struct dentry *mount_nodev(struct file_system_type *fs_type,
2134 int flags, void *data,
2135 int (*fill_super)(struct super_block *, void *, int));
2136extern struct dentry *mount_subtree(struct vfsmount *mnt, const char *path);
2137void generic_shutdown_super(struct super_block *sb);
2138#ifdef CONFIG_BLOCK
2139void kill_block_super(struct super_block *sb);
2140#else
2141static inline void kill_block_super(struct super_block *sb)
2142{
2143 BUG();
2144}
2145#endif
2146void kill_anon_super(struct super_block *sb);
2147void kill_litter_super(struct super_block *sb);
2148void deactivate_super(struct super_block *sb);
2149void deactivate_locked_super(struct super_block *sb);
2150int set_anon_super(struct super_block *s, void *data);
2151int get_anon_bdev(dev_t *);
2152void free_anon_bdev(dev_t);
2153struct super_block *sget_userns(struct file_system_type *type,
2154 int (*test)(struct super_block *,void *),
2155 int (*set)(struct super_block *,void *),
2156 int flags, struct user_namespace *user_ns,
2157 void *data);
2158struct super_block *sget(struct file_system_type *type,
2159 int (*test)(struct super_block *,void *),
2160 int (*set)(struct super_block *,void *),
2161 int flags, void *data);
2162extern struct dentry *mount_pseudo_xattr(struct file_system_type *, char *,
2163 const struct super_operations *ops,
2164 const struct xattr_handler **xattr,
2165 const struct dentry_operations *dops,
2166 unsigned long);
2167
2168static inline struct dentry *
2169mount_pseudo(struct file_system_type *fs_type, char *name,
2170 const struct super_operations *ops,
2171 const struct dentry_operations *dops, unsigned long magic)
2172{
2173 return mount_pseudo_xattr(fs_type, name, ops, NULL, dops, magic);
2174}
2175
2176
2177#define fops_get(fops) \
2178 (((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
2179#define fops_put(fops) \
2180 do { if (fops) module_put((fops)->owner); } while(0)
2181
2182
2183
2184
2185
2186#define replace_fops(f, fops) \
2187 do { \
2188 struct file *__file = (f); \
2189 fops_put(__file->f_op); \
2190 BUG_ON(!(__file->f_op = (fops))); \
2191 } while(0)
2192
2193extern int register_filesystem(struct file_system_type *);
2194extern int unregister_filesystem(struct file_system_type *);
2195extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data);
2196#define kern_mount(type) kern_mount_data(type, NULL)
2197extern void kern_unmount(struct vfsmount *mnt);
2198extern int may_umount_tree(struct vfsmount *);
2199extern int may_umount(struct vfsmount *);
2200extern long do_mount(const char *, const char __user *,
2201 const char *, unsigned long, void *);
2202extern struct vfsmount *collect_mounts(const struct path *);
2203extern void drop_collected_mounts(struct vfsmount *);
2204extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
2205 struct vfsmount *);
2206extern int vfs_statfs(const struct path *, struct kstatfs *);
2207extern int user_statfs(const char __user *, struct kstatfs *);
2208extern int fd_statfs(int, struct kstatfs *);
2209extern int freeze_super(struct super_block *super);
2210extern int thaw_super(struct super_block *super);
2211extern bool our_mnt(struct vfsmount *mnt);
2212extern __printf(2, 3)
2213int super_setup_bdi_name(struct super_block *sb, char *fmt, ...);
2214extern int super_setup_bdi(struct super_block *sb);
2215
2216extern int current_umask(void);
2217
2218extern void ihold(struct inode * inode);
2219extern void iput(struct inode *);
2220extern int generic_update_time(struct inode *, struct timespec64 *, int);
2221
2222
2223extern struct kobject *fs_kobj;
2224
2225#define MAX_RW_COUNT (INT_MAX & PAGE_MASK)
2226
2227#ifdef CONFIG_MANDATORY_FILE_LOCKING
2228extern int locks_mandatory_locked(struct file *);
2229extern int locks_mandatory_area(struct inode *, struct file *, loff_t, loff_t, unsigned char);
2230
2231
2232
2233
2234
2235
2236static inline int __mandatory_lock(struct inode *ino)
2237{
2238 return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID;
2239}
2240
2241
2242
2243
2244
2245
2246static inline int mandatory_lock(struct inode *ino)
2247{
2248 return IS_MANDLOCK(ino) && __mandatory_lock(ino);
2249}
2250
2251static inline int locks_verify_locked(struct file *file)
2252{
2253 if (mandatory_lock(locks_inode(file)))
2254 return locks_mandatory_locked(file);
2255 return 0;
2256}
2257
2258static inline int locks_verify_truncate(struct inode *inode,
2259 struct file *f,
2260 loff_t size)
2261{
2262 if (!inode->i_flctx || !mandatory_lock(inode))
2263 return 0;
2264
2265 if (size < inode->i_size) {
2266 return locks_mandatory_area(inode, f, size, inode->i_size - 1,
2267 F_WRLCK);
2268 } else {
2269 return locks_mandatory_area(inode, f, inode->i_size, size - 1,
2270 F_WRLCK);
2271 }
2272}
2273
2274#else
2275
2276static inline int locks_mandatory_locked(struct file *file)
2277{
2278 return 0;
2279}
2280
2281static inline int locks_mandatory_area(struct inode *inode, struct file *filp,
2282 loff_t start, loff_t end, unsigned char type)
2283{
2284 return 0;
2285}
2286
2287static inline int __mandatory_lock(struct inode *inode)
2288{
2289 return 0;
2290}
2291
2292static inline int mandatory_lock(struct inode *inode)
2293{
2294 return 0;
2295}
2296
2297static inline int locks_verify_locked(struct file *file)
2298{
2299 return 0;
2300}
2301
2302static inline int locks_verify_truncate(struct inode *inode, struct file *filp,
2303 size_t size)
2304{
2305 return 0;
2306}
2307
2308#endif
2309
2310
2311#ifdef CONFIG_FILE_LOCKING
2312static inline int break_lease(struct inode *inode, unsigned int mode)
2313{
2314
2315
2316
2317
2318
2319
2320 smp_mb();
2321 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2322 return __break_lease(inode, mode, FL_LEASE);
2323 return 0;
2324}
2325
2326static inline int break_deleg(struct inode *inode, unsigned int mode)
2327{
2328
2329
2330
2331
2332
2333
2334 smp_mb();
2335 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2336 return __break_lease(inode, mode, FL_DELEG);
2337 return 0;
2338}
2339
2340static inline int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
2341{
2342 int ret;
2343
2344 ret = break_deleg(inode, O_WRONLY|O_NONBLOCK);
2345 if (ret == -EWOULDBLOCK && delegated_inode) {
2346 *delegated_inode = inode;
2347 ihold(inode);
2348 }
2349 return ret;
2350}
2351
2352static inline int break_deleg_wait(struct inode **delegated_inode)
2353{
2354 int ret;
2355
2356 ret = break_deleg(*delegated_inode, O_WRONLY);
2357 iput(*delegated_inode);
2358 *delegated_inode = NULL;
2359 return ret;
2360}
2361
2362static inline int break_layout(struct inode *inode, bool wait)
2363{
2364 smp_mb();
2365 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2366 return __break_lease(inode,
2367 wait ? O_WRONLY : O_WRONLY | O_NONBLOCK,
2368 FL_LAYOUT);
2369 return 0;
2370}
2371
2372#else
2373static inline int break_lease(struct inode *inode, unsigned int mode)
2374{
2375 return 0;
2376}
2377
2378static inline int break_deleg(struct inode *inode, unsigned int mode)
2379{
2380 return 0;
2381}
2382
2383static inline int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
2384{
2385 return 0;
2386}
2387
2388static inline int break_deleg_wait(struct inode **delegated_inode)
2389{
2390 BUG();
2391 return 0;
2392}
2393
2394static inline int break_layout(struct inode *inode, bool wait)
2395{
2396 return 0;
2397}
2398
2399#endif
2400
2401
2402struct audit_names;
2403struct filename {
2404 const char *name;
2405 const __user char *uptr;
2406 int refcnt;
2407 struct audit_names *aname;
2408 const char iname[];
2409};
2410
2411extern long vfs_truncate(const struct path *, loff_t);
2412extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
2413 struct file *filp);
2414extern int vfs_fallocate(struct file *file, int mode, loff_t offset,
2415 loff_t len);
2416extern long do_sys_open(int dfd, const char __user *filename, int flags,
2417 umode_t mode);
2418extern struct file *file_open_name(struct filename *, int, umode_t);
2419extern struct file *filp_open(const char *, int, umode_t);
2420extern struct file *file_open_root(struct dentry *, struct vfsmount *,
2421 const char *, int, umode_t);
2422extern struct file * dentry_open(const struct path *, int, const struct cred *);
2423extern struct file *filp_clone_open(struct file *);
2424extern int filp_close(struct file *, fl_owner_t id);
2425
2426extern struct filename *getname_flags(const char __user *, int, int *);
2427extern struct filename *getname(const char __user *);
2428extern struct filename *getname_kernel(const char *);
2429extern void putname(struct filename *name);
2430
2431enum {
2432 FILE_CREATED = 1,
2433 FILE_OPENED = 2
2434};
2435extern int finish_open(struct file *file, struct dentry *dentry,
2436 int (*open)(struct inode *, struct file *),
2437 int *opened);
2438extern int finish_no_open(struct file *file, struct dentry *dentry);
2439
2440
2441
2442extern int ioctl_preallocate(struct file *filp, void __user *argp);
2443
2444
2445extern void __init vfs_caches_init_early(void);
2446extern void __init vfs_caches_init(void);
2447
2448extern struct kmem_cache *names_cachep;
2449
2450#define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL)
2451#define __putname(name) kmem_cache_free(names_cachep, (void *)(name))
2452
2453#ifdef CONFIG_BLOCK
2454extern int register_blkdev(unsigned int, const char *);
2455extern void unregister_blkdev(unsigned int, const char *);
2456extern void bdev_unhash_inode(dev_t dev);
2457extern struct block_device *bdget(dev_t);
2458extern struct block_device *bdgrab(struct block_device *bdev);
2459extern void bd_set_size(struct block_device *, loff_t size);
2460extern void bd_forget(struct inode *inode);
2461extern void bdput(struct block_device *);
2462extern void invalidate_bdev(struct block_device *);
2463extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
2464extern int sync_blockdev(struct block_device *bdev);
2465extern void kill_bdev(struct block_device *);
2466extern struct super_block *freeze_bdev(struct block_device *);
2467extern void emergency_thaw_all(void);
2468extern void emergency_thaw_bdev(struct super_block *sb);
2469extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
2470extern int fsync_bdev(struct block_device *);
2471
2472extern struct super_block *blockdev_superblock;
2473
2474static inline bool sb_is_blkdev_sb(struct super_block *sb)
2475{
2476 return sb == blockdev_superblock;
2477}
2478#else
2479static inline void bd_forget(struct inode *inode) {}
2480static inline int sync_blockdev(struct block_device *bdev) { return 0; }
2481static inline void kill_bdev(struct block_device *bdev) {}
2482static inline void invalidate_bdev(struct block_device *bdev) {}
2483
2484static inline struct super_block *freeze_bdev(struct block_device *sb)
2485{
2486 return NULL;
2487}
2488
2489static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)
2490{
2491 return 0;
2492}
2493
2494static inline int emergency_thaw_bdev(struct super_block *sb)
2495{
2496 return 0;
2497}
2498
2499static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg)
2500{
2501}
2502
2503static inline bool sb_is_blkdev_sb(struct super_block *sb)
2504{
2505 return false;
2506}
2507#endif
2508extern int sync_filesystem(struct super_block *);
2509extern const struct file_operations def_blk_fops;
2510extern const struct file_operations def_chr_fops;
2511#ifdef CONFIG_BLOCK
2512extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
2513extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long);
2514extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
2515extern int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder);
2516extern struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
2517 void *holder);
2518extern struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode,
2519 void *holder);
2520extern void blkdev_put(struct block_device *bdev, fmode_t mode);
2521extern int __blkdev_reread_part(struct block_device *bdev);
2522extern int blkdev_reread_part(struct block_device *bdev);
2523
2524#ifdef CONFIG_SYSFS
2525extern int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk);
2526extern void bd_unlink_disk_holder(struct block_device *bdev,
2527 struct gendisk *disk);
2528#else
2529static inline int bd_link_disk_holder(struct block_device *bdev,
2530 struct gendisk *disk)
2531{
2532 return 0;
2533}
2534static inline void bd_unlink_disk_holder(struct block_device *bdev,
2535 struct gendisk *disk)
2536{
2537}
2538#endif
2539#endif
2540
2541
2542#define CHRDEV_MAJOR_MAX 512
2543
2544#define CHRDEV_MAJOR_DYN_END 234
2545
2546#define CHRDEV_MAJOR_DYN_EXT_START 511
2547#define CHRDEV_MAJOR_DYN_EXT_END 384
2548
2549extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
2550extern int register_chrdev_region(dev_t, unsigned, const char *);
2551extern int __register_chrdev(unsigned int major, unsigned int baseminor,
2552 unsigned int count, const char *name,
2553 const struct file_operations *fops);
2554extern void __unregister_chrdev(unsigned int major, unsigned int baseminor,
2555 unsigned int count, const char *name);
2556extern void unregister_chrdev_region(dev_t, unsigned);
2557extern void chrdev_show(struct seq_file *,off_t);
2558
2559static inline int register_chrdev(unsigned int major, const char *name,
2560 const struct file_operations *fops)
2561{
2562 return __register_chrdev(major, 0, 256, name, fops);
2563}
2564
2565static inline void unregister_chrdev(unsigned int major, const char *name)
2566{
2567 __unregister_chrdev(major, 0, 256, name);
2568}
2569
2570
2571#define BDEVNAME_SIZE 32
2572#define BDEVT_SIZE 10
2573
2574#ifdef CONFIG_BLOCK
2575#define BLKDEV_MAJOR_MAX 512
2576extern const char *__bdevname(dev_t, char *buffer);
2577extern const char *bdevname(struct block_device *bdev, char *buffer);
2578extern struct block_device *lookup_bdev(const char *);
2579extern void blkdev_show(struct seq_file *,off_t);
2580
2581#else
2582#define BLKDEV_MAJOR_MAX 0
2583#endif
2584
2585extern void init_special_inode(struct inode *, umode_t, dev_t);
2586
2587
2588extern void make_bad_inode(struct inode *);
2589extern bool is_bad_inode(struct inode *);
2590
2591#ifdef CONFIG_BLOCK
2592extern void check_disk_size_change(struct gendisk *disk,
2593 struct block_device *bdev, bool verbose);
2594extern int revalidate_disk(struct gendisk *);
2595extern int check_disk_change(struct block_device *);
2596extern int __invalidate_device(struct block_device *, bool);
2597extern int invalidate_partition(struct gendisk *, int);
2598#endif
2599unsigned long invalidate_mapping_pages(struct address_space *mapping,
2600 pgoff_t start, pgoff_t end);
2601
2602static inline void invalidate_remote_inode(struct inode *inode)
2603{
2604 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
2605 S_ISLNK(inode->i_mode))
2606 invalidate_mapping_pages(inode->i_mapping, 0, -1);
2607}
2608extern int invalidate_inode_pages2(struct address_space *mapping);
2609extern int invalidate_inode_pages2_range(struct address_space *mapping,
2610 pgoff_t start, pgoff_t end);
2611extern int write_inode_now(struct inode *, int);
2612extern int filemap_fdatawrite(struct address_space *);
2613extern int filemap_flush(struct address_space *);
2614extern int filemap_fdatawait_keep_errors(struct address_space *mapping);
2615extern int filemap_fdatawait_range(struct address_space *, loff_t lstart,
2616 loff_t lend);
2617
2618static inline int filemap_fdatawait(struct address_space *mapping)
2619{
2620 return filemap_fdatawait_range(mapping, 0, LLONG_MAX);
2621}
2622
2623extern bool filemap_range_has_page(struct address_space *, loff_t lstart,
2624 loff_t lend);
2625extern int __must_check file_fdatawait_range(struct file *file, loff_t lstart,
2626 loff_t lend);
2627extern int filemap_write_and_wait(struct address_space *mapping);
2628extern int filemap_write_and_wait_range(struct address_space *mapping,
2629 loff_t lstart, loff_t lend);
2630extern int __filemap_fdatawrite_range(struct address_space *mapping,
2631 loff_t start, loff_t end, int sync_mode);
2632extern int filemap_fdatawrite_range(struct address_space *mapping,
2633 loff_t start, loff_t end);
2634extern int filemap_check_errors(struct address_space *mapping);
2635extern void __filemap_set_wb_err(struct address_space *mapping, int err);
2636
2637extern int __must_check file_fdatawait_range(struct file *file, loff_t lstart,
2638 loff_t lend);
2639extern int __must_check file_check_and_advance_wb_err(struct file *file);
2640extern int __must_check file_write_and_wait_range(struct file *file,
2641 loff_t start, loff_t end);
2642
2643static inline int file_write_and_wait(struct file *file)
2644{
2645 return file_write_and_wait_range(file, 0, LLONG_MAX);
2646}
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662static inline void filemap_set_wb_err(struct address_space *mapping, int err)
2663{
2664
2665 if (unlikely(err))
2666 __filemap_set_wb_err(mapping, err);
2667}
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679static inline int filemap_check_wb_err(struct address_space *mapping,
2680 errseq_t since)
2681{
2682 return errseq_check(&mapping->wb_err, since);
2683}
2684
2685
2686
2687
2688
2689
2690
2691
2692static inline errseq_t filemap_sample_wb_err(struct address_space *mapping)
2693{
2694 return errseq_sample(&mapping->wb_err);
2695}
2696
2697extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
2698 int datasync);
2699extern int vfs_fsync(struct file *file, int datasync);
2700
2701
2702
2703
2704
2705
2706static inline ssize_t generic_write_sync(struct kiocb *iocb, ssize_t count)
2707{
2708 if (iocb->ki_flags & IOCB_DSYNC) {
2709 int ret = vfs_fsync_range(iocb->ki_filp,
2710 iocb->ki_pos - count, iocb->ki_pos - 1,
2711 (iocb->ki_flags & IOCB_SYNC) ? 0 : 1);
2712 if (ret)
2713 return ret;
2714 }
2715
2716 return count;
2717}
2718
2719extern void emergency_sync(void);
2720extern void emergency_remount(void);
2721#ifdef CONFIG_BLOCK
2722extern sector_t bmap(struct inode *, sector_t);
2723#endif
2724extern int notify_change(struct dentry *, struct iattr *, struct inode **);
2725extern int inode_permission(struct inode *, int);
2726extern int generic_permission(struct inode *, int);
2727extern int __check_sticky(struct inode *dir, struct inode *inode);
2728
2729static inline bool execute_ok(struct inode *inode)
2730{
2731 return (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode);
2732}
2733
2734static inline void file_start_write(struct file *file)
2735{
2736 if (!S_ISREG(file_inode(file)->i_mode))
2737 return;
2738 __sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, true);
2739}
2740
2741static inline bool file_start_write_trylock(struct file *file)
2742{
2743 if (!S_ISREG(file_inode(file)->i_mode))
2744 return true;
2745 return __sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, false);
2746}
2747
2748static inline void file_end_write(struct file *file)
2749{
2750 if (!S_ISREG(file_inode(file)->i_mode))
2751 return;
2752 __sb_end_write(file_inode(file)->i_sb, SB_FREEZE_WRITE);
2753}
2754
2755static inline int do_clone_file_range(struct file *file_in, loff_t pos_in,
2756 struct file *file_out, loff_t pos_out,
2757 u64 len)
2758{
2759 int ret;
2760
2761 file_start_write(file_out);
2762 ret = vfs_clone_file_range(file_in, pos_in, file_out, pos_out, len);
2763 file_end_write(file_out);
2764
2765 return ret;
2766}
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784static inline int get_write_access(struct inode *inode)
2785{
2786 return atomic_inc_unless_negative(&inode->i_writecount) ? 0 : -ETXTBSY;
2787}
2788static inline int deny_write_access(struct file *file)
2789{
2790 struct inode *inode = file_inode(file);
2791 return atomic_dec_unless_positive(&inode->i_writecount) ? 0 : -ETXTBSY;
2792}
2793static inline void put_write_access(struct inode * inode)
2794{
2795 atomic_dec(&inode->i_writecount);
2796}
2797static inline void allow_write_access(struct file *file)
2798{
2799 if (file)
2800 atomic_inc(&file_inode(file)->i_writecount);
2801}
2802static inline bool inode_is_open_for_write(const struct inode *inode)
2803{
2804 return atomic_read(&inode->i_writecount) > 0;
2805}
2806
2807#ifdef CONFIG_IMA
2808static inline void i_readcount_dec(struct inode *inode)
2809{
2810 BUG_ON(!atomic_read(&inode->i_readcount));
2811 atomic_dec(&inode->i_readcount);
2812}
2813static inline void i_readcount_inc(struct inode *inode)
2814{
2815 atomic_inc(&inode->i_readcount);
2816}
2817#else
2818static inline void i_readcount_dec(struct inode *inode)
2819{
2820 return;
2821}
2822static inline void i_readcount_inc(struct inode *inode)
2823{
2824 return;
2825}
2826#endif
2827extern int do_pipe_flags(int *, int);
2828
2829#define __kernel_read_file_id(id) \
2830 id(UNKNOWN, unknown) \
2831 id(FIRMWARE, firmware) \
2832 id(FIRMWARE_PREALLOC_BUFFER, firmware) \
2833 id(MODULE, kernel-module) \
2834 id(KEXEC_IMAGE, kexec-image) \
2835 id(KEXEC_INITRAMFS, kexec-initramfs) \
2836 id(POLICY, security-policy) \
2837 id(X509_CERTIFICATE, x509-certificate) \
2838 id(MAX_ID, )
2839
2840#define __fid_enumify(ENUM, dummy) READING_ ## ENUM,
2841#define __fid_stringify(dummy, str) #str,
2842
2843enum kernel_read_file_id {
2844 __kernel_read_file_id(__fid_enumify)
2845};
2846
2847static const char * const kernel_read_file_str[] = {
2848 __kernel_read_file_id(__fid_stringify)
2849};
2850
2851static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id)
2852{
2853 if ((unsigned)id >= READING_MAX_ID)
2854 return kernel_read_file_str[READING_UNKNOWN];
2855
2856 return kernel_read_file_str[id];
2857}
2858
2859extern int kernel_read_file(struct file *, void **, loff_t *, loff_t,
2860 enum kernel_read_file_id);
2861extern int kernel_read_file_from_path(const char *, void **, loff_t *, loff_t,
2862 enum kernel_read_file_id);
2863extern int kernel_read_file_from_fd(int, void **, loff_t *, loff_t,
2864 enum kernel_read_file_id);
2865extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *);
2866extern ssize_t kernel_write(struct file *, const void *, size_t, loff_t *);
2867extern ssize_t __kernel_write(struct file *, const void *, size_t, loff_t *);
2868extern struct file * open_exec(const char *);
2869
2870
2871extern bool is_subdir(struct dentry *, struct dentry *);
2872extern bool path_is_under(const struct path *, const struct path *);
2873
2874extern char *file_path(struct file *, char *, int);
2875
2876#include <linux/err.h>
2877
2878
2879extern loff_t default_llseek(struct file *file, loff_t offset, int whence);
2880
2881extern loff_t vfs_llseek(struct file *file, loff_t offset, int whence);
2882
2883extern int inode_init_always(struct super_block *, struct inode *);
2884extern void inode_init_once(struct inode *);
2885extern void address_space_init_once(struct address_space *mapping);
2886extern struct inode * igrab(struct inode *);
2887extern ino_t iunique(struct super_block *, ino_t);
2888extern int inode_needs_sync(struct inode *inode);
2889extern int generic_delete_inode(struct inode *inode);
2890static inline int generic_drop_inode(struct inode *inode)
2891{
2892 return !inode->i_nlink || inode_unhashed(inode);
2893}
2894
2895extern struct inode *ilookup5_nowait(struct super_block *sb,
2896 unsigned long hashval, int (*test)(struct inode *, void *),
2897 void *data);
2898extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
2899 int (*test)(struct inode *, void *), void *data);
2900extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
2901
2902extern struct inode *inode_insert5(struct inode *inode, unsigned long hashval,
2903 int (*test)(struct inode *, void *),
2904 int (*set)(struct inode *, void *),
2905 void *data);
2906extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
2907extern struct inode * iget_locked(struct super_block *, unsigned long);
2908extern struct inode *find_inode_nowait(struct super_block *,
2909 unsigned long,
2910 int (*match)(struct inode *,
2911 unsigned long, void *),
2912 void *data);
2913extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
2914extern int insert_inode_locked(struct inode *);
2915#ifdef CONFIG_DEBUG_LOCK_ALLOC
2916extern void lockdep_annotate_inode_mutex_key(struct inode *inode);
2917#else
2918static inline void lockdep_annotate_inode_mutex_key(struct inode *inode) { };
2919#endif
2920extern void unlock_new_inode(struct inode *);
2921extern unsigned int get_next_ino(void);
2922extern void evict_inodes(struct super_block *sb);
2923
2924extern void __iget(struct inode * inode);
2925extern void iget_failed(struct inode *);
2926extern void clear_inode(struct inode *);
2927extern void __destroy_inode(struct inode *);
2928extern struct inode *new_inode_pseudo(struct super_block *sb);
2929extern struct inode *new_inode(struct super_block *sb);
2930extern void free_inode_nonrcu(struct inode *inode);
2931extern int should_remove_suid(struct dentry *);
2932extern int file_remove_privs(struct file *);
2933
2934extern void __insert_inode_hash(struct inode *, unsigned long hashval);
2935static inline void insert_inode_hash(struct inode *inode)
2936{
2937 __insert_inode_hash(inode, inode->i_ino);
2938}
2939
2940extern void __remove_inode_hash(struct inode *);
2941static inline void remove_inode_hash(struct inode *inode)
2942{
2943 if (!inode_unhashed(inode) && !hlist_fake(&inode->i_hash))
2944 __remove_inode_hash(inode);
2945}
2946
2947extern void inode_sb_list_add(struct inode *inode);
2948
2949#ifdef CONFIG_BLOCK
2950extern int bdev_read_only(struct block_device *);
2951#endif
2952extern int set_blocksize(struct block_device *, int);
2953extern int sb_set_blocksize(struct super_block *, int);
2954extern int sb_min_blocksize(struct super_block *, int);
2955
2956extern int generic_file_mmap(struct file *, struct vm_area_struct *);
2957extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
2958extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *);
2959extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
2960extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
2961extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
2962extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *);
2963extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
2964
2965ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos,
2966 rwf_t flags);
2967ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos,
2968 rwf_t flags);
2969
2970
2971extern ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to);
2972extern ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from);
2973extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end,
2974 int datasync);
2975extern void block_sync_page(struct page *page);
2976
2977
2978extern ssize_t generic_file_splice_read(struct file *, loff_t *,
2979 struct pipe_inode_info *, size_t, unsigned int);
2980extern ssize_t iter_file_splice_write(struct pipe_inode_info *,
2981 struct file *, loff_t *, size_t, unsigned int);
2982extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
2983 struct file *out, loff_t *, size_t len, unsigned int flags);
2984extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
2985 loff_t *opos, size_t len, unsigned int flags);
2986
2987
2988extern void
2989file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
2990extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
2991extern loff_t no_llseek(struct file *file, loff_t offset, int whence);
2992extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
2993extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
2994extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
2995 int whence, loff_t maxsize, loff_t eof);
2996extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
2997 int whence, loff_t size);
2998extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t);
2999extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
3000extern int generic_file_open(struct inode * inode, struct file * filp);
3001extern int nonseekable_open(struct inode * inode, struct file * filp);
3002
3003#ifdef CONFIG_BLOCK
3004typedef void (dio_submit_t)(struct bio *bio, struct inode *inode,
3005 loff_t file_offset);
3006
3007enum {
3008
3009 DIO_LOCKING = 0x01,
3010
3011
3012 DIO_SKIP_HOLES = 0x02,
3013};
3014
3015void dio_end_io(struct bio *bio);
3016void dio_warn_stale_pagecache(struct file *filp);
3017
3018ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
3019 struct block_device *bdev, struct iov_iter *iter,
3020 get_block_t get_block,
3021 dio_iodone_t end_io, dio_submit_t submit_io,
3022 int flags);
3023
3024static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
3025 struct inode *inode,
3026 struct iov_iter *iter,
3027 get_block_t get_block)
3028{
3029 return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
3030 get_block, NULL, NULL, DIO_LOCKING | DIO_SKIP_HOLES);
3031}
3032#endif
3033
3034void inode_dio_wait(struct inode *inode);
3035
3036
3037
3038
3039
3040
3041
3042
3043static inline void inode_dio_begin(struct inode *inode)
3044{
3045 atomic_inc(&inode->i_dio_count);
3046}
3047
3048
3049
3050
3051
3052
3053
3054
3055static inline void inode_dio_end(struct inode *inode)
3056{
3057 if (atomic_dec_and_test(&inode->i_dio_count))
3058 wake_up_bit(&inode->i_state, __I_DIO_WAKEUP);
3059}
3060
3061extern void inode_set_flags(struct inode *inode, unsigned int flags,
3062 unsigned int mask);
3063
3064extern const struct file_operations generic_ro_fops;
3065
3066#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
3067
3068extern int readlink_copy(char __user *, int, const char *);
3069extern int page_readlink(struct dentry *, char __user *, int);
3070extern const char *page_get_link(struct dentry *, struct inode *,
3071 struct delayed_call *);
3072extern void page_put_link(void *);
3073extern int __page_symlink(struct inode *inode, const char *symname, int len,
3074 int nofs);
3075extern int page_symlink(struct inode *inode, const char *symname, int len);
3076extern const struct inode_operations page_symlink_inode_operations;
3077extern void kfree_link(void *);
3078extern void generic_fillattr(struct inode *, struct kstat *);
3079extern int vfs_getattr_nosec(const struct path *, struct kstat *, u32, unsigned int);
3080extern int vfs_getattr(const struct path *, struct kstat *, u32, unsigned int);
3081void __inode_add_bytes(struct inode *inode, loff_t bytes);
3082void inode_add_bytes(struct inode *inode, loff_t bytes);
3083void __inode_sub_bytes(struct inode *inode, loff_t bytes);
3084void inode_sub_bytes(struct inode *inode, loff_t bytes);
3085static inline loff_t __inode_get_bytes(struct inode *inode)
3086{
3087 return (((loff_t)inode->i_blocks) << 9) + inode->i_bytes;
3088}
3089loff_t inode_get_bytes(struct inode *inode);
3090void inode_set_bytes(struct inode *inode, loff_t bytes);
3091const char *simple_get_link(struct dentry *, struct inode *,
3092 struct delayed_call *);
3093extern const struct inode_operations simple_symlink_inode_operations;
3094
3095extern int iterate_dir(struct file *, struct dir_context *);
3096
3097extern int vfs_statx(int, const char __user *, int, struct kstat *, u32);
3098extern int vfs_statx_fd(unsigned int, struct kstat *, u32, unsigned int);
3099
3100static inline int vfs_stat(const char __user *filename, struct kstat *stat)
3101{
3102 return vfs_statx(AT_FDCWD, filename, AT_NO_AUTOMOUNT,
3103 stat, STATX_BASIC_STATS);
3104}
3105static inline int vfs_lstat(const char __user *name, struct kstat *stat)
3106{
3107 return vfs_statx(AT_FDCWD, name, AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT,
3108 stat, STATX_BASIC_STATS);
3109}
3110static inline int vfs_fstatat(int dfd, const char __user *filename,
3111 struct kstat *stat, int flags)
3112{
3113 return vfs_statx(dfd, filename, flags | AT_NO_AUTOMOUNT,
3114 stat, STATX_BASIC_STATS);
3115}
3116static inline int vfs_fstat(int fd, struct kstat *stat)
3117{
3118 return vfs_statx_fd(fd, stat, STATX_BASIC_STATS, 0);
3119}
3120
3121
3122extern const char *vfs_get_link(struct dentry *, struct delayed_call *);
3123extern int vfs_readlink(struct dentry *, char __user *, int);
3124
3125extern int __generic_block_fiemap(struct inode *inode,
3126 struct fiemap_extent_info *fieinfo,
3127 loff_t start, loff_t len,
3128 get_block_t *get_block);
3129extern int generic_block_fiemap(struct inode *inode,
3130 struct fiemap_extent_info *fieinfo, u64 start,
3131 u64 len, get_block_t *get_block);
3132
3133extern struct file_system_type *get_filesystem(struct file_system_type *fs);
3134extern void put_filesystem(struct file_system_type *fs);
3135extern struct file_system_type *get_fs_type(const char *name);
3136extern struct super_block *get_super(struct block_device *);
3137extern struct super_block *get_super_thawed(struct block_device *);
3138extern struct super_block *get_super_exclusive_thawed(struct block_device *bdev);
3139extern struct super_block *get_active_super(struct block_device *bdev);
3140extern void drop_super(struct super_block *sb);
3141extern void drop_super_exclusive(struct super_block *sb);
3142extern void iterate_supers(void (*)(struct super_block *, void *), void *);
3143extern void iterate_supers_type(struct file_system_type *,
3144 void (*)(struct super_block *, void *), void *);
3145
3146extern int dcache_dir_open(struct inode *, struct file *);
3147extern int dcache_dir_close(struct inode *, struct file *);
3148extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
3149extern int dcache_readdir(struct file *, struct dir_context *);
3150extern int simple_setattr(struct dentry *, struct iattr *);
3151extern int simple_getattr(const struct path *, struct kstat *, u32, unsigned int);
3152extern int simple_statfs(struct dentry *, struct kstatfs *);
3153extern int simple_open(struct inode *inode, struct file *file);
3154extern int simple_link(struct dentry *, struct inode *, struct dentry *);
3155extern int simple_unlink(struct inode *, struct dentry *);
3156extern int simple_rmdir(struct inode *, struct dentry *);
3157extern int simple_rename(struct inode *, struct dentry *,
3158 struct inode *, struct dentry *, unsigned int);
3159extern int noop_fsync(struct file *, loff_t, loff_t, int);
3160extern int noop_set_page_dirty(struct page *page);
3161extern void noop_invalidatepage(struct page *page, unsigned int offset,
3162 unsigned int length);
3163extern ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter);
3164extern int simple_empty(struct dentry *);
3165extern int simple_readpage(struct file *file, struct page *page);
3166extern int simple_write_begin(struct file *file, struct address_space *mapping,
3167 loff_t pos, unsigned len, unsigned flags,
3168 struct page **pagep, void **fsdata);
3169extern int simple_write_end(struct file *file, struct address_space *mapping,
3170 loff_t pos, unsigned len, unsigned copied,
3171 struct page *page, void *fsdata);
3172extern int always_delete_dentry(const struct dentry *);
3173extern struct inode *alloc_anon_inode(struct super_block *);
3174extern int simple_nosetlease(struct file *, long, struct file_lock **, void **);
3175extern const struct dentry_operations simple_dentry_operations;
3176
3177extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
3178extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
3179extern const struct file_operations simple_dir_operations;
3180extern const struct inode_operations simple_dir_inode_operations;
3181extern void make_empty_dir_inode(struct inode *inode);
3182extern bool is_empty_dir_inode(struct inode *inode);
3183struct tree_descr { const char *name; const struct file_operations *ops; int mode; };
3184struct dentry *d_alloc_name(struct dentry *, const char *);
3185extern int simple_fill_super(struct super_block *, unsigned long,
3186 const struct tree_descr *);
3187extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
3188extern void simple_release_fs(struct vfsmount **mount, int *count);
3189
3190extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
3191 loff_t *ppos, const void *from, size_t available);
3192extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
3193 const void __user *from, size_t count);
3194
3195extern int __generic_file_fsync(struct file *, loff_t, loff_t, int);
3196extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
3197
3198extern int generic_check_addressable(unsigned, u64);
3199
3200#ifdef CONFIG_MIGRATION
3201extern int buffer_migrate_page(struct address_space *,
3202 struct page *, struct page *,
3203 enum migrate_mode);
3204#else
3205#define buffer_migrate_page NULL
3206#endif
3207
3208extern int setattr_prepare(struct dentry *, struct iattr *);
3209extern int inode_newsize_ok(const struct inode *, loff_t offset);
3210extern void setattr_copy(struct inode *inode, const struct iattr *attr);
3211
3212extern int file_update_time(struct file *file);
3213
3214static inline bool io_is_direct(struct file *filp)
3215{
3216 return (filp->f_flags & O_DIRECT) || IS_DAX(filp->f_mapping->host);
3217}
3218
3219static inline bool vma_is_dax(struct vm_area_struct *vma)
3220{
3221 return vma->vm_file && IS_DAX(vma->vm_file->f_mapping->host);
3222}
3223
3224static inline bool vma_is_fsdax(struct vm_area_struct *vma)
3225{
3226 struct inode *inode;
3227
3228 if (!vma->vm_file)
3229 return false;
3230 if (!vma_is_dax(vma))
3231 return false;
3232 inode = file_inode(vma->vm_file);
3233 if (S_ISCHR(inode->i_mode))
3234 return false;
3235 return true;
3236}
3237
3238static inline int iocb_flags(struct file *file)
3239{
3240 int res = 0;
3241 if (file->f_flags & O_APPEND)
3242 res |= IOCB_APPEND;
3243 if (io_is_direct(file))
3244 res |= IOCB_DIRECT;
3245 if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
3246 res |= IOCB_DSYNC;
3247 if (file->f_flags & __O_SYNC)
3248 res |= IOCB_SYNC;
3249 return res;
3250}
3251
3252static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
3253{
3254 if (unlikely(flags & ~RWF_SUPPORTED))
3255 return -EOPNOTSUPP;
3256
3257 if (flags & RWF_NOWAIT) {
3258 if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
3259 return -EOPNOTSUPP;
3260 ki->ki_flags |= IOCB_NOWAIT;
3261 }
3262 if (flags & RWF_HIPRI)
3263 ki->ki_flags |= IOCB_HIPRI;
3264 if (flags & RWF_DSYNC)
3265 ki->ki_flags |= IOCB_DSYNC;
3266 if (flags & RWF_SYNC)
3267 ki->ki_flags |= (IOCB_DSYNC | IOCB_SYNC);
3268 if (flags & RWF_APPEND)
3269 ki->ki_flags |= IOCB_APPEND;
3270 return 0;
3271}
3272
3273static inline ino_t parent_ino(struct dentry *dentry)
3274{
3275 ino_t res;
3276
3277
3278
3279
3280
3281 spin_lock(&dentry->d_lock);
3282 res = dentry->d_parent->d_inode->i_ino;
3283 spin_unlock(&dentry->d_lock);
3284 return res;
3285}
3286
3287
3288
3289
3290
3291
3292
3293struct simple_transaction_argresp {
3294 ssize_t size;
3295 char data[0];
3296};
3297
3298#define SIMPLE_TRANSACTION_LIMIT (PAGE_SIZE - sizeof(struct simple_transaction_argresp))
3299
3300char *simple_transaction_get(struct file *file, const char __user *buf,
3301 size_t size);
3302ssize_t simple_transaction_read(struct file *file, char __user *buf,
3303 size_t size, loff_t *pos);
3304int simple_transaction_release(struct inode *inode, struct file *file);
3305
3306void simple_transaction_set(struct file *file, size_t n);
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
3325static int __fops ## _open(struct inode *inode, struct file *file) \
3326{ \
3327 __simple_attr_check_format(__fmt, 0ull); \
3328 return simple_attr_open(inode, file, __get, __set, __fmt); \
3329} \
3330static const struct file_operations __fops = { \
3331 .owner = THIS_MODULE, \
3332 .open = __fops ## _open, \
3333 .release = simple_attr_release, \
3334 .read = simple_attr_read, \
3335 .write = simple_attr_write, \
3336 .llseek = generic_file_llseek, \
3337}
3338
3339static inline __printf(1, 2)
3340void __simple_attr_check_format(const char *fmt, ...)
3341{
3342
3343}
3344
3345int simple_attr_open(struct inode *inode, struct file *file,
3346 int (*get)(void *, u64 *), int (*set)(void *, u64),
3347 const char *fmt);
3348int simple_attr_release(struct inode *inode, struct file *file);
3349ssize_t simple_attr_read(struct file *file, char __user *buf,
3350 size_t len, loff_t *ppos);
3351ssize_t simple_attr_write(struct file *file, const char __user *buf,
3352 size_t len, loff_t *ppos);
3353
3354struct ctl_table;
3355int proc_nr_files(struct ctl_table *table, int write,
3356 void __user *buffer, size_t *lenp, loff_t *ppos);
3357int proc_nr_dentry(struct ctl_table *table, int write,
3358 void __user *buffer, size_t *lenp, loff_t *ppos);
3359int proc_nr_inodes(struct ctl_table *table, int write,
3360 void __user *buffer, size_t *lenp, loff_t *ppos);
3361int __init get_filesystem_list(char *buf);
3362
3363#define __FMODE_EXEC ((__force int) FMODE_EXEC)
3364#define __FMODE_NONOTIFY ((__force int) FMODE_NONOTIFY)
3365
3366#define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
3367#define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \
3368 (flag & __FMODE_NONOTIFY)))
3369
3370static inline bool is_sxid(umode_t mode)
3371{
3372 return (mode & S_ISUID) || ((mode & S_ISGID) && (mode & S_IXGRP));
3373}
3374
3375static inline int check_sticky(struct inode *dir, struct inode *inode)
3376{
3377 if (!(dir->i_mode & S_ISVTX))
3378 return 0;
3379
3380 return __check_sticky(dir, inode);
3381}
3382
3383static inline void inode_has_no_xattr(struct inode *inode)
3384{
3385 if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & SB_NOSEC))
3386 inode->i_flags |= S_NOSEC;
3387}
3388
3389static inline bool is_root_inode(struct inode *inode)
3390{
3391 return inode == inode->i_sb->s_root->d_inode;
3392}
3393
3394static inline bool dir_emit(struct dir_context *ctx,
3395 const char *name, int namelen,
3396 u64 ino, unsigned type)
3397{
3398 return ctx->actor(ctx, name, namelen, ctx->pos, ino, type) == 0;
3399}
3400static inline bool dir_emit_dot(struct file *file, struct dir_context *ctx)
3401{
3402 return ctx->actor(ctx, ".", 1, ctx->pos,
3403 file->f_path.dentry->d_inode->i_ino, DT_DIR) == 0;
3404}
3405static inline bool dir_emit_dotdot(struct file *file, struct dir_context *ctx)
3406{
3407 return ctx->actor(ctx, "..", 2, ctx->pos,
3408 parent_ino(file->f_path.dentry), DT_DIR) == 0;
3409}
3410static inline bool dir_emit_dots(struct file *file, struct dir_context *ctx)
3411{
3412 if (ctx->pos == 0) {
3413 if (!dir_emit_dot(file, ctx))
3414 return false;
3415 ctx->pos = 1;
3416 }
3417 if (ctx->pos == 1) {
3418 if (!dir_emit_dotdot(file, ctx))
3419 return false;
3420 ctx->pos = 2;
3421 }
3422 return true;
3423}
3424static inline bool dir_relax(struct inode *inode)
3425{
3426 inode_unlock(inode);
3427 inode_lock(inode);
3428 return !IS_DEADDIR(inode);
3429}
3430
3431static inline bool dir_relax_shared(struct inode *inode)
3432{
3433 inode_unlock_shared(inode);
3434 inode_lock_shared(inode);
3435 return !IS_DEADDIR(inode);
3436}
3437
3438extern bool path_noexec(const struct path *path);
3439extern void inode_nohighmem(struct inode *inode);
3440
3441#endif
3442