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_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