diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2016-11-22 10:18:50 -0500 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2016-11-29 12:49:54 -0800 |
commit | e34a783557e504f0793f18beb850bcebbb2af7fa (patch) | |
tree | 839626884b3bb3e511cff93e494a7f3faf8292d3 /xlators/cluster/map/src | |
parent | 71dd2e914d4a537bf74e1ec3a24512fc83bacb1d (diff) |
all: remove dead translators
The following have been completely removed from the source tree,
makefiles, configure script, and RPM specfile.
cluster/afr/pump
cluster/ha
cluster/map
features/filter
features/mac-compat
features/path-convertor
features/protect
Change-Id: I2f966999ac3c180296ff90c1799548fba504f88f
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/15906
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/map/src')
-rw-r--r-- | xlators/cluster/map/src/Makefile.am | 17 | ||||
-rw-r--r-- | xlators/cluster/map/src/map-helper.c | 343 | ||||
-rw-r--r-- | xlators/cluster/map/src/map-mem-types.h | 24 | ||||
-rw-r--r-- | xlators/cluster/map/src/map.c | 2561 | ||||
-rw-r--r-- | xlators/cluster/map/src/map.h | 67 |
5 files changed, 0 insertions, 3012 deletions
diff --git a/xlators/cluster/map/src/Makefile.am b/xlators/cluster/map/src/Makefile.am deleted file mode 100644 index 209cafa7c1b..00000000000 --- a/xlators/cluster/map/src/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -xlator_LTLIBRARIES = map.la -xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/testing/cluster - -map_la_LDFLAGS = -module $(GF_XLATOR_DEFAULT_LDFLAGS) - - -map_la_SOURCES = map.c map-helper.c -map_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la - -noinst_HEADERS = map.h - -AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src - -AM_CFLAGS = -Wall $(GF_CFLAGS) - -CLEANFILES = - diff --git a/xlators/cluster/map/src/map-helper.c b/xlators/cluster/map/src/map-helper.c deleted file mode 100644 index c5f828ae6d1..00000000000 --- a/xlators/cluster/map/src/map-helper.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - Copyright (c) 2009-2012 Red Hat, Inc. <http://www.redhat.com> - This file is part of GlusterFS. - - This file is licensed to you under your choice of the GNU Lesser - General Public License, version 3 or any later version (LGPLv3 or - later), or the GNU General Public License, version 2 (GPLv2), in all - cases as published by the Free Software Foundation. -*/ -#include "xlator.h" -#include "map.h" - - -xlator_t * -map_subvol_next (xlator_t *this, xlator_t *prev) -{ - map_private_t *priv = NULL; - xlator_t *next = NULL; - int i = 0; - - priv = this->private; - - for (i = 0; i < priv->child_count; i++) { - if (priv->xlarray[i].xl == prev) { - if ((i + 1) < priv->child_count) - next = priv->xlarray[i + 1].xl; - break; - } - } - - return next; -} - -int -map_subvol_cnt (xlator_t *this, xlator_t *subvol) -{ - int i = 0; - int ret = -1; - map_private_t *priv = NULL; - - priv = this->private; - - for (i = 0; i < priv->child_count; i++) { - if (subvol == priv->xlarray[i].xl) { - ret = i; - break; - } - } - - return ret; -} - -int -map_itransform (xlator_t *this, xlator_t *subvol, uint64_t x, uint64_t *y_p) -{ - map_private_t *priv = NULL; - int cnt = 0; - int max = 0; - uint64_t y = 0; - - if (x == ((uint64_t) -1)) { - y = (uint64_t) -1; - goto out; - } - - priv = this->private; - - max = priv->child_count; - cnt = map_subvol_cnt (this, subvol); - - y = ((x * max) + cnt); - -out: - if (y_p) - *y_p = y; - - return 0; -} - - -int -map_deitransform (xlator_t *this, uint64_t y, xlator_t **subvol_p, - uint64_t *x_p) -{ - int cnt = 0; - int max = 0; - uint64_t x = 0; - xlator_t *subvol = 0; - map_private_t *priv = NULL; - - priv = this->private; - max = priv->child_count; - - cnt = y % max; - x = y / max; - - subvol = priv->xlarray[cnt].xl; - - if (subvol_p) - *subvol_p = subvol; - - if (x_p) - *x_p = x; - - return 0; -} - - -xlator_t * -get_mapping_subvol_from_path (xlator_t *this, const char *path) -{ - map_private_t *priv = NULL; - struct map_pattern *map = NULL; - - /* To make sure we handle '/' properly */ - if (!strcmp (path, "/")) - return NULL; - - priv = this->private; - - map = priv->map; - while (map) { - if (!strncmp (map->directory, path, map->dir_len)) { - if ((path[map->dir_len] == '/') || - (path[map->dir_len] == '\0')) { - return map->xl; - } - } - - map = map->next; - } - - return priv->default_xl; -} - -xlator_t * -get_mapping_subvol_from_ctx (xlator_t *this, inode_t *inode) -{ - uint64_t subvol = 0; - int ret = -1; - - ret = inode_ctx_get (inode, this, &subvol); - if (ret != 0) - return NULL; - - return (xlator_t *)(long)subvol; -} - -int -check_multiple_volume_entry (xlator_t *this, - xlator_t *subvol) -{ - int ret = -1; - int idx = 0; - map_private_t *priv = NULL; - - priv = this->private; - - for (idx = 0; idx < priv->child_count; idx++) { - if (priv->xlarray[idx].xl == subvol) { - if (priv->xlarray[idx].mapped) { - gf_log (this->name, GF_LOG_ERROR, - "subvolume '%s' is already mapped", - subvol->name); - goto out; - } - priv->xlarray[idx].mapped = 1; - ret = 0; - goto out; - } - } - - gf_log (this->name, GF_LOG_ERROR, - "subvolume '%s' is not found", - subvol->name); - - out: - return ret; -} - -int -verify_dir_and_assign_subvol (xlator_t *this, - const char *directory, - const char *subvol) -{ - int default_flag = 0; - int ret = -1; - int idx = 0; - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - struct map_pattern *tmp_map = NULL; - - priv = this->private; - - /* check if directory is valid, ie, its a top level dir, and - * not includes a '*' in it. - */ - if (!strcmp ("*", directory)) { - default_flag = 1; - } else { - if (directory[0] != '/') { - gf_log (this->name, GF_LOG_ERROR, - "map takes absolute path, starting with '/'. " - "not '%s'", directory); - goto out; - } - for (idx = 1; idx < (strlen (directory) - 1); idx++) { - if (directory[idx] == '/') { - gf_log (this->name, GF_LOG_ERROR, - "map takes only top level directory, " - "not '%s'", directory); - goto out; - } - } - } - - /* Assign proper subvolume */ - trav = this->children; - while (trav) { - if (!strcmp (trav->xlator->name, subvol)) { - - /* Check if there is another directory for - * same volume, if yes, return error. - */ - ret = check_multiple_volume_entry (this, - trav->xlator); - if (ret != 0) { - goto out; - } - - ret = 0; - if (default_flag) { - if (priv->default_xl) { - ret = -1; - gf_log (this->name, GF_LOG_ERROR, - "'*' specified more than " - "once. don't confuse me!!!"); - } - - priv->default_xl = trav->xlator; - goto out; - } - - tmp_map = GF_CALLOC (1, sizeof (struct map_pattern), - gf_map_mt_map_pattern); - tmp_map->xl = trav->xlator; - tmp_map->dir_len = strlen (directory); - - /* make sure that the top level directory starts - * with '/' and ends without '/' - */ - tmp_map->directory = gf_strdup (directory); - if (directory[tmp_map->dir_len - 1] == '/') { - tmp_map->dir_len--; - } - - if (!priv->map) - priv->map = tmp_map; - else { - struct map_pattern *trav_map = NULL; - trav_map = priv->map; - while (trav_map->next) - trav_map = trav_map->next; - trav_map->next = tmp_map; - } - - goto out; - } - - trav = trav->next; - } - - gf_log (this->name, GF_LOG_ERROR, - "map volume '%s' is not proper subvolume", subvol); - - out: - return ret; -} - -int -assign_default_subvol (xlator_t *this, const char *default_xl) -{ - int ret = -1; - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - - priv = this->private; - trav = this->children; - - while (trav) { - if (!strcmp (trav->xlator->name, default_xl)) { - ret = check_multiple_volume_entry (this, - trav->xlator); - if (ret != 0) { - goto out; - } - if (priv->default_xl) - gf_log (this->name, GF_LOG_WARNING, - "default-volume option provided, " - "overriding earlier '*' option"); - priv->default_xl = trav->xlator; - return 0; - } - trav = trav->next; - } - - gf_log (this->name, GF_LOG_ERROR, - "default-volume value is not an valid subvolume. check again"); - out: - return -1; -} - -void -verify_if_all_subvolumes_got_used (xlator_t *this) -{ - int idx = 0; - map_private_t *priv = NULL; - - priv = this->private; - - for (idx = 0; idx < priv->child_count; idx++) { - if (!priv->xlarray[idx].mapped) { - if (!priv->default_xl) { - priv->default_xl = priv->xlarray[idx].xl; - priv->xlarray[idx].mapped = 1; - } else { - gf_log (this->name, GF_LOG_WARNING, - "subvolume '%s' is not mapped to " - "any directory", - priv->xlarray[idx].xl->name); - } - } - } - - if (!priv->default_xl) { - gf_log (this->name, GF_LOG_WARNING, - "default subvolume not specified, filesystem " - "may not work properly. Check 'map' translator " - "documentation for more info"); - } - - return ; -} diff --git a/xlators/cluster/map/src/map-mem-types.h b/xlators/cluster/map/src/map-mem-types.h deleted file mode 100644 index 3e89f4736e4..00000000000 --- a/xlators/cluster/map/src/map-mem-types.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> - This file is part of GlusterFS. - - This file is licensed to you under your choice of the GNU Lesser - General Public License, version 3 or any later version (LGPLv3 or - later), or the GNU General Public License, version 2 (GPLv2), in all - cases as published by the Free Software Foundation. -*/ - -#ifndef __MAP_MEM_TYPES_H__ -#define __MAP_MEM_TYPES_H__ - -#include "mem-types.h" - -enum gf_map_mem_types_ { - gf_map_mt_map_private_t = gf_common_mt_end + 1, - gf_map_mt_map_local_t, - gf_map_mt_map_xlator_array, - gf_map_mt_map_pattern, - gf_map_mt_end -}; -#endif - diff --git a/xlators/cluster/map/src/map.c b/xlators/cluster/map/src/map.c deleted file mode 100644 index fbb56dbc554..00000000000 --- a/xlators/cluster/map/src/map.c +++ /dev/null @@ -1,2561 +0,0 @@ -/* - Copyright (c) 2010-2012 Red Hat, Inc. <http://www.redhat.com> - This file is part of GlusterFS. - - This file is licensed to you under your choice of the GNU Lesser - General Public License, version 3 or any later version (LGPLv3 or - later), or the GNU General Public License, version 2 (GPLv2), in all - cases as published by the Free Software Foundation. -*/ -#include "xlator.h" -#include "map.h" - -/* TODO : - * -> support for 'get' 'put' API in through xattrs. - * -> define the behavior of notify() - */ - -static int32_t -map_stat_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *buf) - -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, buf); - return 0; -} - -static int32_t -map_setattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *statpre, - struct iatt *statpost) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, statpre->ia_ino, &statpre->ia_ino); - map_itransform (this, prev->this, statpost->ia_ino, &statpost->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, statpre, statpost); - return 0; -} - -static int32_t -map_fsetattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *statpre, - struct iatt *statpost) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, statpre->ia_ino, &statpre->ia_ino); - map_itransform (this, prev->this, statpost->ia_ino, &statpost->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, statpre, statpost); - return 0; -} - -static int32_t -map_truncate_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *prebuf, - struct iatt *postbuf) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, postbuf->ia_ino, &postbuf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf); - return 0; -} - -static int32_t -map_ftruncate_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *prebuf, - struct iatt *postbuf) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, postbuf->ia_ino, &postbuf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf); - return 0; -} - - -static int32_t -map_access_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - -static int32_t -map_readlink_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - const char *path, - struct iatt *sbuf) -{ - STACK_UNWIND (frame, op_ret, op_errno, path, sbuf); - return 0; -} - -static int32_t -map_unlink_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *preparent, - struct iatt *postparent) -{ - STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent); - return 0; -} - -static int32_t -map_rmdir_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *preparent, - struct iatt *postparent) -{ - STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent); - return 0; -} - - -static int32_t -map_rename_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *buf, - struct iatt *preoldparent, - struct iatt *postoldparent, - struct iatt *prenewparent, - struct iatt *postnewparent) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, buf); - return 0; -} - -static int32_t -map_link_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct iatt *buf, - struct iatt *preparent, - struct iatt *postparent) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, inode, buf); - return 0; -} - -static int32_t -map_open_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - fd_t *fd) -{ - STACK_UNWIND (frame, op_ret, op_errno, fd); - return 0; -} - -static int32_t -map_readv_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iovec *vector, - int32_t count, - struct iatt *stbuf, - struct iobref *iobref) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, vector, count, stbuf, iobref); - return 0; -} - -static int32_t -map_writev_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *prebuf, - struct iatt *postbuf) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, postbuf->ia_ino, &postbuf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf); - return 0; -} - -static int32_t -map_flush_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_fsync_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *prebuf, - struct iatt *postbuf) -{ - STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf); - return 0; -} - - -static int32_t -map_fstat_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct iatt *buf) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, buf); - return 0; -} - - -static int32_t -map_getdents_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - dir_entry_t *entries, - int32_t count) -{ - STACK_UNWIND (frame, op_ret, op_errno, entries, count); - return 0; -} - - -static int32_t -map_setdents_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - -static int32_t -map_fsyncdir_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_setxattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_fsetxattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_fgetxattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) -{ - STACK_UNWIND (frame, op_ret, op_errno, dict); - return 0; -} - - - -static int32_t -map_getxattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) -{ - STACK_UNWIND (frame, op_ret, op_errno, dict); - return 0; -} - -int32_t -map_xattrop_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) -{ - STACK_UNWIND (frame, op_ret, op_errno, dict); - return 0; -} - -int32_t -map_fxattrop_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) -{ - STACK_UNWIND (frame, op_ret, op_errno, dict); - return 0; -} - -static int32_t -map_removexattr_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno) -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_lk_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct gf_flock *lock) -{ - STACK_UNWIND (frame, op_ret, op_errno, lock); - return 0; -} - - -static int32_t -map_inodelk_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno) - -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - - -static int32_t -map_finodelk_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno) - -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_entrylk_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno) - -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - - -static int32_t -map_fentrylk_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno) - -{ - STACK_UNWIND (frame, op_ret, op_errno); - return 0; -} - -static int32_t -map_newentry_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct iatt *buf, - struct iatt *preparent, - struct iatt *postparent) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, inode, buf); - return 0; - -} - - -static int32_t -map_create_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - fd_t *fd, - inode_t *inode, - struct iatt *buf, - struct iatt *preparent, - struct iatt *postparent) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf); - return 0; -} - - -/* - * map_normalize_stats - - */ -void -map_normalize_stats (struct statvfs *buf, - unsigned long bsize, - unsigned long frsize) -{ - double factor; - - if (buf->f_bsize != bsize) { - factor = ((double) buf->f_bsize) / bsize; - buf->f_bsize = bsize; - buf->f_bfree = (fsblkcnt_t) (factor * buf->f_bfree); - buf->f_bavail = (fsblkcnt_t) (factor * buf->f_bavail); - } - - if (buf->f_frsize != frsize) { - factor = ((double) buf->f_frsize) / frsize; - buf->f_frsize = frsize; - buf->f_blocks = (fsblkcnt_t) (factor * buf->f_blocks); - } -} - - -int32_t -map_statfs_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - struct statvfs *stbuf) -{ - struct statvfs *dict_buf = NULL; - map_local_t *local = NULL; - int this_call_cnt = 0; - unsigned long bsize; - unsigned long frsize; - - local = frame->local; - - LOCK (&frame->lock); - { - this_call_cnt = --local->call_count; - - if (op_ret == -1) { - local->op_errno = op_errno; - goto unlock; - } - local->op_ret = 0; - - /* when a call is successful, add it to local->dict */ - dict_buf = &local->statvfs; - - if (dict_buf->f_bsize != 0) { - bsize = max (dict_buf->f_bsize, - stbuf->f_bsize); - - frsize = max (dict_buf->f_frsize, - stbuf->f_frsize); - map_normalize_stats(dict_buf, bsize, frsize); - map_normalize_stats(stbuf, bsize, frsize); - } else { - dict_buf->f_bsize = stbuf->f_bsize; - dict_buf->f_frsize = stbuf->f_frsize; - } - - dict_buf->f_blocks += stbuf->f_blocks; - dict_buf->f_bfree += stbuf->f_bfree; - dict_buf->f_bavail += stbuf->f_bavail; - dict_buf->f_files += stbuf->f_files; - dict_buf->f_ffree += stbuf->f_ffree; - dict_buf->f_favail += stbuf->f_favail; - dict_buf->f_fsid = stbuf->f_fsid; - dict_buf->f_flag = stbuf->f_flag; - dict_buf->f_namemax = stbuf->f_namemax; - } -unlock: - UNLOCK (&frame->lock); - - if (!this_call_cnt) { - STACK_UNWIND (frame, local->op_ret, local->op_errno, - &local->statvfs); - } - - return 0; -} - -int32_t -map_single_lookup_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct iatt *buf, - dict_t *dict, - struct iatt *postparent) -{ - call_frame_t *prev = NULL; - prev = cookie; - - map_itransform (this, prev->this, buf->ia_ino, &buf->ia_ino); - - STACK_UNWIND (frame, op_ret, op_errno, inode, buf, dict); - - return 0; -} - -int32_t -map_root_lookup_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct iatt *buf, - dict_t *dict, - struct iatt *postparent) -{ - int callcnt = 0; - map_local_t *local = NULL; - inode_t *tmp_inode = NULL; - dict_t *tmp_dict = NULL; - - local = frame->local; - LOCK (&frame->lock); - { - callcnt = --local->call_count; - if ((op_ret == 0) && (local->op_ret == -1)) { - local->op_ret = 0; - local->stbuf = *buf; - if (dict) - local->dict = dict_ref (dict); - local->inode = inode_ref (inode); - } - if (op_ret == -1) - local->op_errno = op_errno; - - } - UNLOCK (&frame->lock); - - if (!callcnt) { - tmp_dict = local->dict; - tmp_inode = local->inode; - - STACK_UNWIND (frame, local->op_ret, - local->op_errno, local->inode, - &local->stbuf, local->dict); - - inode_unref (local->inode); - if (tmp_dict) - dict_unref (tmp_dict); - } - - return 0; -} - - -int32_t -map_opendir_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - fd_t *fd) -{ - int callcnt = 0; - map_local_t *local = NULL; - fd_t *local_fd = NULL; - - local = frame->local; - LOCK (&frame->lock); - { - callcnt = --local->call_count; - - if (op_ret == -1) { - local->op_errno = op_errno; - goto unlock; - } - - local->op_ret = 0; - } - unlock: - UNLOCK (&frame->lock); - - if (!callcnt) { - local_fd = local->fd; - local->fd = NULL; - - STACK_UNWIND (frame, local->op_ret, - local->op_errno, local_fd); - - fd_unref (local_fd); - } - return 0; -} - -int32_t -map_single_readdir_cbk (call_frame_t *frame, - void *cookie, - xlator_t *this, - int32_t op_ret, - int32_t op_errno, - gf_dirent_t *entries) -{ - call_frame_t *prev = NULL; - gf_dirent_t *orig_entry = NULL; - - prev = cookie; - - list_for_each_entry (orig_entry, &entries->list, list) { - map_itransform (this, prev->this, orig_entry->d_ino, - &orig_entry->d_ino); - } - STACK_UNWIND (frame, op_ret, op_errno, entries); - - return 0; -} - - -int32_t -map_single_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, gf_dirent_t *entries) -{ - call_frame_t *prev = NULL; - gf_dirent_t *orig_entry = NULL; - - prev = cookie; - - list_for_each_entry (orig_entry, &entries->list, list) { - map_itransform (this, prev->this, orig_entry->d_ino, - &orig_entry->d_ino); - orig_entry->d_stat.ia_ino = orig_entry->d_ino; - } - STACK_UNWIND (frame, op_ret, op_errno, entries); - return 0; -} - -int -map_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, gf_dirent_t *orig_entries); - -int -map_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, gf_dirent_t *orig_entries); - -int -map_generic_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, gf_dirent_t *orig_entries, - int whichop) -{ - map_local_t *local = NULL; - gf_dirent_t entries; - gf_dirent_t *orig_entry = NULL; - gf_dirent_t *entry = NULL; - call_frame_t *prev = NULL; - xlator_t *subvol = NULL; - xlator_t *next_subvol = NULL; - off_t next_offset = 0; - int count = 0; - fd_t *local_fd = NULL; - - INIT_LIST_HEAD (&entries.list); - prev = cookie; - local = frame->local; - - if (op_ret < 0) - goto done; - - list_for_each_entry (orig_entry, &orig_entries->list, list) { - subvol = prev->this; - - entry = gf_dirent_for_name (orig_entry->d_name); - if (!entry) { - gf_log (this->name, GF_LOG_ERROR, - "memory allocation failed :("); - goto unwind; - } - - map_itransform (this, subvol, orig_entry->d_ino, - &entry->d_ino); - map_itransform (this, subvol, orig_entry->d_off, - &entry->d_off); - - if (whichop == GF_FOP_READDIRP) - entry->d_stat.ia_ino = entry->d_ino; - entry->d_type = orig_entry->d_type; - entry->d_len = orig_entry->d_len; - - list_add_tail (&entry->list, &entries.list); - count++; - next_offset = orig_entry->d_off; - } - - op_ret = count; - -done: - if (count == 0) { - /* non-zero next_offset means that - EOF is not yet hit on the current subvol - */ - if (next_offset == 0) { - next_subvol = map_subvol_next (this, prev->this); - } else { - next_subvol = prev->this; - } - - if (!next_subvol) { - goto unwind; - } - - if (whichop == GF_FOP_READDIR) - STACK_WIND (frame, map_readdir_cbk, next_subvol, - next_subvol->fops->readdir, local->fd, - local->size, 0); - else - STACK_WIND (frame, map_readdirp_cbk, next_subvol, - next_subvol->fops->readdirp, local->fd, - local->size, 0); - return 0; - } - -unwind: - if (op_ret < 0) - op_ret = 0; - - local_fd = local->fd; - local->fd = NULL; - - STACK_UNWIND (frame, op_ret, op_errno, &entries); - - fd_unref (local_fd); - - gf_dirent_free (&entries); - - return 0; -} - - -int -map_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, gf_dirent_t *orig_entries) -{ - map_generic_readdir_cbk (frame, cookie, this, op_ret, op_errno, - orig_entries, GF_FOP_READDIR); - return 0; -} - - -int -map_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, gf_dirent_t *orig_entries) -{ - map_generic_readdir_cbk (frame, cookie, this, op_ret, op_errno, - orig_entries, GF_FOP_READDIRP); - return 0; -} - - -/* Management operations */ - -static int32_t -map_checksum_cbk (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) -{ - STACK_UNWIND (frame, op_ret, op_errno, file_checksum, dir_checksum); - return 0; -} - - -/* Fops starts here */ - -int32_t -map_stat (call_frame_t *frame, - xlator_t *this, - loc_t *loc) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_stat_cbk, subvol, subvol->fops->stat, loc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_setattr (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - struct iatt *stbuf, - int32_t valid) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - GF_VALIDATE_OR_GOTO ("map", this, err); - GF_VALIDATE_OR_GOTO (this->name, frame, err); - GF_VALIDATE_OR_GOTO (this->name, loc, err); - GF_VALIDATE_OR_GOTO (this->name, loc->inode, err); - GF_VALIDATE_OR_GOTO (this->name, loc->path, err); - GF_VALIDATE_OR_GOTO (this->name, stbuf, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_setattr_cbk, subvol, - subvol->fops->setattr, loc, stbuf, valid); - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_fsetattr (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - struct iatt *stbuf, - int32_t valid) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - GF_VALIDATE_OR_GOTO ("map", this, err); - GF_VALIDATE_OR_GOTO (this->name, frame, err); - GF_VALIDATE_OR_GOTO (this->name, fd, err); - GF_VALIDATE_OR_GOTO (this->name, stbuf, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fsetattr_cbk, subvol, - subvol->fops->fsetattr, fd, stbuf, valid); - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_truncate (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - off_t offset) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_truncate_cbk, subvol, - subvol->fops->truncate, loc, offset); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_ftruncate (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - off_t offset) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_ftruncate_cbk, subvol, - subvol->fops->ftruncate, fd, offset); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_access (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - int32_t mask) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_access_cbk, subvol, - subvol->fops->access, loc, mask); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_readlink (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - size_t size) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_readlink_cbk, subvol, - subvol->fops->readlink, loc, size); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_unlink (call_frame_t *frame, - xlator_t *this, - loc_t *loc) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_unlink_cbk, subvol, subvol->fops->unlink, loc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_rmdir (call_frame_t *frame, - xlator_t *this, - loc_t *loc) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_rmdir_cbk, subvol, subvol->fops->rmdir, loc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_rename (call_frame_t *frame, - xlator_t *this, - loc_t *oldloc, - loc_t *newloc) -{ - int32_t op_errno = 1; - xlator_t *old_subvol = NULL; - xlator_t *new_subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (oldloc, err); - VALIDATE_OR_GOTO (oldloc->inode, err); - VALIDATE_OR_GOTO (oldloc->path, err); - VALIDATE_OR_GOTO (newloc, err); - - old_subvol = get_mapping_subvol_from_ctx (this, oldloc->inode); - if (!old_subvol) { - op_errno = EINVAL; - goto err; - } - - if (newloc->path) { - new_subvol = get_mapping_subvol_from_path (this, newloc->path); - if (new_subvol && (new_subvol != old_subvol)) { - op_errno = EXDEV; - goto err; - } - } - - STACK_WIND (frame, map_rename_cbk, old_subvol, - old_subvol->fops->rename, oldloc, newloc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_link (call_frame_t *frame, - xlator_t *this, - loc_t *oldloc, - loc_t *newloc) -{ - int32_t op_errno = 1; - xlator_t *old_subvol = NULL; - xlator_t *new_subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (oldloc, err); - VALIDATE_OR_GOTO (oldloc->inode, err); - VALIDATE_OR_GOTO (oldloc->path, err); - VALIDATE_OR_GOTO (newloc, err); - - old_subvol = get_mapping_subvol_from_ctx (this, oldloc->inode); - if (!old_subvol) { - op_errno = EINVAL; - goto err; - } - - if (newloc->path) { - new_subvol = get_mapping_subvol_from_path (this, newloc->path); - if (new_subvol && (new_subvol != old_subvol)) { - op_errno = EXDEV; - goto err; - } - } - - STACK_WIND (frame, map_link_cbk, old_subvol, - old_subvol->fops->link, oldloc, newloc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_open (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - int32_t flags, fd_t *fd, int wbflags) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_open_cbk, subvol, - subvol->fops->open, loc, flags, fd, wbflags); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_readv (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - size_t size, - off_t offset) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_readv_cbk, subvol, - subvol->fops->readv, fd, size, offset); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, 0, NULL, NULL); - - return 0; -} - -int32_t -map_writev (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - struct iovec *vector, - int32_t count, - off_t off, - struct iobref *iobref) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_writev_cbk, subvol, - subvol->fops->writev, fd, vector, count, off, iobref); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_flush (call_frame_t *frame, - xlator_t *this, - fd_t *fd) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_flush_cbk, subvol, subvol->fops->flush, fd); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_fsync (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - int32_t flags) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fsync_cbk, subvol, - subvol->fops->fsync, fd, flags); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_fstat (call_frame_t *frame, - xlator_t *this, - fd_t *fd) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fstat_cbk, subvol, subvol->fops->fstat, fd); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_getdents (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - size_t size, - off_t offset, - int32_t flag) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_getdents_cbk, subvol, - subvol->fops->getdents, fd, size, offset, flag); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_setdents (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - int32_t flags, - dir_entry_t *entries, - int32_t count) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_setdents_cbk, subvol, - subvol->fops->setdents, fd, flags, entries, count); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_fsyncdir (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - int32_t flags) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fsyncdir_cbk, subvol, - subvol->fops->fsyncdir, fd, flags); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - - - -int32_t -map_setxattr (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - dict_t *dict, - int32_t flags) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_setxattr_cbk, subvol, - subvol->fops->setxattr, loc, dict, flags); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_getxattr (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - const char *name) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_getxattr_cbk, subvol, - subvol->fops->getxattr, loc, name); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_fsetxattr (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - dict_t *dict, - int32_t flags) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fsetxattr_cbk, subvol, - subvol->fops->fsetxattr, fd, dict, flags); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_fgetxattr (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - const char *name) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fgetxattr_cbk, subvol, - subvol->fops->fgetxattr, fd, name); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_xattrop (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - gf_xattrop_flags_t flags, - dict_t *dict) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_xattrop_cbk, subvol, - subvol->fops->xattrop, loc, flags, dict); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_fxattrop (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - gf_xattrop_flags_t flags, - dict_t *dict) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fxattrop_cbk, subvol, - subvol->fops->fxattrop, fd, flags, dict); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_removexattr (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - const char *name) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_removexattr_cbk, subvol, - subvol->fops->removexattr, loc, name); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_lk (call_frame_t *frame, - xlator_t *this, - fd_t *fd, - int32_t cmd, - struct gf_flock *lock) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_lk_cbk, subvol, - subvol->fops->lk, fd, cmd, lock); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_inodelk (call_frame_t *frame, xlator_t *this, - const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *lock) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_inodelk_cbk, subvol, - subvol->fops->inodelk, volume, loc, cmd, lock); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_finodelk (call_frame_t *frame, xlator_t *this, - const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *lock) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_finodelk_cbk, subvol, - subvol->fops->finodelk, volume, fd, cmd, lock); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_entrylk (call_frame_t *frame, xlator_t *this, - const char *volume, loc_t *loc, const char *basename, - entrylk_cmd cmd, entrylk_type type) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_entrylk_cbk, subvol, - subvol->fops->entrylk, volume, loc, basename, cmd, type); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_fentrylk (call_frame_t *frame, xlator_t *this, - const char *volume, fd_t *fd, const char *basename, - entrylk_cmd cmd, entrylk_type type) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_fentrylk_cbk, subvol, - subvol->fops->fentrylk, volume, fd, basename, cmd, type); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_checksum (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - int32_t flag) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->inode, err); - VALIDATE_OR_GOTO (loc->path, err); - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - STACK_WIND (frame, map_checksum_cbk, subvol, - subvol->fops->checksum, loc, flag); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_mknod (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - mode_t mode, - dev_t rdev) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - subvol = get_mapping_subvol_from_path (this, loc->path); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - op_errno = inode_ctx_put (loc->inode, this, (uint64_t)(long)subvol); - if (op_errno != 0) { - gf_log (this->name, GF_LOG_ERROR, - "%s: failed to set subvolume ptr in inode ctx", - loc->path); - } - - STACK_WIND (frame, map_newentry_cbk, subvol, - subvol->fops->mknod, loc, mode, rdev); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_mkdir (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - mode_t mode) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - subvol = get_mapping_subvol_from_path (this, loc->path); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - op_errno = inode_ctx_put (loc->inode, this, (uint64_t)(long)subvol); - if (op_errno != 0) { - gf_log (this->name, GF_LOG_ERROR, - "%s: failed to set subvolume ptr in inode ctx", - loc->path); - } - - STACK_WIND (frame, map_newentry_cbk, subvol, - subvol->fops->mkdir, loc, mode); - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_symlink (call_frame_t *frame, - xlator_t *this, - const char *linkpath, - loc_t *loc) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - subvol = get_mapping_subvol_from_path (this, loc->path); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - op_errno = inode_ctx_put (loc->inode, this, (uint64_t)(long)subvol); - if (op_errno != 0) { - gf_log (this->name, GF_LOG_ERROR, - "%s: failed to set subvolume ptr in inode ctx", - loc->path); - } - - STACK_WIND (frame, map_newentry_cbk, subvol, - subvol->fops->symlink, linkpath, loc); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - -int32_t -map_create (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - int32_t flags, - mode_t mode, fd_t *fd) -{ - int32_t op_errno = 1; - xlator_t *subvol = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - subvol = get_mapping_subvol_from_path (this, loc->path); - if (!subvol) { - op_errno = EINVAL; - goto err; - } - - op_errno = inode_ctx_put (loc->inode, this, (uint64_t)(long)subvol); - if (op_errno != 0) { - gf_log (this->name, GF_LOG_ERROR, - "%s: failed to set subvolume ptr in inode ctx", - loc->path); - } - - STACK_WIND (frame, map_create_cbk, subvol, - subvol->fops->create, loc, flags, mode, fd); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_lookup (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - dict_t *xattr_req) -{ - int32_t op_errno = EINVAL; - xlator_t *subvol = NULL; - map_local_t *local = NULL; - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - priv = this->private; - - if (loc->inode->ino == 1) - goto root_inode; - - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - subvol = get_mapping_subvol_from_path (this, loc->path); - if (!subvol) { - goto err; - } - - op_errno = inode_ctx_put (loc->inode, this, - (uint64_t)(long)subvol); - if (op_errno != 0) { - gf_log (this->name, GF_LOG_ERROR, - "%s: failed to set subvolume in inode ctx", - loc->path); - } - } - - /* Just one callback */ - STACK_WIND (frame, map_single_lookup_cbk, subvol, - subvol->fops->lookup, loc, xattr_req); - - return 0; - - root_inode: - local = GF_CALLOC (1, sizeof (map_local_t), - gf_map_mt_map_local_t); - - frame->local = local; - local->call_count = priv->child_count; - local->op_ret = -1; - - trav = this->children; - while (trav) { - STACK_WIND (frame, map_root_lookup_cbk, trav->xlator, - trav->xlator->fops->lookup, loc, xattr_req); - trav = trav->next; - } - - return 0; - - err: - STACK_UNWIND (frame, -1, op_errno, NULL, NULL); - - return 0; -} - - -int32_t -map_statfs (call_frame_t *frame, - xlator_t *this, - loc_t *loc) -{ - int32_t op_errno = EINVAL; - xlator_t *subvol = NULL; - map_local_t *local = NULL; - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - VALIDATE_OR_GOTO (loc->path, err); - VALIDATE_OR_GOTO (loc->inode, err); - - if (loc->inode->ino == 1) - goto root_inode; - subvol = get_mapping_subvol_from_ctx (this, loc->inode); - if (!subvol) { - goto err; - } - - /* Just one callback */ - STACK_WIND (frame, map_statfs_cbk, subvol, subvol->fops->statfs, loc); - - return 0; - - root_inode: - local = GF_CALLOC (1, sizeof (map_local_t), - gf_map_mt_map_local_t); - - priv = this->private; - frame->local = local; - local->call_count = priv->child_count; - local->op_ret = -1; - - trav = this->children; - while (trav) { - STACK_WIND (frame, map_statfs_cbk, trav->xlator, - trav->xlator->fops->statfs, loc); - trav = trav->next; - } - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL); - - return 0; -} - -int32_t -map_opendir (call_frame_t *frame, - xlator_t *this, - loc_t *loc, fd_t *fd) -{ - int32_t op_errno = EINVAL; - xlator_t *subvol = NULL; - map_local_t *local = NULL; - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - if (loc->inode->ino == 1) - goto root_inode; - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - goto err; - } - - /* Just one callback */ - STACK_WIND (frame, map_opendir_cbk, subvol, - subvol->fops->opendir, loc, fd); - - return 0; - - root_inode: - local = GF_CALLOC (1, sizeof (map_local_t), - gf_map_mt_map_local_t); - - priv = this->private; - frame->local = local; - local->call_count = priv->child_count; - local->op_ret = -1; - local->fd = fd_ref (fd); - - trav = this->children; - while (trav) { - STACK_WIND (frame, map_opendir_cbk, trav->xlator, - trav->xlator->fops->opendir, loc, fd); - trav = trav->next; - } - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL); - - return 0; -} - - -int32_t -map_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t yoff, int whichop) -{ - int32_t op_errno = EINVAL; - xlator_t *subvol = NULL; - map_local_t *local = NULL; - map_private_t *priv = NULL; - xlator_t *xvol = NULL; - off_t xoff = 0; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (fd, err); - VALIDATE_OR_GOTO (fd->inode, err); - - if (fd->inode->ino == 1) - goto root_inode; - - subvol = get_mapping_subvol_from_ctx (this, fd->inode); - if (!subvol) { - goto err; - } - - /* Just one callback */ - if (whichop == GF_FOP_READDIR) - STACK_WIND (frame, map_single_readdir_cbk, subvol, - subvol->fops->readdir, fd, size, yoff); - else - STACK_WIND (frame, map_single_readdirp_cbk, subvol, - subvol->fops->readdirp, fd, size, yoff); - - return 0; - - root_inode: - /* readdir on '/' */ - local = GF_CALLOC (1, sizeof (map_local_t), - gf_map_mt_map_local_t); - if (!local) { - gf_log (this->name, GF_LOG_ERROR, - "memory allocation failed :("); - op_errno = ENOMEM; - goto err; - } - - priv = this->private; - frame->local = local; - local->op_errno = ENOENT; - local->op_ret = -1; - - local->fd = fd_ref (fd); - local->size = size; - - map_deitransform (this, yoff, &xvol, (uint64_t *)&xoff); - - if (whichop == GF_FOP_READDIR) - STACK_WIND (frame, map_readdir_cbk, xvol, xvol->fops->readdir, - fd, size, xoff); - else - STACK_WIND (frame, map_readdirp_cbk, xvol, xvol->fops->readdirp, - fd, size, xoff); - - return 0; - err: - STACK_UNWIND (frame, -1, op_errno, NULL); - - return 0; -} - - - -int32_t -map_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t yoff) -{ - map_do_readdir (frame, this, fd, size, yoff, GF_FOP_READDIR); - return 0; -} - -int32_t -map_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t yoff) -{ - map_do_readdir (frame, this, fd, size, yoff, GF_FOP_READDIRP); - return 0; -} - - -void -fini (xlator_t *this) -{ - map_private_t *priv = NULL; - struct map_pattern *trav_map = NULL; - struct map_pattern *tmp_map = NULL; - - priv = this->private; - - if (priv) { - GF_FREE (priv->xlarray); - - trav_map = priv->map; - while (trav_map) { - tmp_map = trav_map; - trav_map = trav_map->next; - GF_FREE (tmp_map); - } - - GF_FREE(priv); - } - - return; -} - -int32_t -mem_acct_init (xlator_t *this) -{ - int ret = -1; - - if (!this) - return ret; - - ret = xlator_mem_acct_init (this, gf_map_mt_end + 1); - - if (ret != 0) { - gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" - "failed"); - return ret; - } - - return ret; -} - -int -init (xlator_t *this) -{ - map_private_t *priv = NULL; - xlator_list_t *trav = NULL; - int count = 0; - int ret = -1; - char *pattern_string = NULL; - char *map_pair_str = NULL; - char *tmp_str = NULL; - char *tmp_str1 = NULL; - char *dup_map_pair = NULL; - char *dir_str = NULL; - char *subvol_str = NULL; - char *map_xl = NULL; - - - if (!this->children) { - gf_log (this->name,GF_LOG_ERROR, - "FATAL: map should have one or more child defined"); - return -1; - } - - if (!this->parents) { - gf_log (this->name, GF_LOG_WARNING, - "dangling volume. check volfile "); - } - - priv = GF_CALLOC (1, sizeof (map_private_t), - gf_map_mt_map_private_t); - this->private = priv; - - /* allocate xlator array */ - trav = this->children; - while (trav) { - count++; - trav = trav->next; - } - priv->xlarray = GF_CALLOC (1, sizeof (struct map_xlator_array) * count, - gf_map_mt_map_xlator_array); - priv->child_count = count; - - /* build xlator array */ - count = 0; - trav = this->children; - while (trav) { - priv->xlarray[count++].xl = trav->xlator; - trav = trav->next; - } - - /* map dir1:brick1;dir2:brick2;dir3:brick3;*:brick4 */ - ret = dict_get_str (this->options, "map-directory", &pattern_string); - if (ret != 0) { - gf_log (this->name, GF_LOG_ERROR, - "map.pattern not given, can't continue"); - goto err; - } - map_pair_str = strtok_r (pattern_string, ";", &tmp_str); - while (map_pair_str) { - dup_map_pair = gf_strdup (map_pair_str); - dir_str = strtok_r (dup_map_pair, ":", &tmp_str1); - if (!dir_str) { - gf_log (this->name, GF_LOG_ERROR, - "directory string invalid"); - goto err; - } - subvol_str = strtok_r (NULL, ":", &tmp_str1); - if (!subvol_str) { - gf_log (this->name, GF_LOG_ERROR, - "mapping subvolume string invalid"); - goto err; - } - ret = verify_dir_and_assign_subvol (this, - dir_str, - subvol_str); - if (ret != 0) { - gf_log (this->name, GF_LOG_ERROR, - "verification failed"); - goto err; - } - - GF_FREE (dup_map_pair); - - map_pair_str = strtok_r (NULL, ";", &tmp_str); - } - - /* default-volume brick4 */ - ret = dict_get_str (this->options, "default-volume", &map_xl); - if (ret == 0) { - ret = assign_default_subvol (this, map_xl); - if (ret != 0) { - gf_log (this->name, GF_LOG_ERROR, - "assigning default failed"); - goto err; - } - } - - verify_if_all_subvolumes_got_used (this); - - return 0; - err: - fini (this); - return -1; -} - - -struct xlator_fops fops = { - .lookup = map_lookup, - .mknod = map_mknod, - .create = map_create, - - .stat = map_stat, - .fstat = map_fstat, - .truncate = map_truncate, - .ftruncate = map_ftruncate, - .access = map_access, - .readlink = map_readlink, - .setxattr = map_setxattr, - .getxattr = map_getxattr, - .fsetxattr = map_fsetxattr, - .fgetxattr = map_fgetxattr, - .removexattr = map_removexattr, - .open = map_open, - .readv = map_readv, - .writev = map_writev, - .flush = map_flush, - .fsync = map_fsync, - .statfs = map_statfs, - .lk = map_lk, - .opendir = map_opendir, - .readdir = map_readdir, - .readdirp = map_readdirp, - .fsyncdir = map_fsyncdir, - .symlink = map_symlink, - .unlink = map_unlink, - .link = map_link, - .mkdir = map_mkdir, - .rmdir = map_rmdir, - .rename = map_rename, - .inodelk = map_inodelk, - .finodelk = map_finodelk, - .entrylk = map_entrylk, - .fentrylk = map_fentrylk, - .xattrop = map_xattrop, - .fxattrop = map_fxattrop, - .setdents = map_setdents, - .getdents = map_getdents, - .checksum = map_checksum, - .setattr = map_setattr, - .fsetattr = map_fsetattr, -}; - -struct xlator_cbks cbks = { -}; - -struct volume_options options[] = { - { .key = {"map-directory"}, - .type = GF_OPTION_TYPE_ANY - }, - { .key = {"default-volume"}, - .type = GF_OPTION_TYPE_XLATOR - }, - - { .key = {NULL} } -}; diff --git a/xlators/cluster/map/src/map.h b/xlators/cluster/map/src/map.h deleted file mode 100644 index 7703a543e28..00000000000 --- a/xlators/cluster/map/src/map.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> - This file is part of GlusterFS. - - This file is licensed to you under your choice of the GNU Lesser - General Public License, version 3 or any later version (LGPLv3 or - later), or the GNU General Public License, version 2 (GPLv2), in all - cases as published by the Free Software Foundation. -*/ -#ifndef __MAP_H__ -#define __MAP_H__ - -#include "xlator.h" -#include "map-mem-types.h" - -struct map_pattern { - struct map_pattern *next; - xlator_t *xl; - char *directory; - int dir_len; -}; - -struct map_xlator_array { - xlator_t *xl; - int mapped; /* yes/no */ -}; - -typedef struct { - struct map_pattern *map; - xlator_t *default_xl; - struct map_xlator_array *xlarray; - int child_count; -} map_private_t; - -typedef struct { - int32_t op_ret; - int32_t op_errno; - int call_count; - struct statvfs statvfs; - struct iatt stbuf; - inode_t *inode; - dict_t *dict; - fd_t *fd; - - size_t size; -} map_local_t; - -xlator_t *map_subvol_next (xlator_t *this, xlator_t *prev); -int map_subvol_cnt (xlator_t *this, xlator_t *subvol); - -int map_itransform (xlator_t *this, xlator_t *subvol, - uint64_t x, uint64_t *y_p); -int map_deitransform (xlator_t *this, uint64_t y, - xlator_t **subvol_p, uint64_t *x_p); - - -xlator_t *get_mapping_subvol_from_path (xlator_t *this, const char *path); -xlator_t *get_mapping_subvol_from_ctx (xlator_t *this, inode_t *inode); - -int check_multiple_volume_entry (xlator_t *this, xlator_t *subvol); -int verify_dir_and_assign_subvol (xlator_t *this, - const char *directory, const char *subvol); -int assign_default_subvol (xlator_t *this, const char *default_xl); -void verify_if_all_subvolumes_got_used (xlator_t *this); - - -#endif /* __MAP_H__ */ |