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