/** Request is stolen from fuse_file->reserved_req */ structfile*stolen_file; };
/**
* 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 { /** Lock protecting accessess to members of this structure */
spinlock_t lock;
/** Mutex protecting against directory alias creation */ struct mutex inst_mutex;
/** Refcount */
atomic_t count;
/** The user id for this mount */
uid_t user_id;
/** The group id for this mount */
gid_t group_id;
/** The fuse mount flags for this mount */ unsigned flags;
/** Maximum read size */ unsigned max_read;
/** Maximum write size */ unsigned max_write;
/** Readers of the connection are waiting on this */
wait_queue_head_t waitq;
/** The list of pending requests */ struct list_head pending;
/** The list of requests being processed */ struct list_head processing;
/** The list of requests under I/O */ struct list_head io;
/** Number of requests currently in the background */ unsigned num_background;
/** Flag indicating if connection is blocked. This will be
the case before the INIT reply is received, and if there
are too many outstading backgrounds requests */ int blocked;
/** waitq for blocked connection */
wait_queue_head_t blocked_waitq;
/** waitq for reserved requests */
wait_queue_head_t reserved_req_waitq;
/** The next unique request id */
u64 reqctr;
/** Connection established, cleared on umount, connection
abort and device release */ unsigned connected;
/** Connection failed (version mismatch). Cannot race with
setting other bitfields since it is only set once in INIT
reply, before any other request, and never cleared */ unsigned conn_error : 1;
/** Connection successful. Only set in INIT */ unsigned conn_init : 1;
/** Do readpages asynchronously? Only set in INIT */ unsigned async_read : 1;
/*
* The following bitfields are only for optimization purposes
* and hence races in setting them will not cause malfunction
*/
/** Is fsync not implemented by fs? */ unsigned no_fsync : 1;
/** Is fsyncdir not implemented by fs? */ unsigned no_fsyncdir : 1;
/** Is flush not implemented by fs? */ unsigned no_flush : 1;
/** Is setxattr not implemented by fs? */ unsigned no_setxattr : 1;
/** Is getxattr not implemented by fs? */ unsigned no_getxattr : 1;
/** Is listxattr not implemented by fs? */ unsigned no_listxattr : 1;
/** Is removexattr not implemented by fs? */ unsigned no_removexattr : 1;
/** Are file locking primitives not implemented by fs? */ unsigned no_lock : 1;
/** Is access not implemented by fs? */ unsigned no_access : 1;
/** Is create not implemented by fs? */ unsigned no_create : 1;
/** Is interrupt not implemented by fs? */ unsigned no_interrupt : 1;
/** Is bmap not implemented by fs? */ unsigned no_bmap : 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;
/** Entry on the fuse_conn_list */ struct list_head entry;
/** Unique ID */
u64 id;
/** Dentries in the control filesystem */ struct dentry *ctl_dentry[FUSE_CTL_NUM_DENTRIES];
/** number of dentries used in the above array */ int ctl_ndents;