FUSE_REQ_FINISHED
};
+struct fuse_conn;
+
/**
* A request to the client
*/
/** File used in the request (or NULL) */
struct file *file;
+
+ /** Request completion callback */
+ void (*end)(struct fuse_conn *, struct fuse_req *);
};
/**
* unmounted.
*/
struct fuse_conn {
- /** Reference count */
- int count;
-
/** The user id for this mount */
uid_t user_id;
/** Mount is active */
unsigned mounted : 1;
- /** Connection established, cleared on umount and device
- release */
+ /** Connection established, cleared on umount, connection
+ abort and device release */
unsigned connected : 1;
/** Connection failed (version mismatch) */
/** Is create not implemented by fs? */
unsigned no_create : 1;
+ /** The number of requests waiting for completion */
+ atomic_t num_waiting;
+
/** Negotiated minor version */
unsigned minor;
/** Backing dev info */
struct backing_dev_info bdi;
+
+ /** kobject */
+ struct kobject kobj;
};
static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
return get_fuse_conn_super(inode->i_sb);
}
+static inline struct fuse_conn *get_fuse_conn_kobj(struct kobject *obj)
+{
+ return container_of(obj, struct fuse_conn, kobj);
+}
+
static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
{
return container_of(inode, struct fuse_inode, inode);
*/
void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr);
-/**
- * Check if the connection can be released, and if yes, then free the
- * connection structure
- */
-void fuse_release_conn(struct fuse_conn *fc);
-
/**
* Initialize the client device
*/
*/
void fuse_release_background(struct fuse_req *req);
+/* Abort all requests */
+void fuse_abort_conn(struct fuse_conn *fc);
+
/**
* Get the attributes of a file
*/