d0ae3a84bcfb1e65b25a064bf17818ea2cf5d8aa
[linux-3.10.git] / include / linux / fs_struct.h
1 #ifndef _LINUX_FS_STRUCT_H
2 #define _LINUX_FS_STRUCT_H
3
4 #include <linux/path.h>
5 #include <linux/spinlock.h>
6 #include <linux/seqlock.h>
7
8 struct fs_struct {
9         int users;
10         spinlock_t lock;
11         seqcount_t seq;
12         int umask;
13         int in_exec;
14         struct path root, pwd;
15 };
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 *, struct path *);
21 extern void set_fs_pwd(struct fs_struct *, 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
26 static inline void get_fs_root(struct fs_struct *fs, struct path *root)
27 {
28         spin_lock(&fs->lock);
29         *root = fs->root;
30         path_get(root);
31         spin_unlock(&fs->lock);
32 }
33
34 static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
35 {
36         spin_lock(&fs->lock);
37         *pwd = fs->pwd;
38         path_get(pwd);
39         spin_unlock(&fs->lock);
40 }
41
42 static inline void get_fs_root_and_pwd(struct fs_struct *fs, struct path *root,
43                                        struct path *pwd)
44 {
45         spin_lock(&fs->lock);
46         *root = fs->root;
47         path_get(root);
48         *pwd = fs->pwd;
49         path_get(pwd);
50         spin_unlock(&fs->lock);
51 }
52
53 #endif /* _LINUX_FS_STRUCT_H */