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
9struct 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
18extern struct kmem_cache *fs_cachep;
19
20extern void exit_fs(struct task_struct *);
21extern void set_fs_root(struct fs_struct *, const struct path *);
22extern void set_fs_pwd(struct fs_struct *, const struct path *);
23extern struct fs_struct *copy_fs_struct(struct fs_struct *);
24extern void free_fs_struct(struct fs_struct *);
25extern int unshare_fs_struct(void);
26
27static 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
35static 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
43extern bool current_chrooted(void);
44
45#endif /* _LINUX_FS_STRUCT_H */
46