summaryrefslogtreecommitdiffstats
path: root/xlators/mount/fuse/src/fuse-bridge.h
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mount/fuse/src/fuse-bridge.h')
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.h711
1 files changed, 362 insertions, 349 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h
index b26b5e21109..318f33b5d61 100644
--- a/xlators/mount/fuse/src/fuse-bridge.h
+++ b/xlators/mount/fuse/src/fuse-bridge.h
@@ -46,130 +46,129 @@
#ifdef GF_DARWIN_HOST_OS
#define FUSE_OP_HIGH (FUSE_DESTROY + 1)
#endif
-#define GLUSTERFS_XATTR_LEN_MAX 65536
+#define GLUSTERFS_XATTR_LEN_MAX 65536
#define MAX_FUSE_PROC_DELAY 1
typedef struct fuse_in_header fuse_in_header_t;
-typedef void (fuse_handler_t) (xlator_t *this, fuse_in_header_t *finh,
- void *msg, struct iobuf *iobuf);
+typedef void(fuse_handler_t)(xlator_t *this, fuse_in_header_t *finh, void *msg,
+ struct iobuf *iobuf);
struct fuse_private {
- int fd;
- uint32_t proto_minor;
- char *volfile;
- size_t volfile_size;
- char *mount_point;
- struct iobuf *iobuf;
-
- pthread_t *fuse_thread;
- uint32_t reader_thread_count;
- char fuse_thread_started;
-
- uint32_t direct_io_mode;
- size_t *msg0_len_p;
-
- double entry_timeout;
- double negative_timeout;
- double attribute_timeout;
-
- pthread_cond_t sync_cond;
- pthread_mutex_t sync_mutex;
- char event_recvd;
-
- char init_recvd;
-
- gf_boolean_t strict_volfile_check;
-
- fuse_handler_t **fuse_ops;
- fuse_handler_t **fuse_ops0;
- pthread_mutex_t fuse_dump_mutex;
- int fuse_dump_fd;
-
- glusterfs_graph_t *next_graph;
- xlator_t *active_subvol;
-
- pid_t client_pid;
- gf_boolean_t client_pid_set;
- unsigned uid_map_root;
- gf_boolean_t acl;
- gf_boolean_t selinux;
- gf_boolean_t read_only;
- int32_t fopen_keep_cache;
- int32_t gid_cache_timeout;
- gf_boolean_t enable_ino32;
- /* This is the mount option for disabling the root-squash for the
- mount irrespective of whether the root-squash option for the
- volume is set or not. But this option is honoured only for
- thr trusted clients. For non trusted clients this value does
- not have any affect and the volume option for root-squash is
- honoured.
- */
- gf_boolean_t no_root_squash;
- fdtable_t *fdtable;
- gid_cache_t gid_cache;
- char *fuse_mountopts;
-
- /* For fuse-reverse-validation */
- struct list_head invalidate_list;
- pthread_cond_t invalidate_cond;
- pthread_mutex_t invalidate_mutex;
- gf_boolean_t reverse_fuse_thread_started;
-
- /* For communicating with separate mount thread. */
- int status_pipe[2];
-
- /* for fuse queue length and congestion threshold */
- int background_qlen;
- int congestion_threshold;
-
- /* for using fuse-kernel readdirp*/
- gf_boolean_t use_readdirp;
-
- /* fini started, helps prevent multiple epoll worker threads
- * firing up the fini routine */
- gf_boolean_t fini_invoked;
-
- /* resolve gid with getgrouplist() instead of /proc/%d/status */
- gf_boolean_t resolve_gids;
-
- /* Enable or disable capability support */
- gf_boolean_t capability;
-
- /* Enable or disable event history */
- gf_boolean_t event_history;
-
- /* whether to run the unmount daemon */
- gf_boolean_t auto_unmount;
-
- /* Load the thin volfile, and connect to gfproxyd*/
- gf_boolean_t thin_client;
- gf_boolean_t mount_finished;
- gf_boolean_t handle_graph_switch;
- pthread_cond_t migrate_cond;
-
- /* Writeback cache support */
- gf_boolean_t kernel_writeback_cache;
- int attr_times_granularity;
+ int fd;
+ uint32_t proto_minor;
+ char *volfile;
+ size_t volfile_size;
+ char *mount_point;
+ struct iobuf *iobuf;
+
+ pthread_t *fuse_thread;
+ uint32_t reader_thread_count;
+ char fuse_thread_started;
+
+ uint32_t direct_io_mode;
+ size_t *msg0_len_p;
+
+ double entry_timeout;
+ double negative_timeout;
+ double attribute_timeout;
+
+ pthread_cond_t sync_cond;
+ pthread_mutex_t sync_mutex;
+ char event_recvd;
+
+ char init_recvd;
+
+ gf_boolean_t strict_volfile_check;
+
+ fuse_handler_t **fuse_ops;
+ fuse_handler_t **fuse_ops0;
+ pthread_mutex_t fuse_dump_mutex;
+ int fuse_dump_fd;
+
+ glusterfs_graph_t *next_graph;
+ xlator_t *active_subvol;
+
+ pid_t client_pid;
+ gf_boolean_t client_pid_set;
+ unsigned uid_map_root;
+ gf_boolean_t acl;
+ gf_boolean_t selinux;
+ gf_boolean_t read_only;
+ int32_t fopen_keep_cache;
+ int32_t gid_cache_timeout;
+ gf_boolean_t enable_ino32;
+ /* This is the mount option for disabling the root-squash for the
+ mount irrespective of whether the root-squash option for the
+ volume is set or not. But this option is honoured only for
+ thr trusted clients. For non trusted clients this value does
+ not have any affect and the volume option for root-squash is
+ honoured.
+ */
+ gf_boolean_t no_root_squash;
+ fdtable_t *fdtable;
+ gid_cache_t gid_cache;
+ char *fuse_mountopts;
+
+ /* For fuse-reverse-validation */
+ struct list_head invalidate_list;
+ pthread_cond_t invalidate_cond;
+ pthread_mutex_t invalidate_mutex;
+ gf_boolean_t reverse_fuse_thread_started;
+
+ /* For communicating with separate mount thread. */
+ int status_pipe[2];
+
+ /* for fuse queue length and congestion threshold */
+ int background_qlen;
+ int congestion_threshold;
+
+ /* for using fuse-kernel readdirp*/
+ gf_boolean_t use_readdirp;
+
+ /* fini started, helps prevent multiple epoll worker threads
+ * firing up the fini routine */
+ gf_boolean_t fini_invoked;
+
+ /* resolve gid with getgrouplist() instead of /proc/%d/status */
+ gf_boolean_t resolve_gids;
+
+ /* Enable or disable capability support */
+ gf_boolean_t capability;
+
+ /* Enable or disable event history */
+ gf_boolean_t event_history;
+
+ /* whether to run the unmount daemon */
+ gf_boolean_t auto_unmount;
+
+ /* Load the thin volfile, and connect to gfproxyd*/
+ gf_boolean_t thin_client;
+ gf_boolean_t mount_finished;
+ gf_boolean_t handle_graph_switch;
+ pthread_cond_t migrate_cond;
+
+ /* Writeback cache support */
+ gf_boolean_t kernel_writeback_cache;
+ int attr_times_granularity;
};
typedef struct fuse_private fuse_private_t;
-#define INVAL_BUF_SIZE (sizeof (struct fuse_out_header) + \
- max (sizeof (struct fuse_notify_inval_inode_out), \
- sizeof (struct fuse_notify_inval_entry_out) + \
- NAME_MAX + 1))
-
+#define INVAL_BUF_SIZE \
+ (sizeof(struct fuse_out_header) + \
+ max(sizeof(struct fuse_notify_inval_inode_out), \
+ sizeof(struct fuse_notify_inval_entry_out) + NAME_MAX + 1))
struct fuse_invalidate_node {
- char inval_buf[INVAL_BUF_SIZE];
- struct list_head next;
+ char inval_buf[INVAL_BUF_SIZE];
+ struct list_head next;
};
typedef struct fuse_invalidate_node fuse_invalidate_node_t;
struct fuse_graph_switch_args {
- xlator_t *this;
- xlator_t *old_subvol;
- xlator_t *new_subvol;
+ xlator_t *this;
+ xlator_t *old_subvol;
+ xlator_t *new_subvol;
};
typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
@@ -177,270 +176,284 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
#define _FH_TO_FD(fh) ((fd_t *)(uintptr_t)(fh))
-#define FH_TO_FD(fh) ((_FH_TO_FD (fh))?(fd_ref (_FH_TO_FD (fh))):((fd_t *) 0))
+#define FH_TO_FD(fh) ((_FH_TO_FD(fh)) ? (fd_ref(_FH_TO_FD(fh))) : ((fd_t *)0))
/* Use the same logic as the Linux NFS-client */
-#define GF_FUSE_SQUASH_INO(ino) (((uint32_t) ino) ^ (ino >> 32))
-
-#define FUSE_FOP(state, ret, op_num, fop, args ...) \
- do { \
- xlator_t *xl = NULL; \
- call_frame_t *frame = NULL; \
- \
- xl = state->active_subvol; \
- if (!xl) { \
- gf_log_callingfn (state->this->name, GF_LOG_ERROR, \
- "No active subvolume"); \
- send_fuse_err (state->this, state->finh, ENOENT); \
- free_fuse_state (state); \
- break; \
- } \
- \
- frame = get_call_frame_for_req (state); \
- if (!frame) { \
- /* This is not completely clean, as some \
- * earlier allocations might remain unfreed \
- * if we return at this point, but still \
- * better than trying to go on with a NULL \
- * frame ... \
- */ \
- send_fuse_err (state->this, state->finh, ENOMEM); \
- free_fuse_state (state); \
- /* ideally, need to 'return', but let the */ \
- /* calling function take care of it */ \
- break; \
- } \
- \
- frame->root->state = state; \
- frame->root->op = op_num; \
- frame->op = op_num; \
- \
- if (state->this->history) \
- gf_log_eh ("%"PRIu64", %s, path: (%s), gfid: " \
- "(%s)", frame->root->unique, \
- gf_fop_list[frame->root->op], \
- state->loc.path, \
- (state->fd == NULL)? \
- uuid_utoa (state->loc.gfid): \
- uuid_utoa (state->fd->inode->gfid)); \
- STACK_WIND (frame, ret, xl, xl->fops->fop, args); \
- } while (0)
-
-#define GF_SELECT_LOG_LEVEL(_errno) \
+#define GF_FUSE_SQUASH_INO(ino) (((uint32_t)ino) ^ (ino >> 32))
+
+#define FUSE_FOP(state, ret, op_num, fop, args...) \
+ do { \
+ xlator_t *xl = NULL; \
+ call_frame_t *frame = NULL; \
+ \
+ xl = state->active_subvol; \
+ if (!xl) { \
+ gf_log_callingfn(state->this->name, GF_LOG_ERROR, \
+ "No active subvolume"); \
+ send_fuse_err(state->this, state->finh, ENOENT); \
+ free_fuse_state(state); \
+ break; \
+ } \
+ \
+ frame = get_call_frame_for_req(state); \
+ if (!frame) { \
+ /* This is not completely clean, as some \
+ * earlier allocations might remain unfreed \
+ * if we return at this point, but still \
+ * better than trying to go on with a NULL \
+ * frame ... \
+ */ \
+ send_fuse_err(state->this, state->finh, ENOMEM); \
+ free_fuse_state(state); \
+ /* ideally, need to 'return', but let the */ \
+ /* calling function take care of it */ \
+ break; \
+ } \
+ \
+ frame->root->state = state; \
+ frame->root->op = op_num; \
+ frame->op = op_num; \
+ \
+ if (state->this->history) \
+ gf_log_eh("%" PRIu64 \
+ ", %s, path: (%s), gfid: " \
+ "(%s)", \
+ frame->root->unique, gf_fop_list[frame->root->op], \
+ state->loc.path, \
+ (state->fd == NULL) \
+ ? uuid_utoa(state->loc.gfid) \
+ : uuid_utoa(state->fd->inode->gfid)); \
+ STACK_WIND(frame, ret, xl, xl->fops->fop, args); \
+ } while (0)
+
+#define GF_SELECT_LOG_LEVEL(_errno) \
(((_errno == ENOENT) || (_errno == ESTALE))? \
GF_LOG_DEBUG)
-#define GET_STATE(this, finh, state) \
- do { \
- state = get_fuse_state (this, finh); \
- if (!state) { \
- gf_log ("glusterfs-fuse", \
- GF_LOG_ERROR, \
- "FUSE message unique %"PRIu64" opcode %d:" \
- " state allocation failed", \
- finh->unique, finh->opcode); \
- \
- send_fuse_err (this, finh, ENOMEM); \
- GF_FREE (finh); \
- \
- return; \
- } \
- } while (0)
-
-#define FUSE_ENTRY_CREATE(this, priv, finh, state, fci, op) \
- do { \
- if (priv->proto_minor >= 12) \
- state->mode &= ~fci->umask; \
- if (priv->proto_minor >= 12 && priv->acl) { \
- state->xdata = dict_new (); \
- if (!state->xdata) { \
- gf_log ("glusterfs-fuse", \
- GF_LOG_WARNING, \
- "%s failed to allocate " \
- "a param dictionary", op); \
- send_fuse_err (this, finh, ENOMEM); \
- free_fuse_state (state); \
- return; \
- } \
- state->umask = fci->umask; \
- \
-/* TODO: remove this after 3.4.0 release. keeping it for the \
- sake of backward compatibility with old (3.3.[01]) \
- releases till then. */ \
- ret = dict_set_int16 (state->xdata, "umask", \
- fci->umask); \
- if (ret < 0) { \
- gf_log ("glusterfs-fuse", \
- GF_LOG_WARNING, \
- "%s Failed adding umask"\
- " to request", op); \
- send_fuse_err (this, finh, ENOMEM); \
- free_fuse_state (state); \
- return; \
- } \
- ret = dict_set_int16 (state->xdata, "mode", \
- fci->mode); \
- if (ret < 0) { \
- gf_log ("glusterfs-fuse", \
- GF_LOG_WARNING, \
- "%s Failed adding mode " \
- "to request", op); \
- send_fuse_err (this, finh, ENOMEM); \
- free_fuse_state (state); \
- return; \
- } \
- } \
- } while (0)
-
-#define fuse_log_eh_fop(this, state, frame, op_ret, op_errno) \
- do { \
- fuse_private_t *priv = this->private; \
- if (this->history && priv->event_history) { \
- if (state->fd) \
- gf_log_eh ("op_ret: %d, op_errno: %d, " \
- "%"PRIu64", %s () => %p, gfid: %s", \
- op_ret, op_errno, \
- frame->root->unique, \
- gf_fop_list[frame->root->op], \
- state->fd, \
- uuid_utoa (state->fd->inode->gfid)); \
- else \
- gf_log_eh ("op_ret: %d, op_errno: %d, " \
- "%"PRIu64", %s () => %s, gfid: %s", \
- op_ret, op_errno, \
- frame->root->unique, \
- gf_fop_list[frame->root->op], \
- state->loc.path, \
- uuid_utoa (state->loc.gfid)); \
- } \
- } while(0)
-
-#define fuse_log_eh(this, args...) \
- do { \
- fuse_private_t *priv = this->private; \
- if (this->history && priv->event_history) \
- gf_log_eh(args); \
- } while (0)
+#define GET_STATE(this, finh, state) \
+ do { \
+ state = get_fuse_state(this, finh); \
+ if (!state) { \
+ gf_log("glusterfs-fuse", GF_LOG_ERROR, \
+ "FUSE message unique %" PRIu64 \
+ " opcode %d:" \
+ " state allocation failed", \
+ finh->unique, finh->opcode); \
+ \
+ send_fuse_err(this, finh, ENOMEM); \
+ GF_FREE(finh); \
+ \
+ return; \
+ } \
+ } while (0)
+
+#define FUSE_ENTRY_CREATE(this, priv, finh, state, fci, op) \
+ do { \
+ if (priv->proto_minor >= 12) \
+ state->mode &= ~fci->umask; \
+ if (priv->proto_minor >= 12 && priv->acl) { \
+ state->xdata = dict_new(); \
+ if (!state->xdata) { \
+ gf_log("glusterfs-fuse", GF_LOG_WARNING, \
+ "%s failed to allocate " \
+ "a param dictionary", \
+ op); \
+ send_fuse_err(this, finh, ENOMEM); \
+ free_fuse_state(state); \
+ return; \
+ } \
+ state->umask = fci->umask; \
+ \
+ /* TODO: remove this after 3.4.0 release. keeping it for the \
+ sake of backward compatibility with old (3.3.[01]) \
+ releases till then. */ \
+ ret = dict_set_int16(state->xdata, "umask", fci->umask); \
+ if (ret < 0) { \
+ gf_log("glusterfs-fuse", GF_LOG_WARNING, \
+ "%s Failed adding umask" \
+ " to request", \
+ op); \
+ send_fuse_err(this, finh, ENOMEM); \
+ free_fuse_state(state); \
+ return; \
+ } \
+ ret = dict_set_int16(state->xdata, "mode", fci->mode); \
+ if (ret < 0) { \
+ gf_log("glusterfs-fuse", GF_LOG_WARNING, \
+ "%s Failed adding mode " \
+ "to request", \
+ op); \
+ send_fuse_err(this, finh, ENOMEM); \
+ free_fuse_state(state); \
+ return; \
+ } \
+ } \
+ } while (0)
+
+#define fuse_log_eh_fop(this, state, frame, op_ret, op_errno) \
+ do { \
+ fuse_private_t *priv = this->private; \
+ if (this->history && priv->event_history) { \
+ if (state->fd) \
+ gf_log_eh( \
+ "op_ret: %d, op_errno: %d, " \
+ "%" PRIu64 ", %s () => %p, gfid: %s", \
+ op_ret, op_errno, frame->root->unique, \
+ gf_fop_list[frame->root->op], state->fd, \
+ uuid_utoa(state->fd->inode->gfid)); \
+ else \
+ gf_log_eh( \
+ "op_ret: %d, op_errno: %d, " \
+ "%" PRIu64 ", %s () => %s, gfid: %s", \
+ op_ret, op_errno, frame->root->unique, \
+ gf_fop_list[frame->root->op], state->loc.path, \
+ uuid_utoa(state->loc.gfid)); \
+ } \
+ } while (0)
+
+#define fuse_log_eh(this, args...) \
+ do { \
+ fuse_private_t *priv = this->private; \
+ if (this->history && priv->event_history) \
+ gf_log_eh(args); \
+ } while (0)
static inline xlator_t *
-fuse_active_subvol (xlator_t *fuse)
+fuse_active_subvol(xlator_t *fuse)
{
- fuse_private_t *priv = NULL;
+ fuse_private_t *priv = NULL;
- priv = fuse->private;
+ priv = fuse->private;
- return priv->active_subvol;
+ return priv->active_subvol;
}
-
typedef enum {
- RESOLVE_MUST = 1,
- RESOLVE_NOT,
- RESOLVE_MAY,
- RESOLVE_DONTCARE,
- RESOLVE_EXACT
+ RESOLVE_MUST = 1,
+ RESOLVE_NOT,
+ RESOLVE_MAY,
+ RESOLVE_DONTCARE,
+ RESOLVE_EXACT
} fuse_resolve_type_t;
-
typedef struct {
- fuse_resolve_type_t type;
- fd_t *fd;
- char *path;
- char *bname;
- u_char gfid[16];
- inode_t *hint;
- u_char pargfid[16];
- inode_t *parhint;
- int op_ret;
- int op_errno;
- loc_t resolve_loc;
+ fuse_resolve_type_t type;
+ fd_t *fd;
+ char *path;
+ char *bname;
+ u_char gfid[16];
+ inode_t *hint;
+ u_char pargfid[16];
+ inode_t *parhint;
+ int op_ret;
+ int op_errno;
+ loc_t resolve_loc;
} fuse_resolve_t;
-
typedef struct {
- void *pool;
- xlator_t *this;
- xlator_t *active_subvol;
- inode_table_t *itable;
- loc_t loc;
- loc_t loc2;
- fuse_in_header_t *finh;
- int32_t flags;
- off_t off;
- size_t size;
- unsigned long nlookup;
- fd_t *fd;
- dict_t *xattr;
- dict_t *xdata;
- char *name;
- char is_revalidate;
- gf_boolean_t truncate_needed;
- gf_lock_t lock;
- uint64_t lk_owner;
-
- /* used within resolve_and_resume */
- /* */
- fuse_resolve_t resolve;
- fuse_resolve_t resolve2;
-
- loc_t *loc_now;
- fuse_resolve_t *resolve_now;
-
- void *resume_fn;
-
- int valid;
- int mask;
- dev_t rdev;
- mode_t mode;
- mode_t umask;
- struct iatt attr;
- struct gf_flock lk_lock;
- struct iovec vector;
-
- uuid_t gfid;
- uint32_t io_flags;
- int32_t fd_no;
-
- gf_seek_what_t whence;
- struct iobuf *iobuf;
+ void *pool;
+ xlator_t *this;
+ xlator_t *active_subvol;
+ inode_table_t *itable;
+ loc_t loc;
+ loc_t loc2;
+ fuse_in_header_t *finh;
+ int32_t flags;
+ off_t off;
+ size_t size;
+ unsigned long nlookup;
+ fd_t *fd;
+ dict_t *xattr;
+ dict_t *xdata;
+ char *name;
+ char is_revalidate;
+ gf_boolean_t truncate_needed;
+ gf_lock_t lock;
+ uint64_t lk_owner;
+
+ /* used within resolve_and_resume */
+ /* */
+ fuse_resolve_t resolve;
+ fuse_resolve_t resolve2;
+
+ loc_t *loc_now;
+ fuse_resolve_t *resolve_now;
+
+ void *resume_fn;
+
+ int valid;
+ int mask;
+ dev_t rdev;
+ mode_t mode;
+ mode_t umask;
+ struct iatt attr;
+ struct gf_flock lk_lock;
+ struct iovec vector;
+
+ uuid_t gfid;
+ uint32_t io_flags;
+ int32_t fd_no;
+
+ gf_seek_what_t whence;
+ struct iobuf *iobuf;
} fuse_state_t;
typedef struct {
- uint32_t open_flags;
- char migration_failed;
- fd_t *activefd;
+ uint32_t open_flags;
+ char migration_failed;
+ fd_t *activefd;
} fuse_fd_ctx_t;
-typedef void (*fuse_resume_fn_t) (fuse_state_t *state);
+typedef void (*fuse_resume_fn_t)(fuse_state_t *state);
GF_MUST_CHECK int32_t
-fuse_loc_fill (loc_t *loc, fuse_state_t *state, ino_t ino,
- ino_t par, const char *name);
-call_frame_t *get_call_frame_for_req (fuse_state_t *state);
-fuse_state_t *get_fuse_state (xlator_t *this, fuse_in_header_t *finh);
-void free_fuse_state (fuse_state_t *state);
-void gf_fuse_stat2attr (struct iatt *st, struct fuse_attr *fa,
- gf_boolean_t enable_ino32);
-void gf_fuse_fill_dirent (gf_dirent_t *entry, struct fuse_dirent *fde,
- gf_boolean_t enable_ino32);
-uint64_t inode_to_fuse_nodeid (inode_t *inode);
-xlator_t *fuse_active_subvol (xlator_t *fuse);
-inode_t *fuse_ino_to_inode (uint64_t ino, xlator_t *fuse);
-int send_fuse_err (xlator_t *this, fuse_in_header_t *finh, int error);
-int fuse_gfid_set (fuse_state_t *state);
-int fuse_flip_xattr_ns (struct fuse_private *priv, char *okey, char **nkey);
-fuse_fd_ctx_t * __fuse_fd_ctx_check_n_create (xlator_t *this, fd_t *fd);
-fuse_fd_ctx_t * fuse_fd_ctx_check_n_create (xlator_t *this, fd_t *fd);
-
-int fuse_resolve_and_resume (fuse_state_t *state, fuse_resume_fn_t fn);
-int fuse_resolve_inode_init (fuse_state_t *state, fuse_resolve_t *resolve,
- ino_t ino);
-int fuse_resolve_entry_init (fuse_state_t *state, fuse_resolve_t *resolve,
- ino_t par, char *name);
-int fuse_resolve_fd_init (fuse_state_t *state, fuse_resolve_t *resolve,
- fd_t *fd);
-int fuse_ignore_xattr_set (fuse_private_t *priv, char *key);
-void fuse_fop_resume (fuse_state_t *state);
-int dump_history_fuse (circular_buffer_t *cb, void *data);
-int fuse_check_selinux_cap_xattr (fuse_private_t *priv, char *name);
+fuse_loc_fill(loc_t *loc, fuse_state_t *state, ino_t ino, ino_t par,
+ const char *name);
+call_frame_t *
+get_call_frame_for_req(fuse_state_t *state);
+fuse_state_t *
+get_fuse_state(xlator_t *this, fuse_in_header_t *finh);
+void
+free_fuse_state(fuse_state_t *state);
+void
+gf_fuse_stat2attr(struct iatt *st, struct fuse_attr *fa,
+ gf_boolean_t enable_ino32);
+void
+gf_fuse_fill_dirent(gf_dirent_t *entry, struct fuse_dirent *fde,
+ gf_boolean_t enable_ino32);
+uint64_t
+inode_to_fuse_nodeid(inode_t *inode);
+xlator_t *
+fuse_active_subvol(xlator_t *fuse);
+inode_t *
+fuse_ino_to_inode(uint64_t ino, xlator_t *fuse);
+int
+send_fuse_err(xlator_t *this, fuse_in_header_t *finh, int error);
+int
+fuse_gfid_set(fuse_state_t *state);
+int
+fuse_flip_xattr_ns(struct fuse_private *priv, char *okey, char **nkey);
+fuse_fd_ctx_t *
+__fuse_fd_ctx_check_n_create(xlator_t *this, fd_t *fd);
+fuse_fd_ctx_t *
+fuse_fd_ctx_check_n_create(xlator_t *this, fd_t *fd);
+
+int
+fuse_resolve_and_resume(fuse_state_t *state, fuse_resume_fn_t fn);
+int
+fuse_resolve_inode_init(fuse_state_t *state, fuse_resolve_t *resolve,
+ ino_t ino);
+int
+fuse_resolve_entry_init(fuse_state_t *state, fuse_resolve_t *resolve, ino_t par,
+ char *name);
+int
+fuse_resolve_fd_init(fuse_state_t *state, fuse_resolve_t *resolve, fd_t *fd);
+int
+fuse_ignore_xattr_set(fuse_private_t *priv, char *key);
+void
+fuse_fop_resume(fuse_state_t *state);
+int
+dump_history_fuse(circular_buffer_t *cb, void *data);
+int
+fuse_check_selinux_cap_xattr(fuse_private_t *priv, char *name);
#endif /* _GF_FUSE_BRIDGE_H_ */