1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /* fs/ internal definitions
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
5*4882a593Smuzhiyun * Written by David Howells (dhowells@redhat.com)
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun struct super_block;
9*4882a593Smuzhiyun struct file_system_type;
10*4882a593Smuzhiyun struct iomap;
11*4882a593Smuzhiyun struct iomap_ops;
12*4882a593Smuzhiyun struct linux_binprm;
13*4882a593Smuzhiyun struct path;
14*4882a593Smuzhiyun struct mount;
15*4882a593Smuzhiyun struct shrink_control;
16*4882a593Smuzhiyun struct fs_context;
17*4882a593Smuzhiyun struct user_namespace;
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun * block_dev.c
21*4882a593Smuzhiyun */
22*4882a593Smuzhiyun #ifdef CONFIG_BLOCK
23*4882a593Smuzhiyun extern void __init bdev_cache_init(void);
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun extern int __sync_blockdev(struct block_device *bdev, int wait);
26*4882a593Smuzhiyun void iterate_bdevs(void (*)(struct block_device *, void *), void *);
27*4882a593Smuzhiyun void emergency_thaw_bdev(struct super_block *sb);
28*4882a593Smuzhiyun void bd_forget(struct inode *inode);
29*4882a593Smuzhiyun #else
bdev_cache_init(void)30*4882a593Smuzhiyun static inline void bdev_cache_init(void)
31*4882a593Smuzhiyun {
32*4882a593Smuzhiyun }
33*4882a593Smuzhiyun
__sync_blockdev(struct block_device * bdev,int wait)34*4882a593Smuzhiyun static inline int __sync_blockdev(struct block_device *bdev, int wait)
35*4882a593Smuzhiyun {
36*4882a593Smuzhiyun return 0;
37*4882a593Smuzhiyun }
iterate_bdevs(void (* f)(struct block_device *,void *),void * arg)38*4882a593Smuzhiyun static inline void iterate_bdevs(void (*f)(struct block_device *, void *),
39*4882a593Smuzhiyun void *arg)
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun }
emergency_thaw_bdev(struct super_block * sb)42*4882a593Smuzhiyun static inline int emergency_thaw_bdev(struct super_block *sb)
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun return 0;
45*4882a593Smuzhiyun }
bd_forget(struct inode * inode)46*4882a593Smuzhiyun static inline void bd_forget(struct inode *inode)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun }
49*4882a593Smuzhiyun #endif /* CONFIG_BLOCK */
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun /*
52*4882a593Smuzhiyun * buffer.c
53*4882a593Smuzhiyun */
54*4882a593Smuzhiyun extern int __block_write_begin_int(struct page *page, loff_t pos, unsigned len,
55*4882a593Smuzhiyun get_block_t *get_block, struct iomap *iomap);
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun /*
58*4882a593Smuzhiyun * char_dev.c
59*4882a593Smuzhiyun */
60*4882a593Smuzhiyun extern void __init chrdev_init(void);
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun /*
63*4882a593Smuzhiyun * fs_context.c
64*4882a593Smuzhiyun */
65*4882a593Smuzhiyun extern const struct fs_context_operations legacy_fs_context_ops;
66*4882a593Smuzhiyun extern int parse_monolithic_mount_data(struct fs_context *, void *);
67*4882a593Smuzhiyun extern void vfs_clean_context(struct fs_context *fc);
68*4882a593Smuzhiyun extern int finish_clean_context(struct fs_context *fc);
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun /*
71*4882a593Smuzhiyun * namei.c
72*4882a593Smuzhiyun */
73*4882a593Smuzhiyun extern int filename_lookup(int dfd, struct filename *name, unsigned flags,
74*4882a593Smuzhiyun struct path *path, struct path *root);
75*4882a593Smuzhiyun extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
76*4882a593Smuzhiyun const char *, unsigned int, struct path *);
77*4882a593Smuzhiyun long do_rmdir(int dfd, struct filename *name);
78*4882a593Smuzhiyun long do_unlinkat(int dfd, struct filename *name);
79*4882a593Smuzhiyun int may_linkat(struct path *link);
80*4882a593Smuzhiyun int do_renameat2(int olddfd, struct filename *oldname, int newdfd,
81*4882a593Smuzhiyun struct filename *newname, unsigned int flags);
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun /*
84*4882a593Smuzhiyun * namespace.c
85*4882a593Smuzhiyun */
86*4882a593Smuzhiyun extern struct vfsmount *lookup_mnt(const struct path *);
87*4882a593Smuzhiyun extern int finish_automount(struct vfsmount *, struct path *);
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun extern int sb_prepare_remount_readonly(struct super_block *);
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun extern void __init mnt_init(void);
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun extern int __mnt_want_write_file(struct file *);
94*4882a593Smuzhiyun extern void __mnt_drop_write_file(struct file *);
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun extern void dissolve_on_fput(struct vfsmount *);
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun int path_mount(const char *dev_name, struct path *path,
99*4882a593Smuzhiyun const char *type_page, unsigned long flags, void *data_page);
100*4882a593Smuzhiyun int path_umount(struct path *path, int flags);
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun /*
103*4882a593Smuzhiyun * fs_struct.c
104*4882a593Smuzhiyun */
105*4882a593Smuzhiyun extern void chroot_fs_refs(const struct path *, const struct path *);
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun /*
108*4882a593Smuzhiyun * file_table.c
109*4882a593Smuzhiyun */
110*4882a593Smuzhiyun extern struct file *alloc_empty_file(int, const struct cred *);
111*4882a593Smuzhiyun extern struct file *alloc_empty_file_noaccount(int, const struct cred *);
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun /*
114*4882a593Smuzhiyun * super.c
115*4882a593Smuzhiyun */
116*4882a593Smuzhiyun extern int reconfigure_super(struct fs_context *);
117*4882a593Smuzhiyun extern bool trylock_super(struct super_block *sb);
118*4882a593Smuzhiyun extern struct super_block *user_get_super(dev_t);
119*4882a593Smuzhiyun extern bool mount_capable(struct fs_context *);
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /*
122*4882a593Smuzhiyun * open.c
123*4882a593Smuzhiyun */
124*4882a593Smuzhiyun struct open_flags {
125*4882a593Smuzhiyun int open_flag;
126*4882a593Smuzhiyun umode_t mode;
127*4882a593Smuzhiyun int acc_mode;
128*4882a593Smuzhiyun int intent;
129*4882a593Smuzhiyun int lookup_flags;
130*4882a593Smuzhiyun };
131*4882a593Smuzhiyun extern struct file *do_filp_open(int dfd, struct filename *pathname,
132*4882a593Smuzhiyun const struct open_flags *op);
133*4882a593Smuzhiyun extern struct file *do_file_open_root(struct dentry *, struct vfsmount *,
134*4882a593Smuzhiyun const char *, const struct open_flags *);
135*4882a593Smuzhiyun extern struct open_how build_open_how(int flags, umode_t mode);
136*4882a593Smuzhiyun extern int build_open_flags(const struct open_how *how, struct open_flags *op);
137*4882a593Smuzhiyun extern int __close_fd_get_file(unsigned int fd, struct file **res);
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun long do_sys_ftruncate(unsigned int fd, loff_t length, int small);
140*4882a593Smuzhiyun int chmod_common(const struct path *path, umode_t mode);
141*4882a593Smuzhiyun int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group,
142*4882a593Smuzhiyun int flag);
143*4882a593Smuzhiyun int chown_common(const struct path *path, uid_t user, gid_t group);
144*4882a593Smuzhiyun extern int vfs_open(const struct path *, struct file *);
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun /*
147*4882a593Smuzhiyun * inode.c
148*4882a593Smuzhiyun */
149*4882a593Smuzhiyun extern long prune_icache_sb(struct super_block *sb, struct shrink_control *sc);
150*4882a593Smuzhiyun extern void inode_add_lru(struct inode *inode);
151*4882a593Smuzhiyun extern int dentry_needs_remove_privs(struct dentry *dentry);
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun /*
154*4882a593Smuzhiyun * fs-writeback.c
155*4882a593Smuzhiyun */
156*4882a593Smuzhiyun extern long get_nr_dirty_inodes(void);
157*4882a593Smuzhiyun extern int invalidate_inodes(struct super_block *, bool);
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun /*
160*4882a593Smuzhiyun * dcache.c
161*4882a593Smuzhiyun */
162*4882a593Smuzhiyun extern int d_set_mounted(struct dentry *dentry);
163*4882a593Smuzhiyun extern long prune_dcache_sb(struct super_block *sb, struct shrink_control *sc);
164*4882a593Smuzhiyun extern struct dentry *d_alloc_cursor(struct dentry *);
165*4882a593Smuzhiyun extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *);
166*4882a593Smuzhiyun extern char *simple_dname(struct dentry *, char *, int);
167*4882a593Smuzhiyun extern void dput_to_list(struct dentry *, struct list_head *);
168*4882a593Smuzhiyun extern void shrink_dentry_list(struct list_head *);
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun /*
171*4882a593Smuzhiyun * read_write.c
172*4882a593Smuzhiyun */
173*4882a593Smuzhiyun extern int rw_verify_area(int, struct file *, const loff_t *, size_t);
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun /*
176*4882a593Smuzhiyun * pipe.c
177*4882a593Smuzhiyun */
178*4882a593Smuzhiyun extern const struct file_operations pipefifo_fops;
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun /*
181*4882a593Smuzhiyun * fs_pin.c
182*4882a593Smuzhiyun */
183*4882a593Smuzhiyun extern void group_pin_kill(struct hlist_head *p);
184*4882a593Smuzhiyun extern void mnt_pin_kill(struct mount *m);
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun /*
187*4882a593Smuzhiyun * fs/nsfs.c
188*4882a593Smuzhiyun */
189*4882a593Smuzhiyun extern const struct dentry_operations ns_dentry_operations;
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun /* direct-io.c: */
192*4882a593Smuzhiyun int sb_init_dio_done_wq(struct super_block *sb);
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun /*
195*4882a593Smuzhiyun * fs/stat.c:
196*4882a593Smuzhiyun */
197*4882a593Smuzhiyun int do_statx(int dfd, const char __user *filename, unsigned flags,
198*4882a593Smuzhiyun unsigned int mask, struct statx __user *buffer);
199