aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/fuse_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/fuse/fuse_i.h')
-rw-r--r--fs/fuse/fuse_i.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
new file mode 100644
index 000000000000..eed6e89ce01f
--- /dev/null
+++ b/fs/fuse/fuse_i.h
@@ -0,0 +1,89 @@
1/*
2 FUSE: Filesystem in Userspace
3 Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu>
4
5 This program can be distributed under the terms of the GNU GPL.
6 See the file COPYING.
7*/
8
9#include <linux/fuse.h>
10#include <linux/fs.h>
11#include <linux/wait.h>
12#include <linux/list.h>
13#include <linux/spinlock.h>
14#include <linux/mm.h>
15#include <linux/backing-dev.h>
16#include <asm/semaphore.h>
17
18/** FUSE inode */
19struct fuse_inode {
20 /** Inode data */
21 struct inode inode;
22
23 /** Unique ID, which identifies the inode between userspace
24 * and kernel */
25 u64 nodeid;
26
27 /** Time in jiffies until the file attributes are valid */
28 unsigned long i_time;
29};
30
31/**
32 * A Fuse connection.
33 *
34 * This structure is created, when the filesystem is mounted, and is
35 * destroyed, when the client device is closed and the filesystem is
36 * unmounted.
37 */
38struct fuse_conn {
39 /** The superblock of the mounted filesystem */
40 struct super_block *sb;
41
42 /** The user id for this mount */
43 uid_t user_id;
44
45 /** Backing dev info */
46 struct backing_dev_info bdi;
47};
48
49static inline struct fuse_conn **get_fuse_conn_super_p(struct super_block *sb)
50{
51 return (struct fuse_conn **) &sb->s_fs_info;
52}
53
54static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
55{
56 return *get_fuse_conn_super_p(sb);
57}
58
59static inline struct fuse_conn *get_fuse_conn(struct inode *inode)
60{
61 return get_fuse_conn_super(inode->i_sb);
62}
63
64static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
65{
66 return container_of(inode, struct fuse_inode, inode);
67}
68
69static inline u64 get_node_id(struct inode *inode)
70{
71 return get_fuse_inode(inode)->nodeid;
72}
73
74/**
75 * This is the single global spinlock which protects FUSE's structures
76 *
77 * The following data is protected by this lock:
78 *
79 * - the s_fs_info field of the super block
80 * - the sb (super_block) field in fuse_conn
81 */
82extern spinlock_t fuse_lock;
83
84/**
85 * Check if the connection can be released, and if yes, then free the
86 * connection structure
87 */
88void fuse_release_conn(struct fuse_conn *fc);
89