| .. | .. |
|---|
| 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 | /* |
|---|
| .. | .. |
|---|
| 136 | 153 | /* |
|---|
| 137 | 154 | * fs-writeback.c |
|---|
| 138 | 155 | */ |
|---|
| 139 | | -extern void inode_io_list_del(struct inode *inode); |
|---|
| 140 | | - |
|---|
| 141 | 156 | extern long get_nr_dirty_inodes(void); |
|---|
| 142 | 157 | extern int invalidate_inodes(struct super_block *, bool); |
|---|
| 143 | 158 | |
|---|
| 144 | 159 | /* |
|---|
| 145 | 160 | * dcache.c |
|---|
| 146 | 161 | */ |
|---|
| 147 | | -extern struct dentry *__d_alloc(struct super_block *, const struct qstr *); |
|---|
| 148 | 162 | extern int d_set_mounted(struct dentry *dentry); |
|---|
| 149 | 163 | extern long prune_dcache_sb(struct super_block *sb, struct shrink_control *sc); |
|---|
| 150 | 164 | extern struct dentry *d_alloc_cursor(struct dentry *); |
|---|
| 165 | +extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *); |
|---|
| 166 | +extern char *simple_dname(struct dentry *, char *, int); |
|---|
| 167 | +extern void dput_to_list(struct dentry *, struct list_head *); |
|---|
| 168 | +extern void shrink_dentry_list(struct list_head *); |
|---|
| 151 | 169 | |
|---|
| 152 | 170 | /* |
|---|
| 153 | 171 | * read_write.c |
|---|
| .. | .. |
|---|
| 170 | 188 | */ |
|---|
| 171 | 189 | extern const struct dentry_operations ns_dentry_operations; |
|---|
| 172 | 190 | |
|---|
| 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 | 191 | /* direct-io.c: */ |
|---|
| 190 | 192 | int sb_init_dio_done_wq(struct super_block *sb); |
|---|
| 193 | + |
|---|
| 194 | +/* |
|---|
| 195 | + * fs/stat.c: |
|---|
| 196 | + */ |
|---|
| 197 | +int do_statx(int dfd, const char __user *filename, unsigned flags, |
|---|
| 198 | + unsigned int mask, struct statx __user *buffer); |
|---|