Merge tag 'vfio-v5.13-rc1pt2' of git://github.com/awilliam/linux-vfio
[platform/kernel/linux-starfive.git] / include / linux / fs_struct.h
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         spinlock_t lock;
12         seqcount_spinlock_t seq;
13         int umask;
14         int in_exec;
15         struct path root, pwd;
16 } __randomize_layout;
17
18 extern struct kmem_cache *fs_cachep;
19
20 extern void exit_fs(struct task_struct *);
21 extern void set_fs_root(struct fs_struct *, const struct path *);
22 extern void set_fs_pwd(struct fs_struct *, const struct path *);
23 extern struct fs_struct *copy_fs_struct(struct fs_struct *);
24 extern void free_fs_struct(struct fs_struct *);
25 extern int unshare_fs_struct(void);
26
27 static inline void get_fs_root(struct fs_struct *fs, struct path *root)
28 {
29         spin_lock(&fs->lock);
30         *root = fs->root;
31         path_get(root);
32         spin_unlock(&fs->lock);
33 }
34
35 static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
36 {
37         spin_lock(&fs->lock);
38         *pwd = fs->pwd;
39         path_get(pwd);
40         spin_unlock(&fs->lock);
41 }
42
43 extern bool current_chrooted(void);
44
45 #endif /* _LINUX_FS_STRUCT_H */