/* FUSE: Filesystem in Userspace Copyright (C) 2001-2005 Miklos Szeredi This program can be distributed under the terms of the GNU GPL. See the file COPYING. */ #include #include #include #include #include #include #include #include /** FUSE inode */ struct fuse_inode { /** Inode data */ struct inode inode; /** Unique ID, which identifies the inode between userspace * and kernel */ u64 nodeid; /** Time in jiffies until the file attributes are valid */ unsigned long i_time; }; /** * A Fuse connection. * * This structure is created, when the filesystem is mounted, and is * destroyed, when the client device is closed and the filesystem is * unmounted. */ struct fuse_conn { /** The superblock of the mounted filesystem */ struct super_block *sb; /** The user id for this mount */ uid_t user_id; /** Backing dev info */ struct backing_dev_info bdi; }; static inline struct fuse_conn **get_fuse_conn_super_p(struct super_block *sb) { return (struct fuse_conn **) &sb->s_fs_info; } static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb) { return *get_fuse_conn_super_p(sb); } static inline struct fuse_conn *get_fuse_conn(struct inode *inode) { return get_fuse_conn_super(inode->i_sb); } static inline struct fuse_inode *get_fuse_inode(struct inode *inode) { return container_of(inode, struct fuse_inode, inode); } static inline u64 get_node_id(struct inode *inode) { return get_fuse_inode(inode)->nodeid; } /** * This is the single global spinlock which protects FUSE's structures * * The following data is protected by this lock: * * - the s_fs_info field of the super block * - the sb (super_block) field in fuse_conn */ extern spinlock_t fuse_lock; /** * Check if the connection can be released, and if yes, then free the * connection structure */ void fuse_release_conn(struct fuse_conn *fc);