xref: /linux/include/linux/fs_struct.h (revision 672dcda246071e1940eab8bb5a03d04ea026f46e)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_FS_STRUCT_H
3 #define _LINUX_FS_STRUCT_H
4 
5 #include <linux/path.h>
6 #include <linux/spinlock.h>
7 #include <linux/seqlock.h>
8 
9 struct fs_struct {
10 	int users;
11 	seqlock_t seq;
12 	int umask;
13 	int in_exec;
14 	struct path root, pwd;
15 } __randomize_layout;
16 
17 extern struct kmem_cache *fs_cachep;
18 
19 extern void exit_fs(struct task_struct *);
20 extern void set_fs_root(struct fs_struct *, const struct path *);
21 extern void set_fs_pwd(struct fs_struct *, const struct path *);
22 extern struct fs_struct *copy_fs_struct(struct fs_struct *);
23 extern void free_fs_struct(struct fs_struct *);
24 extern int unshare_fs_struct(void);
25 
get_fs_root(struct fs_struct * fs,struct path * root)26 static inline void get_fs_root(struct fs_struct *fs, struct path *root)
27 {
28 	read_seqlock_excl(&fs->seq);
29 	*root = fs->root;
30 	path_get(root);
31 	read_sequnlock_excl(&fs->seq);
32 }
33 
get_fs_pwd(struct fs_struct * fs,struct path * pwd)34 static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
35 {
36 	read_seqlock_excl(&fs->seq);
37 	*pwd = fs->pwd;
38 	path_get(pwd);
39 	read_sequnlock_excl(&fs->seq);
40 }
41 
42 extern bool current_chrooted(void);
43 
44 #endif /* _LINUX_FS_STRUCT_H */
45