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