Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
[linux-2.6.git] / include / linux / fs_struct.h
index e3e7254..003dc0f 100644 (file)
@@ -2,27 +2,53 @@
 #define _LINUX_FS_STRUCT_H
 
 #include <linux/path.h>
+#include <linux/spinlock.h>
+#include <linux/seqlock.h>
 
 struct fs_struct {
-       atomic_t count;
-       rwlock_t lock;
+       int users;
+       spinlock_t lock;
+       seqcount_t seq;
        int umask;
-       struct path root, pwd, altroot;
+       int in_exec;
+       struct path root, pwd;
 };
 
-#define INIT_FS {                              \
-       .count          = ATOMIC_INIT(1),       \
-       .lock           = RW_LOCK_UNLOCKED,     \
-       .umask          = 0022, \
-}
-
 extern struct kmem_cache *fs_cachep;
 
 extern void exit_fs(struct task_struct *);
-extern void set_fs_altroot(void);
-extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *);
-extern void set_fs_pwd(struct fs_struct *, struct vfsmount *, struct dentry *);
+extern void set_fs_root(struct fs_struct *, struct path *);
+extern void set_fs_pwd(struct fs_struct *, struct path *);
 extern struct fs_struct *copy_fs_struct(struct fs_struct *);
-extern void put_fs_struct(struct fs_struct *);
+extern void free_fs_struct(struct fs_struct *);
+extern void daemonize_fs_struct(void);
+extern int unshare_fs_struct(void);
+
+static inline void get_fs_root(struct fs_struct *fs, struct path *root)
+{
+       spin_lock(&fs->lock);
+       *root = fs->root;
+       path_get(root);
+       spin_unlock(&fs->lock);
+}
+
+static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
+{
+       spin_lock(&fs->lock);
+       *pwd = fs->pwd;
+       path_get(pwd);
+       spin_unlock(&fs->lock);
+}
+
+static inline void get_fs_root_and_pwd(struct fs_struct *fs, struct path *root,
+                                      struct path *pwd)
+{
+       spin_lock(&fs->lock);
+       *root = fs->root;
+       path_get(root);
+       *pwd = fs->pwd;
+       path_get(pwd);
+       spin_unlock(&fs->lock);
+}
 
 #endif /* _LINUX_FS_STRUCT_H */