.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|
1 | 2 | /* fs/ internal definitions |
---|
2 | 3 | * |
---|
3 | 4 | * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. |
---|
4 | 5 | * Written by David Howells (dhowells@redhat.com) |
---|
5 | | - * |
---|
6 | | - * This program is free software; you can redistribute it and/or |
---|
7 | | - * modify it under the terms of the GNU General Public License |
---|
8 | | - * as published by the Free Software Foundation; either version |
---|
9 | | - * 2 of the License, or (at your option) any later version. |
---|
10 | 6 | */ |
---|
11 | 7 | |
---|
12 | 8 | struct super_block; |
---|
.. | .. |
---|
17 | 13 | struct path; |
---|
18 | 14 | struct mount; |
---|
19 | 15 | struct shrink_control; |
---|
| 16 | +struct fs_context; |
---|
| 17 | +struct user_namespace; |
---|
20 | 18 | |
---|
21 | 19 | /* |
---|
22 | 20 | * block_dev.c |
---|
.. | .. |
---|
25 | 23 | extern void __init bdev_cache_init(void); |
---|
26 | 24 | |
---|
27 | 25 | extern int __sync_blockdev(struct block_device *bdev, int wait); |
---|
28 | | - |
---|
| 26 | +void iterate_bdevs(void (*)(struct block_device *, void *), void *); |
---|
| 27 | +void emergency_thaw_bdev(struct super_block *sb); |
---|
| 28 | +void bd_forget(struct inode *inode); |
---|
29 | 29 | #else |
---|
30 | 30 | static inline void bdev_cache_init(void) |
---|
31 | 31 | { |
---|
.. | .. |
---|
35 | 35 | { |
---|
36 | 36 | return 0; |
---|
37 | 37 | } |
---|
38 | | -#endif |
---|
| 38 | +static inline void iterate_bdevs(void (*f)(struct block_device *, void *), |
---|
| 39 | + void *arg) |
---|
| 40 | +{ |
---|
| 41 | +} |
---|
| 42 | +static inline int emergency_thaw_bdev(struct super_block *sb) |
---|
| 43 | +{ |
---|
| 44 | + return 0; |
---|
| 45 | +} |
---|
| 46 | +static inline void bd_forget(struct inode *inode) |
---|
| 47 | +{ |
---|
| 48 | +} |
---|
| 49 | +#endif /* CONFIG_BLOCK */ |
---|
39 | 50 | |
---|
40 | 51 | /* |
---|
41 | 52 | * buffer.c |
---|
42 | 53 | */ |
---|
43 | | -extern void guard_bio_eod(int rw, struct bio *bio); |
---|
44 | 54 | extern int __block_write_begin_int(struct page *page, loff_t pos, unsigned len, |
---|
45 | 55 | get_block_t *get_block, struct iomap *iomap); |
---|
46 | | -int __generic_write_end(struct inode *inode, loff_t pos, unsigned copied, |
---|
47 | | - struct page *page); |
---|
48 | 56 | |
---|
49 | 57 | /* |
---|
50 | 58 | * char_dev.c |
---|
.. | .. |
---|
52 | 60 | extern void __init chrdev_init(void); |
---|
53 | 61 | |
---|
54 | 62 | /* |
---|
| 63 | + * fs_context.c |
---|
| 64 | + */ |
---|
| 65 | +extern const struct fs_context_operations legacy_fs_context_ops; |
---|
| 66 | +extern int parse_monolithic_mount_data(struct fs_context *, void *); |
---|
| 67 | +extern void vfs_clean_context(struct fs_context *fc); |
---|
| 68 | +extern int finish_clean_context(struct fs_context *fc); |
---|
| 69 | + |
---|
| 70 | +/* |
---|
55 | 71 | * namei.c |
---|
56 | 72 | */ |
---|
57 | | -extern int user_path_mountpoint_at(int, const char __user *, unsigned int, struct path *); |
---|
58 | | -long do_mknodat(int dfd, const char __user *filename, umode_t mode, |
---|
59 | | - unsigned int dev); |
---|
60 | | -long do_mkdirat(int dfd, const char __user *pathname, umode_t mode); |
---|
61 | | -long do_rmdir(int dfd, const char __user *pathname); |
---|
| 73 | +extern int filename_lookup(int dfd, struct filename *name, unsigned flags, |
---|
| 74 | + struct path *path, struct path *root); |
---|
| 75 | +extern int vfs_path_lookup(struct dentry *, struct vfsmount *, |
---|
| 76 | + const char *, unsigned int, struct path *); |
---|
| 77 | +long do_rmdir(int dfd, struct filename *name); |
---|
62 | 78 | long do_unlinkat(int dfd, struct filename *name); |
---|
63 | | -long do_symlinkat(const char __user *oldname, int newdfd, |
---|
64 | | - const char __user *newname); |
---|
65 | | -int do_linkat(int olddfd, const char __user *oldname, int newdfd, |
---|
66 | | - const char __user *newname, int flags); |
---|
| 79 | +int may_linkat(struct path *link); |
---|
| 80 | +int do_renameat2(int olddfd, struct filename *oldname, int newdfd, |
---|
| 81 | + struct filename *newname, unsigned int flags); |
---|
67 | 82 | |
---|
68 | 83 | /* |
---|
69 | 84 | * namespace.c |
---|
70 | 85 | */ |
---|
71 | | -extern void *copy_mount_options(const void __user *); |
---|
72 | | -extern char *copy_mount_string(const void __user *); |
---|
73 | | - |
---|
74 | 86 | extern struct vfsmount *lookup_mnt(const struct path *); |
---|
75 | 87 | extern int finish_automount(struct vfsmount *, struct path *); |
---|
76 | 88 | |
---|
.. | .. |
---|
80 | 92 | |
---|
81 | 93 | extern int __mnt_want_write_file(struct file *); |
---|
82 | 94 | extern void __mnt_drop_write_file(struct file *); |
---|
| 95 | + |
---|
| 96 | +extern void dissolve_on_fput(struct vfsmount *); |
---|
| 97 | + |
---|
| 98 | +int path_mount(const char *dev_name, struct path *path, |
---|
| 99 | + const char *type_page, unsigned long flags, void *data_page); |
---|
| 100 | +int path_umount(struct path *path, int flags); |
---|
83 | 101 | |
---|
84 | 102 | /* |
---|
85 | 103 | * fs_struct.c |
---|
.. | .. |
---|
95 | 113 | /* |
---|
96 | 114 | * super.c |
---|
97 | 115 | */ |
---|
98 | | -extern int do_remount_sb(struct super_block *, int, void *, int); |
---|
99 | | -extern int do_remount_sb2(struct vfsmount *, struct super_block *, int, |
---|
100 | | - void *, int); |
---|
| 116 | +extern int reconfigure_super(struct fs_context *); |
---|
101 | 117 | extern bool trylock_super(struct super_block *sb); |
---|
102 | | -extern struct dentry *mount_fs(struct file_system_type *, |
---|
103 | | - int, const char *, struct vfsmount *, void *); |
---|
104 | 118 | extern struct super_block *user_get_super(dev_t); |
---|
| 119 | +extern bool mount_capable(struct fs_context *); |
---|
105 | 120 | |
---|
106 | 121 | /* |
---|
107 | 122 | * open.c |
---|
.. | .. |
---|
117 | 132 | const struct open_flags *op); |
---|
118 | 133 | extern struct file *do_file_open_root(struct dentry *, struct vfsmount *, |
---|
119 | 134 | const char *, const struct open_flags *); |
---|
| 135 | +extern struct open_how build_open_how(int flags, umode_t mode); |
---|
| 136 | +extern int build_open_flags(const struct open_how *how, struct open_flags *op); |
---|
| 137 | +extern int __close_fd_get_file(unsigned int fd, struct file **res); |
---|
120 | 138 | |
---|
121 | 139 | long do_sys_ftruncate(unsigned int fd, loff_t length, int small); |
---|
122 | | -long do_faccessat(int dfd, const char __user *filename, int mode); |
---|
123 | | -int do_fchmodat(int dfd, const char __user *filename, umode_t mode); |
---|
| 140 | +int chmod_common(const struct path *path, umode_t mode); |
---|
124 | 141 | int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, |
---|
125 | 142 | int flag); |
---|
126 | | - |
---|
| 143 | +int chown_common(const struct path *path, uid_t user, gid_t group); |
---|
127 | 144 | extern int vfs_open(const struct path *, struct file *); |
---|
128 | 145 | |
---|
129 | 146 | /* |
---|
.. | .. |
---|
132 | 149 | extern long prune_icache_sb(struct super_block *sb, struct shrink_control *sc); |
---|
133 | 150 | extern void inode_add_lru(struct inode *inode); |
---|
134 | 151 | extern int dentry_needs_remove_privs(struct dentry *dentry); |
---|
| 152 | +bool in_group_or_capable(const struct inode *inode, kgid_t gid); |
---|
| 153 | +void lock_two_inodes(struct inode *inode1, struct inode *inode2, |
---|
| 154 | + unsigned subclass1, unsigned subclass2); |
---|
135 | 155 | |
---|
136 | 156 | /* |
---|
137 | 157 | * fs-writeback.c |
---|
138 | 158 | */ |
---|
139 | | -extern void inode_io_list_del(struct inode *inode); |
---|
140 | | - |
---|
141 | 159 | extern long get_nr_dirty_inodes(void); |
---|
142 | 160 | extern int invalidate_inodes(struct super_block *, bool); |
---|
143 | 161 | |
---|
144 | 162 | /* |
---|
145 | 163 | * dcache.c |
---|
146 | 164 | */ |
---|
147 | | -extern struct dentry *__d_alloc(struct super_block *, const struct qstr *); |
---|
148 | 165 | extern int d_set_mounted(struct dentry *dentry); |
---|
149 | 166 | extern long prune_dcache_sb(struct super_block *sb, struct shrink_control *sc); |
---|
150 | 167 | extern struct dentry *d_alloc_cursor(struct dentry *); |
---|
| 168 | +extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *); |
---|
| 169 | +extern char *simple_dname(struct dentry *, char *, int); |
---|
| 170 | +extern void dput_to_list(struct dentry *, struct list_head *); |
---|
| 171 | +extern void shrink_dentry_list(struct list_head *); |
---|
151 | 172 | |
---|
152 | 173 | /* |
---|
153 | 174 | * read_write.c |
---|
.. | .. |
---|
170 | 191 | */ |
---|
171 | 192 | extern const struct dentry_operations ns_dentry_operations; |
---|
172 | 193 | |
---|
173 | | -/* |
---|
174 | | - * fs/ioctl.c |
---|
175 | | - */ |
---|
176 | | -extern int do_vfs_ioctl(struct file *file, unsigned int fd, unsigned int cmd, |
---|
177 | | - unsigned long arg); |
---|
178 | | - |
---|
179 | | -/* |
---|
180 | | - * iomap support: |
---|
181 | | - */ |
---|
182 | | -typedef loff_t (*iomap_actor_t)(struct inode *inode, loff_t pos, loff_t len, |
---|
183 | | - void *data, struct iomap *iomap); |
---|
184 | | - |
---|
185 | | -loff_t iomap_apply(struct inode *inode, loff_t pos, loff_t length, |
---|
186 | | - unsigned flags, const struct iomap_ops *ops, void *data, |
---|
187 | | - iomap_actor_t actor); |
---|
188 | | - |
---|
189 | 194 | /* direct-io.c: */ |
---|
190 | 195 | int sb_init_dio_done_wq(struct super_block *sb); |
---|
| 196 | + |
---|
| 197 | +/* |
---|
| 198 | + * fs/stat.c: |
---|
| 199 | + */ |
---|
| 200 | +int do_statx(int dfd, const char __user *filename, unsigned flags, |
---|
| 201 | + unsigned int mask, struct statx __user *buffer); |
---|
| 202 | + |
---|
| 203 | +/* |
---|
| 204 | + * fs/attr.c |
---|
| 205 | + */ |
---|
| 206 | +int setattr_should_drop_sgid(const struct inode *inode); |
---|