fs: fs_struct rwlock to spinlock
[linux-2.6.git] / include / linux / fs_struct.h
index 18b467dbe278bf4b399274ff272355d2984530ce..a42b5bf02f8bcfec3ea20ecef765df3f4d690250 100644 (file)
@@ -4,12 +4,10 @@
 #include <linux/path.h>
 
 struct fs_struct {
-       atomic_t count; /* This usage count is used by check_unsafe_exec() for
-                        * security checking purposes - therefore it may not be
-                        * incremented, except by clone(CLONE_FS).
-                        */
-       rwlock_t lock;
+       int users;
+       spinlock_t lock;
        int umask;
+       int in_exec;
        struct path root, pwd;
 };
 
@@ -19,6 +17,35 @@ extern void exit_fs(struct task_struct *);
 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 */