]> err.no Git - linux-2.6/blob - fs/fuse/fuse_i.h
[PATCH] FUSE - core
[linux-2.6] / fs / fuse / fuse_i.h
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 */
19 struct 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  */
38 struct 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
49 static 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
54 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
55 {
56         return *get_fuse_conn_super_p(sb);
57 }
58
59 static inline struct fuse_conn *get_fuse_conn(struct inode *inode)
60 {
61         return get_fuse_conn_super(inode->i_sb);
62 }
63
64 static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
65 {
66         return container_of(inode, struct fuse_inode, inode);
67 }
68
69 static 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  */
82 extern spinlock_t fuse_lock;
83
84 /**
85  * Check if the connection can be released, and if yes, then free the
86  * connection structure
87  */
88 void fuse_release_conn(struct fuse_conn *fc);
89