diff options
Diffstat (limited to 'libglusterfs/src/xlator.h')
| -rw-r--r-- | libglusterfs/src/xlator.h | 842 | 
1 files changed, 842 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h new file mode 100644 index 00000000000..eadc9fd1a6f --- /dev/null +++ b/libglusterfs/src/xlator.h @@ -0,0 +1,842 @@ +/* +  Copyright (c) 2006, 2007, 2008 Z RESEARCH, Inc. <http://www.zresearch.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  General Public License for more details. + +  You should have received a copy of the GNU General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>. +*/ + +#ifndef _XLATOR_H +#define _XLATOR_H + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdint.h> +#include <inttypes.h> + + +#include "glusterfs.h" +#include "logging.h" +#include "common-utils.h" +#include "dict.h" +#include "compat.h" +#include "list.h" + +#define FIRST_CHILD(xl) (xl->children->xlator) + +struct _xlator; +typedef struct _xlator xlator_t; +struct _dir_entry_t; +typedef struct _dir_entry_t dir_entry_t; +struct _gf_dirent_t; +typedef struct _gf_dirent_t gf_dirent_t; +struct _loc; +typedef struct _loc loc_t; + + +typedef int32_t (*event_notify_fn_t) (xlator_t *this, +				      int32_t event, +				      void *data, +				      ...); + +#include "list.h" +#include "gf-dirent.h" +#include "stack.h" +#include "inode.h" +#include "fd.h" + +struct _loc { +	const char *path; +	const char *name; +	ino_t       ino; +	inode_t    *inode; +	inode_t    *parent; +}; + + +struct xlator_stats { +	uint64_t nr_files;         /* Number of files open via this xlator */ +	uint64_t free_disk;        /* Mega bytes */ +	uint64_t total_disk_size;  /* Mega Bytes */ +	uint64_t disk_usage;       /* Mega bytes */ +	uint64_t disk_speed;       /* MHz or Mbps */ +	uint64_t nr_clients;       /* Number of client nodes */ +	uint64_t write_usage; +	uint64_t read_usage;       /* add more stats here */ +}; + + + +typedef int32_t (*mop_stats_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    struct xlator_stats *stats); + +typedef int32_t (*mop_getspec_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      char *spec_data); + +typedef int32_t (*fop_checksum_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       uint8_t *file_checksum, +				       uint8_t *dir_checksum); + +typedef int32_t (*mop_setvolume_t) (call_frame_t *frame, +				    xlator_t *this, +				    const char *volume); + +typedef int32_t (*mop_stats_t) (call_frame_t *frame, +				xlator_t *this, +				int32_t flags); + +typedef int32_t (*mop_getspec_t) (call_frame_t *frame, +				  xlator_t *this, +				  const char *key, +				  int32_t flag); + +typedef int32_t (*fop_checksum_t) (call_frame_t *frame, +				   xlator_t *this, +				   loc_t *loc, +				   int32_t flag); + +struct xlator_mops { +	mop_stats_t            stats; +	mop_getspec_t          getspec; + +	mop_stats_cbk_t        stats_cbk; +	mop_getspec_cbk_t      getspec_cbk; +}; + + +typedef int32_t (*fop_lookup_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     inode_t *inode, +				     struct stat *buf, +				     dict_t *xattr); + +typedef int32_t (*fop_stat_cbk_t) (call_frame_t *frame, +				   void *cookie, +				   xlator_t *this, +				   int32_t op_ret, +				   int32_t op_errno, +				   struct stat *buf); + +typedef int32_t (*fop_fstat_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    struct stat *buf); + +typedef int32_t (*fop_chmod_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    struct stat *buf); + +typedef int32_t (*fop_fchmod_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     struct stat *buf); + +typedef int32_t (*fop_chown_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    struct stat *buf); + +typedef int32_t (*fop_fchown_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     struct stat *buf); + +typedef int32_t (*fop_truncate_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       struct stat *buf); + +typedef int32_t (*fop_ftruncate_cbk_t) (call_frame_t *frame, +					void *cookie, +					xlator_t *this, +					int32_t op_ret, +					int32_t op_errno, +					struct stat *buf); + +typedef int32_t (*fop_utimens_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      struct stat *buf); + +typedef int32_t (*fop_access_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno); + +typedef int32_t (*fop_readlink_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       const char *path); + +typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    inode_t *inode, +				    struct stat *buf); + +typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    inode_t *inode, +				    struct stat *buf); + +typedef int32_t (*fop_unlink_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno); + +typedef int32_t (*fop_rmdir_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno); + +typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      inode_t *inode, +				      struct stat *buf); + +typedef int32_t (*fop_rename_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     struct stat *buf); + +typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame, +				   void *cookie, +				   xlator_t *this, +				   int32_t op_ret, +				   int32_t op_errno, +				   inode_t *inode, +				   struct stat *buf); + +typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     fd_t *fd, +				     inode_t *inode, +				     struct stat *buf); + +typedef int32_t (*fop_open_cbk_t) (call_frame_t *frame, +				   void *cookie, +				   xlator_t *this, +				   int32_t op_ret, +				   int32_t op_errno, +				   fd_t *fd); + +typedef int32_t (*fop_readv_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno, +				    struct iovec *vector, +				    int32_t count, +				    struct stat *stbuf); + +typedef int32_t (*fop_writev_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     struct stat *stbuf); + +typedef int32_t (*fop_flush_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno); + +typedef int32_t (*fop_fsync_cbk_t) (call_frame_t *frame, +				    void *cookie, +				    xlator_t *this, +				    int32_t op_ret, +				    int32_t op_errno); + +typedef int32_t (*fop_opendir_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      fd_t *fd); + +typedef int32_t (*fop_getdents_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       dir_entry_t *entries, +				       int32_t count); + +typedef int32_t (*fop_fsyncdir_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno); + +typedef int32_t (*fop_statfs_cbk_t) (call_frame_t *frame, +				     void *cookie, +				     xlator_t *this, +				     int32_t op_ret, +				     int32_t op_errno, +				     struct statvfs *buf); + +typedef int32_t (*fop_setxattr_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno); + +typedef int32_t (*fop_getxattr_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       dict_t *dict); + +typedef int32_t (*fop_removexattr_cbk_t) (call_frame_t *frame, +					  void *cookie, +					  xlator_t *this, +					  int32_t op_ret, +					  int32_t op_errno); + +typedef int32_t (*fop_lk_cbk_t) (call_frame_t *frame, +				 void *cookie, +				 xlator_t *this, +				 int32_t op_ret, +				 int32_t op_errno, +				 struct flock *flock); + +typedef int32_t (*fop_inodelk_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno); + +typedef int32_t (*fop_finodelk_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno); + +typedef int32_t (*fop_entrylk_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno); + +typedef int32_t (*fop_fentrylk_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno); + +typedef int32_t (*fop_setdents_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno); + +typedef int32_t (*fop_readdir_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      gf_dirent_t *entries); + +typedef int32_t (*fop_xattrop_cbk_t) (call_frame_t *frame, +				      void *cookie, +				      xlator_t *this, +				      int32_t op_ret, +				      int32_t op_errno, +				      dict_t *xattr); + +typedef int32_t (*fop_fxattrop_cbk_t) (call_frame_t *frame, +				       void *cookie, +				       xlator_t *this, +				       int32_t op_ret, +				       int32_t op_errno, +				       dict_t *xattr); + +typedef int32_t (*fop_lookup_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *loc, +				 dict_t *xattr_req); + +typedef int32_t (*fop_stat_t) (call_frame_t *frame, +			       xlator_t *this, +			       loc_t *loc); + +typedef int32_t (*fop_fstat_t) (call_frame_t *frame, +				xlator_t *this, +				fd_t *fd); + +typedef int32_t (*fop_chmod_t) (call_frame_t *frame, +				xlator_t *this, +				loc_t *loc, +				mode_t mode); + +typedef int32_t (*fop_fchmod_t) (call_frame_t *frame, +				 xlator_t *this, +				 fd_t *fd, +				 mode_t mode); + +typedef int32_t (*fop_chown_t) (call_frame_t *frame, +				xlator_t *this, +				loc_t *loc, +				uid_t uid, +				gid_t gid); + +typedef int32_t (*fop_fchown_t) (call_frame_t *frame, +				 xlator_t *this, +				 fd_t *fd, +				 uid_t uid, +				 gid_t gid); + +typedef int32_t (*fop_truncate_t) (call_frame_t *frame, +				   xlator_t *this, +				   loc_t *loc, +				   off_t offset); + +typedef int32_t (*fop_ftruncate_t) (call_frame_t *frame, +				    xlator_t *this, +				    fd_t *fd, +				    off_t offset); + +typedef int32_t (*fop_utimens_t) (call_frame_t *frame, +				  xlator_t *this, +				  loc_t *loc, +				  struct timespec tv[2]); + +typedef int32_t (*fop_access_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *loc, +				 int32_t mask); + +typedef int32_t (*fop_readlink_t) (call_frame_t *frame, +				   xlator_t *this, +				   loc_t *loc, +				   size_t size); + +typedef int32_t (*fop_mknod_t) (call_frame_t *frame, +				xlator_t *this, +				loc_t *loc, +				mode_t mode, +				dev_t rdev); + +typedef int32_t (*fop_mkdir_t) (call_frame_t *frame, +				xlator_t *this, +				loc_t *loc, +				mode_t mode); + +typedef int32_t (*fop_unlink_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *loc); + +typedef int32_t (*fop_rmdir_t) (call_frame_t *frame, +				xlator_t *this, +				loc_t *loc); + +typedef int32_t (*fop_symlink_t) (call_frame_t *frame, +				  xlator_t *this, +				  const char *linkname, +				  loc_t *loc); + +typedef int32_t (*fop_rename_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *oldloc, +				 loc_t *newloc); + +typedef int32_t (*fop_link_t) (call_frame_t *frame, +			       xlator_t *this, +			       loc_t *oldloc, +			       loc_t *newloc); + +typedef int32_t (*fop_create_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *loc, +				 int32_t flags, +				 mode_t mode, +				 fd_t *fd); + +typedef int32_t (*fop_open_t) (call_frame_t *frame, +			       xlator_t *this, +			       loc_t *loc, +			       int32_t flags, +			       fd_t *fd); + +typedef int32_t (*fop_readv_t) (call_frame_t *frame, +				xlator_t *this, +				fd_t *fd, +				size_t size, +				off_t offset); + +typedef int32_t (*fop_writev_t) (call_frame_t *frame, +				 xlator_t *this, +				 fd_t *fd, +				 struct iovec *vector, +				 int32_t count, +				 off_t offset); + +typedef int32_t (*fop_flush_t) (call_frame_t *frame, +				xlator_t *this, +				fd_t *fd); + +typedef int32_t (*fop_fsync_t) (call_frame_t *frame, +				xlator_t *this, +				fd_t *fd, +				int32_t datasync); + +typedef int32_t (*fop_opendir_t) (call_frame_t *frame, +				  xlator_t *this, +				  loc_t *loc, +				  fd_t *fd); + +typedef int32_t (*fop_getdents_t) (call_frame_t *frame, +				   xlator_t *this, +				   fd_t *fd, +				   size_t size, +				   off_t offset, +				   int32_t flag); + +typedef int32_t (*fop_fsyncdir_t) (call_frame_t *frame, +				   xlator_t *this, +				   fd_t *fd, +				   int32_t datasync); + +typedef int32_t (*fop_statfs_t) (call_frame_t *frame, +				 xlator_t *this, +				 loc_t *loc); + +typedef int32_t (*fop_setxattr_t) (call_frame_t *frame, +				   xlator_t *this, +				   loc_t *loc, +				   dict_t *dict, +				   int32_t flags); + +typedef int32_t (*fop_getxattr_t) (call_frame_t *frame, +				   xlator_t *this, +				   loc_t *loc, +				   const char *name); + +typedef int32_t (*fop_removexattr_t) (call_frame_t *frame, +				      xlator_t *this, +				      loc_t *loc, +				      const char *name); + +typedef int32_t (*fop_lk_t) (call_frame_t *frame, +			     xlator_t *this, +			     fd_t *fd, +			     int32_t cmd, +			     struct flock *flock); + +typedef int32_t (*fop_inodelk_t) (call_frame_t *frame, +				  xlator_t *this, +				  loc_t *loc, +				  int32_t cmd, +				  struct flock *flock); + +typedef int32_t (*fop_finodelk_t) (call_frame_t *frame, +				   xlator_t *this, +				   fd_t *fd, +				   int32_t cmd, +				   struct flock *flock); + +typedef int32_t (*fop_entrylk_t) (call_frame_t *frame, +				  xlator_t *this, loc_t *loc, +				  const char *basename, entrylk_cmd cmd, +				  entrylk_type type); + +typedef int32_t (*fop_fentrylk_t) (call_frame_t *frame, +				   xlator_t *this, fd_t *fd, +				   const char *basename, entrylk_cmd cmd, +				   entrylk_type type); + +typedef int32_t (*fop_setdents_t) (call_frame_t *frame, +				   xlator_t *this, +				   fd_t *fd, +				   int32_t flags, +				   dir_entry_t *entries, +				   int32_t count); + +typedef int32_t (*fop_readdir_t) (call_frame_t *frame, +				  xlator_t *this, +				  fd_t *fd, +				  size_t size, +				  off_t offset); + +typedef int32_t (*fop_xattrop_t) (call_frame_t *frame, +				  xlator_t *this, +				  loc_t *loc, +				  gf_xattrop_flags_t optype, +				  dict_t *xattr); + +typedef int32_t (*fop_fxattrop_t) (call_frame_t *frame, +				   xlator_t *this, +				   fd_t *fd, +				   gf_xattrop_flags_t optype, +				   dict_t *xattr); + +struct xlator_fops { +	fop_lookup_t         lookup; +	fop_stat_t           stat; +	fop_fstat_t          fstat; +	fop_chmod_t          chmod; +	fop_fchmod_t         fchmod; +	fop_chown_t          chown; +	fop_fchown_t         fchown; +	fop_truncate_t       truncate; +	fop_ftruncate_t      ftruncate; +	fop_utimens_t        utimens; +	fop_access_t         access; +	fop_readlink_t       readlink; +	fop_mknod_t          mknod; +	fop_mkdir_t          mkdir; +	fop_unlink_t         unlink; +	fop_rmdir_t          rmdir; +	fop_symlink_t        symlink; +	fop_rename_t         rename; +	fop_link_t           link; +	fop_create_t         create; +	fop_open_t           open; +	fop_readv_t          readv; +	fop_writev_t         writev; +	fop_flush_t          flush; +	fop_fsync_t          fsync; +	fop_opendir_t        opendir; +	fop_readdir_t        readdir; +	fop_fsyncdir_t       fsyncdir; +	fop_statfs_t         statfs; +	fop_setxattr_t       setxattr; +	fop_getxattr_t       getxattr; +	fop_removexattr_t    removexattr; +	fop_lk_t             lk; +	fop_inodelk_t        inodelk; +	fop_finodelk_t       finodelk; +	fop_entrylk_t        entrylk; +	fop_fentrylk_t       fentrylk; +	fop_setdents_t       setdents; +	fop_getdents_t       getdents; +	fop_checksum_t       checksum; +	fop_xattrop_t        xattrop; +	fop_fxattrop_t        fxattrop; + +	/* these entries are used for a typechecking hack in STACK_WIND _only_ */ +	fop_lookup_cbk_t         lookup_cbk; +	fop_stat_cbk_t           stat_cbk; +	fop_fstat_cbk_t          fstat_cbk; +	fop_chmod_cbk_t          chmod_cbk; +	fop_fchmod_cbk_t         fchmod_cbk; +	fop_chown_cbk_t          chown_cbk; +	fop_fchown_cbk_t         fchown_cbk; +	fop_truncate_cbk_t       truncate_cbk; +	fop_ftruncate_cbk_t      ftruncate_cbk; +	fop_utimens_cbk_t        utimens_cbk; +	fop_access_cbk_t         access_cbk; +	fop_readlink_cbk_t       readlink_cbk; +	fop_mknod_cbk_t          mknod_cbk; +	fop_mkdir_cbk_t          mkdir_cbk; +	fop_unlink_cbk_t         unlink_cbk; +	fop_rmdir_cbk_t          rmdir_cbk; +	fop_symlink_cbk_t        symlink_cbk; +	fop_rename_cbk_t         rename_cbk; +	fop_link_cbk_t           link_cbk; +	fop_create_cbk_t         create_cbk; +	fop_open_cbk_t           open_cbk; +	fop_readv_cbk_t          readv_cbk; +	fop_writev_cbk_t         writev_cbk; +	fop_flush_cbk_t          flush_cbk; +	fop_fsync_cbk_t          fsync_cbk; +	fop_opendir_cbk_t        opendir_cbk; +	fop_readdir_cbk_t        readdir_cbk; +	fop_fsyncdir_cbk_t       fsyncdir_cbk; +	fop_statfs_cbk_t         statfs_cbk; +	fop_setxattr_cbk_t       setxattr_cbk; +	fop_getxattr_cbk_t       getxattr_cbk; +	fop_removexattr_cbk_t    removexattr_cbk; +	fop_lk_cbk_t             lk_cbk; +	fop_inodelk_cbk_t        inodelk_cbk; +	fop_finodelk_cbk_t       finodelk_cbk; +	fop_entrylk_cbk_t        entrylk_cbk; +	fop_fentrylk_cbk_t       fentrylk_cbk; +	fop_setdents_cbk_t       setdents_cbk; +	fop_getdents_cbk_t       getdents_cbk; +	fop_checksum_cbk_t       checksum_cbk; +	fop_xattrop_cbk_t        xattrop_cbk; +	fop_fxattrop_cbk_t       fxattrop_cbk; +}; + +typedef int32_t (*cbk_forget_t) (xlator_t *this, +				 inode_t *inode); + +typedef int32_t (*cbk_release_t) (xlator_t *this, +				  fd_t *fd); + +struct xlator_cbks { +	cbk_forget_t    forget; +	cbk_release_t   release; +	cbk_release_t   releasedir; +}; + +typedef struct xlator_list { +	xlator_t           *xlator; +	struct xlator_list *next; +} xlator_list_t; + +/* Add possible new type of option you may need */ +typedef enum { +  	GF_OPTION_TYPE_ANY = 0, +  	GF_OPTION_TYPE_STR, +  	GF_OPTION_TYPE_INT, +  	GF_OPTION_TYPE_SIZET, +  	GF_OPTION_TYPE_PERCENT, +  	GF_OPTION_TYPE_BOOL, +  	GF_OPTION_TYPE_XLATOR, +  	GF_OPTION_TYPE_PATH, +  	GF_OPTION_TYPE_TIME, +} volume_option_type_t; + +#define ZR_VOLUME_MAX_NUM_KEY    4 +#define ZR_OPTION_MAX_ARRAY_SIZE 64 + +/* Each translator should define this structure */ +typedef struct volume_options { +  	char                *key[ZR_VOLUME_MAX_NUM_KEY];  +	                           /* different key, same meaning */ +  	volume_option_type_t type;        +  	int64_t              min;  /* -1 means no range */ +  	int64_t              max;  /* -1 means no range */ +  	char                *value[ZR_OPTION_MAX_ARRAY_SIZE];   +                                   /* If specified, will check for one of  +				      the value from this array */ +	char                *description; /* about the key */ +} volume_option_t; + +typedef struct vol_opt_list { +	struct list_head  list; +	volume_option_t  *given_opt; +} volume_opt_list_t; + +struct _xlator { +	/* Built during parsing */ +	char          *name; +	char          *type; +	xlator_t      *next; +	xlator_t      *prev; +	xlator_list_t *parents; +	xlator_list_t *children; +	dict_t        *options; +	 +	/* Set after doing dlopen() */ +	struct xlator_fops *fops; +	struct xlator_mops *mops; +	struct xlator_cbks *cbks; +	struct list_head   volume_options;  /* list of volume_option_t */ + +	void              (*fini) (xlator_t *this); +	int32_t           (*init) (xlator_t *this); +	event_notify_fn_t notify; + +	/* Misc */ +	glusterfs_ctx_t  *ctx; +	inode_table_t    *itable; +	char              ready; +	char              trace; +	char              init_succeeded; +	void             *private; +}; + +int validate_xlator_volume_options (xlator_t *xl, volume_option_t *opt); + +int32_t xlator_set_type (xlator_t *xl, const char *type); + +xlator_t *file_to_xlator_tree (glusterfs_ctx_t *ctx, +			       FILE *fp); + + +int32_t xlator_tree_init (xlator_t *xl); +int32_t xlator_tree_free (xlator_t *xl); + +void xlator_tree_fini (xlator_t *xl); + +void xlator_foreach (xlator_t *this, +		     void (*fn) (xlator_t *each, +				 void *data), +		     void *data); + +xlator_t *xlator_search_by_name (xlator_t *any, const char *name); + +void inode_destroy_notify (inode_t *inode, const char *xlname); + +int loc_copy (loc_t *dst, loc_t *src); +#define loc_dup(src, dst) loc_copy(dst, src) +void loc_wipe (loc_t *loc); + +#define GF_STAT_PRINT_FMT_STR "%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32"\n" + +#define GF_STAT_SCAN_FMT_STR "%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32"\n" + +#define GF_STATFS_PRINT_FMT_STR "%"PRIx32",%"PRIx32",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32"\n" + +#define GF_STATFS_SCAN_FMT_STR "%"SCNx32",%"SCNx32",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32"\n" + +#endif /* _XLATOR_H */ +  | 
