diff options
Diffstat (limited to 'xlators')
29 files changed, 334 insertions, 315 deletions
diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c index 40e5abd3a03..4679e4610a6 100644 --- a/xlators/cluster/afr/src/afr-inode-read.c +++ b/xlators/cluster/afr/src/afr-inode-read.c @@ -521,7 +521,7 @@ struct _xattr_key {  }; -void +int  __gather_xattr_keys (dict_t *dict, char *key, data_t *value,                       void *data)  { @@ -533,13 +533,14 @@ __gather_xattr_keys (dict_t *dict, char *key, data_t *value,                  xkey = GF_CALLOC (1, sizeof (*xkey), gf_afr_mt_xattr_key);                  if (!xkey) -                        return; +                        return -1;                  xkey->key = key;                  INIT_LIST_HEAD (&xkey->list);                  list_add_tail (&xkey->list, list);          } +        return 0;  } diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 6ea288a5ee4..148a939ca83 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -1478,17 +1478,16 @@ afr_setxattr (call_frame_t *frame, xlator_t *this,          afr_private_t  *priv              = NULL;          afr_local_t    *local             = NULL;          call_frame_t   *transaction_frame = NULL; -        data_pair_t    *trav              = NULL;          int             ret               = -1;          int             op_errno          = EINVAL;          VALIDATE_OR_GOTO (this, out);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict, -                                   trav, op_errno, out); +                                   op_errno, out);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict, -                                   trav, op_errno, out); +                                   op_errno, out);          VALIDATE_OR_GOTO (frame, out);          VALIDATE_OR_GOTO (this->private, out); @@ -1667,17 +1666,16 @@ afr_fsetxattr (call_frame_t *frame, xlator_t *this,          call_frame_t     *transaction_frame = NULL;          int               ret               = -1;          int               op_errno          = EINVAL; -        data_pair_t      *trav              = NULL;          VALIDATE_OR_GOTO (frame, out);          VALIDATE_OR_GOTO (this, out);          VALIDATE_OR_GOTO (this->private, out);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict, -                                   trav, op_errno, out); +                                   op_errno, out);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict, -                                   trav, op_errno, out); +                                   op_errno, out);          if (ret)                  goto out; diff --git a/xlators/cluster/afr/src/pump.c b/xlators/cluster/afr/src/pump.c index ff42d8dc11c..e42c955d018 100644 --- a/xlators/cluster/afr/src/pump.c +++ b/xlators/cluster/afr/src/pump.c @@ -1276,7 +1276,7 @@ struct _xattr_key {          struct list_head list;  }; -static void +static int  __gather_xattr_keys (dict_t *dict, char *key, data_t *value,                       void *data)  { @@ -1288,13 +1288,14 @@ __gather_xattr_keys (dict_t *dict, char *key, data_t *value,                  xkey = GF_CALLOC (1, sizeof (*xkey), gf_afr_mt_xattr_key);                  if (!xkey) -                        return; +                        return -1;                  xkey->key = key;                  INIT_LIST_HEAD (&xkey->list);                  list_add_tail (&xkey->list, list);          } +        return 0;  }  static void @@ -1646,7 +1647,6 @@ pump_setxattr (call_frame_t *frame, xlator_t *this,  	afr_private_t * priv  = NULL;  	afr_local_t   * local = NULL;  	call_frame_t   *transaction_frame = NULL; -        data_pair_t   * trav  = NULL;  	int ret = -1;  	int op_errno = 0; @@ -1655,7 +1655,7 @@ pump_setxattr (call_frame_t *frame, xlator_t *this,  	VALIDATE_OR_GOTO (this->private, out);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.pump*", dict, -                                   trav, op_errno, out); +                                   op_errno, out);  	priv = this->private;          if (!priv->use_afr_in_pump) { diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 4d8d326ec25..24f28c1fe27 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -26,13 +26,13 @@  #include <sys/time.h>  #include <libgen.h> -void +int  dht_aggregate (dict_t *this, char *key, data_t *value, void *data)  {          dict_t  *dst  = NULL;          int64_t *ptr  = 0, *size = NULL;          int32_t  ret  = -1; -        data_pair_t  *data_pair = NULL; +        data_t  *dict_data = NULL;          dst = data; @@ -44,30 +44,30 @@ dht_aggregate (dict_t *this, char *key, data_t *value, void *data)                          if (size == NULL) {                                  gf_log ("dht", GF_LOG_WARNING,                                          "memory allocation failed"); -                                return; +                                return -1;                          }                          ret = dict_set_bin (dst, key, size, sizeof (int64_t));                          if (ret < 0) {                                  gf_log ("dht", GF_LOG_WARNING,                                          "dht aggregate dict set failed");                                  GF_FREE (size); -                                return; +                                return -1;                          }                  }                  ptr = data_to_bin (value);                  if (ptr == NULL) {                          gf_log ("dht", GF_LOG_WARNING, "data to bin failed"); -                        return; +                        return -1;                  }                  *size = hton64 (ntoh64 (*size) + ntoh64 (*ptr));          } else {                  /* compare user xattrs only */                  if (!strncmp (key, "user.", strlen ("user."))) { -                        ret = dict_lookup (dst, key, &data_pair);  -                        if (!ret && data_pair && value) { -                                ret = is_data_equal (data_pair->value, value); +                        ret = dict_lookup (dst, key, &dict_data); +                        if (!ret && dict_data && value) { +                                ret = is_data_equal (dict_data, value);                                  if (!ret)                                          gf_log ("dht", GF_LOG_DEBUG,                                                  "xattr mismatch for %s", key); @@ -78,7 +78,7 @@ dht_aggregate (dict_t *this, char *key, data_t *value, void *data)                          gf_log ("dht", GF_LOG_WARNING, "xattr dict set failed");          } -        return; +        return 0;  } @@ -2100,7 +2100,6 @@ dht_fsetxattr (call_frame_t *frame, xlator_t *this,          xlator_t     *subvol   = NULL;          dht_local_t  *local    = NULL;          int           op_errno = EINVAL; -        data_pair_t  *trav     = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -2108,7 +2107,7 @@ dht_fsetxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (fd->inode, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.dht*", xattr, -                                   trav, op_errno, err); +                                   op_errno, err);          local = dht_local_init (frame, NULL, fd, GF_FOP_FSETXATTR);          if (!local) { @@ -2206,8 +2205,6 @@ dht_setxattr (call_frame_t *frame, xlator_t *this,          char          value[4096] = {0,};          gf_dht_migrate_data_type_t forced_rebalance = GF_DHT_MIGRATE_DATA;          int           call_cnt = 0; -        data_pair_t  *trav     = NULL; -          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -2216,7 +2213,7 @@ dht_setxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->path, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.dht*", xattr, -                                   trav, op_errno, err); +                                   op_errno, err);          conf   = this->private;          local = dht_local_init (frame, loc, NULL, GF_FOP_SETXATTR); diff --git a/xlators/cluster/stripe/src/stripe-helpers.c b/xlators/cluster/stripe/src/stripe-helpers.c index 8053f871a0d..e85661c14c2 100644 --- a/xlators/cluster/stripe/src/stripe-helpers.c +++ b/xlators/cluster/stripe/src/stripe-helpers.c @@ -40,7 +40,7 @@ out: -void +int  stripe_aggregate (dict_t *this, char *key, data_t *value, void *data)  {          dict_t  *dst  = NULL; @@ -83,7 +83,7 @@ stripe_aggregate (dict_t *this, char *key, data_t *value, void *data)          }  out: -        return; +        return 0;  } diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index 6588a44996c..76d912a0910 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -3927,7 +3927,6 @@ int  stripe_setxattr (call_frame_t *frame, xlator_t *this,                   loc_t *loc, dict_t *dict, int flags, dict_t *xdata)  { -        data_pair_t      *pair     = NULL;          int32_t           op_errno = EINVAL;          xlator_list_t    *trav     = NULL;          stripe_private_t *priv     = NULL; @@ -3940,7 +3939,7 @@ stripe_setxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.*stripe*", dict, -                                   pair, op_errno, err); +                                   op_errno, err);          priv = this->private;          trav = this->children; @@ -3992,7 +3991,6 @@ int  stripe_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                    dict_t *dict, int flags, dict_t *xdata)  { -        data_pair_t    *trav     = NULL;          int32_t         op_ret   = -1;          int32_t         op_errno = EINVAL; @@ -4001,7 +3999,7 @@ stripe_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          VALIDATE_OR_GOTO (fd, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.*stripe*", dict, -                                   trav, op_errno, err); +                                   op_errno, err);          STACK_WIND (frame, stripe_fsetxattr_cbk,                      FIRST_CHILD(this), diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 3bb48b905d6..82159fcace8 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -2139,7 +2139,7 @@ io_stats_fsync (call_frame_t *frame, xlator_t *this,  } -void +int  conditional_dump (dict_t *dict, char *key, data_t *value, void *data)  {          struct { @@ -2163,20 +2163,21 @@ conditional_dump (dict_t *dict, char *key, data_t *value, void *data)                  if (!strncmp (filename, "", 1)) {                          gf_log (this->name, GF_LOG_ERROR, "No filename given"); -                        return; +                        return -1;                  }                  logfp = fopen (filename, "w+");                  GF_ASSERT (logfp);                  if (!logfp) {                          gf_log (this->name, GF_LOG_ERROR, "failed to open %s "                                  "for writing", filename); -                        return; +                        return -1;                  }                  (void) ios_dump_args_init (&args, IOS_DUMP_TYPE_FILE,                                             logfp);                  io_stats_dump (this, &args);                  fclose (logfp);          } +        return 0;  } diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c index 071a25b4b60..a98236c1edb 100644 --- a/xlators/features/index/src/index.c +++ b/xlators/features/index/src/index.c @@ -435,20 +435,22 @@ out:  void  _xattrop_index_action (xlator_t *this, inode_t *inode,  dict_t *xattr)  { -        data_pair_t       *trav = NULL;          gf_boolean_t      zero_xattr = _gf_true;          index_inode_ctx_t *ctx = NULL;          int               ret = 0; -        trav = xattr->members_list; -        while (trav && inode) { -                if (mem_0filled ((const char*)trav->value->data, -                                 trav->value->len)) { +        int _check_key_is_zero_filled (dict_t *d, char *k, data_t *v, +                                       void *tmp) +        { +                if (mem_0filled ((const char*)v->data, v->len)) {                          zero_xattr = _gf_false; -                        break; +                        /* -1 means, no more iterations, treat as 'break' */ +                        return -1;                  } -                trav = trav->next; +                return 0;          } +        dict_foreach (xattr, _check_key_is_zero_filled, NULL); +          ret = index_inode_ctx_get (inode, this, &ctx);          if (ret) {                  gf_log (this->name, GF_LOG_ERROR, "Not able to %s %s -> index", diff --git a/xlators/features/marker/src/marker-common.c b/xlators/features/marker/src/marker-common.c index f478db7a3c6..f9e9a835a4b 100644 --- a/xlators/features/marker/src/marker-common.c +++ b/xlators/features/marker/src/marker-common.c @@ -61,18 +61,10 @@ unlock: UNLOCK (&inode->lock);          return ret;  } -void +int  marker_filter_quota_xattr (dict_t *dict, char *key,                             data_t *value, void *data)  { -        int ret = -1; - -        GF_VALIDATE_OR_GOTO ("marker", dict, out); -        GF_VALIDATE_OR_GOTO ("marker", key, out); - -        ret = fnmatch ("trusted.glusterfs.quota*", key, 0); -        if (ret == 0) -                dict_del (dict, key); -out: -        return; +        dict_del (dict, key); +        return 0;  } diff --git a/xlators/features/marker/src/marker-common.h b/xlators/features/marker/src/marker-common.h index cd68ab6a044..22860255a1d 100644 --- a/xlators/features/marker/src/marker-common.h +++ b/xlators/features/marker/src/marker-common.h @@ -23,6 +23,6 @@  int32_t  marker_force_inode_ctx_get (inode_t *, xlator_t *, marker_inode_ctx_t **); -void +int  marker_filter_quota_xattr (dict_t *, char *, data_t *, void *);  #endif diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index a0c941b2009..eeb208eaf10 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -275,8 +275,10 @@ marker_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  gf_log (this->name, GF_LOG_DEBUG,                          "Filtering the quota extended attributes"); -                dict_foreach (dict, marker_filter_quota_xattr, NULL); +                dict_foreach_fnmatch (dict, "trusted.glusterfs.quota*", +                                      marker_filter_quota_xattr, NULL);          } +          STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict, xdata);          return 0;  } diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index cb1483258ab..4a2e56bb3ec 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -2694,7 +2694,6 @@ int  quota_setxattr (call_frame_t *frame, xlator_t *this,                  loc_t *loc, dict_t *dict, int flags, dict_t *xdata)  { -        data_pair_t    *trav     = NULL;          int             op_errno = EINVAL;          int             op_ret   = -1; @@ -2703,7 +2702,7 @@ quota_setxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.quota*", dict, -                                   trav, op_errno, err); +                                   op_errno, err);          STACK_WIND (frame, quota_setxattr_cbk,                      FIRST_CHILD(this), @@ -2727,7 +2726,6 @@ int  quota_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                   dict_t *dict, int flags, dict_t *xdata)  { -        data_pair_t    *trav     = NULL;          int32_t         op_ret   = -1;          int32_t         op_errno = EINVAL; @@ -2736,7 +2734,7 @@ quota_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          VALIDATE_OR_GOTO (fd, err);          GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.quota*", dict, -                                   trav, op_errno, err); +                                   op_errno, err);          STACK_WIND (frame, quota_fsetxattr_cbk,                      FIRST_CHILD(this), diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index 808b1276b25..2a7cfca914b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -172,7 +172,7 @@ glusterd_urltransform_add (runner_t *runner, const char *url)          runner_add_arg (runner, url);  } -static void +static int  _glusterd_urltransform_add_iter (dict_t *dict, char *key, data_t *value, void *data)  {          runner_t *runner = (runner_t *)data; @@ -182,6 +182,8 @@ _glusterd_urltransform_add_iter (dict_t *dict, char *key, data_t *value, void *d          GF_ASSERT (slave);          slave++;          runner_add_arg (runner, slave); + +        return 0;  }  static void @@ -296,7 +298,7 @@ struct dictidxmark {          char *ikey;  }; -static void +static int  _dict_mark_atindex (dict_t *dict, char *key, data_t *value, void *data)  {          struct dictidxmark *dim = data; @@ -305,6 +307,7 @@ _dict_mark_atindex (dict_t *dict, char *key, data_t *value, void *data)                  dim->ikey = key;          dim->ithis++; +        return 0;  }  static char * @@ -734,7 +737,7 @@ static int  glusterd_get_gsync_status_mst_slv (glusterd_volinfo_t *volinfo,                                     char *slave, dict_t *rsp_dict); -static void +static int  _get_status_mst_slv (dict_t *this, char *key, data_t *value, void *data)  {          glusterd_gsync_status_temp_t  *param = NULL; @@ -750,15 +753,15 @@ _get_status_mst_slv (dict_t *this, char *key, data_t *value, void *data)          if (slave)                  slave ++;          else -                return; +                return 0;          ret = glusterd_get_gsync_status_mst_slv(param->volinfo,                                                  slave, param->rsp_dict); - +        return 0;  } -static void +static int  _get_max_gsync_slave_num (dict_t *this, char *key, data_t *value, void *data)  {          int  tmp_slvnum = 0; @@ -767,6 +770,8 @@ _get_max_gsync_slave_num (dict_t *this, char *key, data_t *value, void *data)          sscanf (key, "slave%d", &tmp_slvnum);          if (tmp_slvnum > *slvnum)                  *slvnum = tmp_slvnum; + +        return 0;  }  static int @@ -1987,7 +1992,7 @@ glusterd_do_gsync_log_rotation_mst_slv (glusterd_volinfo_t *volinfo, char *slave          return ret;  } -static void +static int  _iterate_log_rotate_mst_slv (dict_t *this, char *key, data_t *value, void *data)  {          glusterd_gsync_status_temp_t  *param = NULL; @@ -2004,10 +2009,11 @@ _iterate_log_rotate_mst_slv (dict_t *this, char *key, data_t *value, void *data)          else {                  gf_log ("", GF_LOG_ERROR, "geo-replication log-rotate: slave (%s) "                          "not conforming to format", slave); -                return; +                return -1;          }          (void) glusterd_do_gsync_log_rotation_mst_slv (param->volinfo, slave, NULL); +        return 0;  }  static int diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 8804176dcc6..180b28294fd 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -278,7 +278,6 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,          glusterd_brickinfo_t    *brickinfo = NULL;          char                    *buf = NULL;          int                     i = 1; -        data_pair_t             *pairs = NULL;          char                    reconfig_key[256] = {0, };          dict_t                  *dict = NULL;          int                     opt_count = 0; @@ -365,14 +364,15 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,                  goto out;          } -        for (pairs = dict->members_list; pairs != NULL; pairs = pairs->next) { -                snprintf (reconfig_key, 256, "volume%d.option.%s", count, -                          pairs->key); -                ret = dict_set_str  (volumes, reconfig_key, pairs->value->data); +        int _build_option_key (dict_t *d, char *k, data_t *v, void *tmp) +        { +                snprintf (reconfig_key, 256, "volume%d.option.%s", count, k); +                ret = dict_set_str  (volumes, reconfig_key, v->data);                  if (0 == ret) -                    opt_count++; - +                        opt_count++; +                return 0;          } +        dict_foreach (dict, _build_option_key, NULL);          snprintf (key, 256, "volume%d.opt_count", count);          ret = dict_set_int32 (volumes, key, opt_count); diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index aea27500d6a..4385f876498 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -851,7 +851,7 @@ out:  } -static void +static int  _delete_reconfig_opt (dict_t *this, char *key, data_t *value, void *data)  {          int32_t        *is_force = 0; @@ -873,7 +873,7 @@ _delete_reconfig_opt (dict_t *this, char *key, data_t *value, void *data)                  key, value->data);          dict_del (this, key);  out: -        return; +        return 0;  }  static int @@ -3045,7 +3045,7 @@ glusterd_op_commit_perform (glusterd_op_t op, dict_t *dict, char **op_errstr,          return ret;  } -void +int  _profile_volume_add_brick_rsp (dict_t *this, char *key, data_t *value,                               void *data)  { @@ -3058,6 +3058,7 @@ _profile_volume_add_brick_rsp (dict_t *this, char *key, data_t *value,          GF_ASSERT (new_value);          snprintf (new_key, sizeof (new_key), "%d-%s", rsp_ctx->count, key);          dict_set (rsp_ctx->dict, new_key, new_value); +        return 0;  }  int @@ -3113,7 +3114,7 @@ glusterd_profile_volume_brick_rsp (void *pending_entry,  //input-key: <replica-id>:<child-id>-*  //output-key: <brick-id>-* -void +int  _heal_volume_add_shd_rsp (dict_t *this, char *key, data_t *value, void *data)  {          char                            new_key[256] = {0,}; @@ -3170,7 +3171,7 @@ _heal_volume_add_shd_rsp (dict_t *this, char *key, data_t *value, void *data)          dict_set (rsp_ctx->dict, new_key, new_value);  out: -        return; +        return 0;  }  int @@ -3206,7 +3207,7 @@ out:          return ret;  } -void +int  _status_volume_add_brick_rsp (dict_t *this, char *key, data_t *value,                                void *data)  { @@ -3219,7 +3220,7 @@ _status_volume_add_brick_rsp (dict_t *this, char *key, data_t *value,          snprintf (new_key, sizeof (new_key), "brick%d.%s", rsp_ctx->count, key);          dict_set (rsp_ctx->dict, new_key, new_value); -        return; +        return 0;  }  int diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index a3522a98c51..491a3255ec5 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -942,7 +942,7 @@ out:  } -void +int  _profile_volume_add_friend_rsp (dict_t *this, char *key, data_t *value,                                 void *data)  { @@ -953,7 +953,7 @@ _profile_volume_add_friend_rsp (dict_t *this, char *key, data_t *value,          char    brick_key[256];          if (strcmp (key, "count") == 0) -                return; +                return 0;          sscanf (key, "%d%s", &brick_count, brick_key);          rsp_ctx = data;          new_value = data_copy (value); @@ -961,6 +961,7 @@ _profile_volume_add_friend_rsp (dict_t *this, char *key, data_t *value,          snprintf (new_key, sizeof (new_key), "%d%s",                    rsp_ctx->count + brick_count, brick_key);          dict_set (rsp_ctx->dict, new_key, new_value); +        return 0;  }  int @@ -995,7 +996,7 @@ out:          return ret;  } -void +int  glusterd_volume_status_add_peer_rsp (dict_t *this, char *key, data_t *value,                                       void *data)  { @@ -1008,7 +1009,7 @@ glusterd_volume_status_add_peer_rsp (dict_t *this, char *key, data_t *value,          if (!strcmp (key, "count") || !strcmp (key, "cmd") ||              !strcmp (key, "brick-index-max") || !strcmp (key, "other-count")) -                return; +                return -1;          rsp_ctx = data;          new_value = data_copy (value); @@ -1029,7 +1030,7 @@ glusterd_volume_status_add_peer_rsp (dict_t *this, char *key, data_t *value,                  gf_log ("", GF_LOG_ERROR, "Unable to set key: %s in dict",                          key); -        return; +        return 0;  }  int diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index eef42fb341b..d11454bc4ba 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -541,7 +541,7 @@ out:          return ret;  } -static void +static int  _storeslaves (dict_t *this, char *key, data_t *value, void *data)  {          int32_t                      ret = 0; @@ -556,12 +556,12 @@ _storeslaves (dict_t *this, char *key, data_t *value, void *data)          GF_ASSERT (value && value->data);          if ((!shandle) || (shandle->fd <= 0) || (!shandle->path)) -                return; +                return -1;          if (!key) -                return; +                return -1;          if (!value || !value->data) -                return; +                return -1;          gf_log ("", GF_LOG_DEBUG, "Storing in volinfo:key= %s, val=%s",                  key, value->data); @@ -570,12 +570,13 @@ _storeslaves (dict_t *this, char *key, data_t *value, void *data)          if (ret) {                  gf_log ("", GF_LOG_ERROR, "Unable to write into store"                                  " handle for path: %s", shandle->path); -                return; +                return -1;          } +        return 0;  } -void _storeopts (dict_t *this, char *key, data_t *value, void *data) +int _storeopts (dict_t *this, char *key, data_t *value, void *data)  {          int32_t                      ret = 0;          int32_t                      exists = 0; @@ -590,12 +591,12 @@ void _storeopts (dict_t *this, char *key, data_t *value, void *data)          GF_ASSERT (value && value->data);          if ((!shandle) || (shandle->fd <= 0) || (!shandle->path)) -                return; +                return -1;          if (!key) -                return; +                return -1;          if (!value || !value->data) -                return; +                return -1;          if (is_key_glusterd_hooks_friendly (key)) {                  exists = 1; @@ -611,15 +612,16 @@ void _storeopts (dict_t *this, char *key, data_t *value, void *data)          } else {                  gf_log ("", GF_LOG_DEBUG, "Discarding:key= %s, val=%s",                          key, value->data); -                return; +                return 0;          }          ret = glusterd_store_save_value (shandle->fd, key, (char*)value->data);          if (ret) {                  gf_log ("", GF_LOG_ERROR, "Unable to write into store"                                  " handle for path: %s", shandle->path); -                return; +                return -1;          } +        return 0;  }  int32_t diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 51478fb1246..3a48a41d76c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -1615,7 +1615,7 @@ out:          return ret;  } -void +int  _add_volinfo_dict_to_prdict (dict_t *this, char *key, data_t *value, void *data)  {          glusterd_voldict_ctx_t   *ctx = NULL; @@ -1637,7 +1637,7 @@ _add_volinfo_dict_to_prdict (dict_t *this, char *key, data_t *value, void *data)                          ctx->val_name, ctx->count, value->data);          ctx->opt_count++; -        return; +        return ret;  }  int32_t @@ -3495,7 +3495,7 @@ glusterd_restart_bricks (glusterd_conf_t *conf)          return ret;  } -void +int  _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)  {          char                        *slave = NULL; @@ -3509,11 +3509,13 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)          if (slave)                  slave ++;          else -                return; +                return 0;          uuid_len = (slave - value->data - 1);          strncpy (uuid_str, (char*)value->data, uuid_len);          glusterd_start_gsync (volinfo, slave, uuid_str, NULL); + +        return 0;  }  int diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 28f480a3142..1375bd482ef 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -649,14 +649,14 @@ struct opthandler_data {          void *param;  }; -static void +static int  process_option (dict_t *dict, char *key, data_t *value, void *param)  {          struct opthandler_data *odt = param;          struct volopt_map_entry vme = {0,};          if (odt->rv) -                return; +                return 0;          odt->found = _gf_true;          vme.key = key; @@ -675,6 +675,7 @@ process_option (dict_t *dict, char *key, data_t *value, void *param)                  vme.value = value->data;          odt->rv = odt->handler (odt->graph, &vme, odt->param); +        return 0;  }  static int @@ -3637,16 +3638,18 @@ out:          return ret;  } -static void +static int  _check_globalopt (dict_t *this, char *key, data_t *value, void *ret_val)  {          int *ret = NULL;          ret = ret_val;          if (*ret) -                return; +                return 0;          if (!glusterd_check_globaloption (key))                  *ret = 1; + +        return 0;  }  int @@ -3692,16 +3695,18 @@ out:          return ret;  } -static void +static int  _check_localopt (dict_t *this, char *key, data_t *value, void *ret_val)  {          int *ret = NULL;          ret = ret_val;          if (*ret) -                return; +                return 0;          if (!glusterd_check_localoption (key))                  *ret = 1; + +        return 0;  }  int diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 17a2063948f..f55b3ea51f2 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -655,7 +655,7 @@ check_prepare_mountbroker_root (char *mountbroker_root)          return ret;  } -static void +static int  _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)  {          glusterd_conf_t *priv           = THIS->private; @@ -671,7 +671,7 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)          char            *volfile_server = NULL;          if (*ret == -1) -                return; +                return -1;          label = strtail (key, "mountbroker."); @@ -688,7 +688,7 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)          }          if (!label) -                return; +                return -1;          mspec = GF_CALLOC (1, sizeof (*mspec), gf_gld_mt_mount_spec);          if (!mspec) @@ -727,7 +727,7 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)          list_add_tail (&mspec->speclist, &priv->mount_specs); -        return; +        return 0;   err:          gf_log ("", GF_LOG_ERROR, @@ -735,6 +735,7 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)                  georep ? GEOREP" " : "", label, pdesc);          *ret = -1; +        return -1;  }  /* diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 619f488d7c7..1ad774e1b45 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -2871,7 +2871,6 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          data_t         *value_data = NULL;          int             ret = -1;          int32_t         len = 0; -        data_pair_t    *trav = NULL;          state = frame->root->state;          finh  = state->finh; @@ -2900,25 +2899,33 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          /* we need to invoke fuse_filter_xattr() twice. Once                           * while counting size and then while filling buffer                           */ -                        trav = dict->members_list; -                        while (trav) { -                                if (!fuse_filter_xattr (this, trav->key)) -                                        len += strlen (trav->key) + 1; -                                trav = trav->next; -                        } /* while(trav) */ +                        int _get_total_len (dict_t *d, char *k, data_t *v, +                                            void *tmp) +                        { +                                if (!fuse_filter_xattr (this, k)) +                                        len += strlen (k) + 1; +                                return 0; +                        } +                        dict_foreach (dict, _get_total_len, NULL); +                          value = alloca (len + 1);                          if (!value)                                  goto out; +                          len = 0; -                        trav = dict->members_list; -                        while (trav) { -                                if (!fuse_filter_xattr (this, trav->key)) { -                                        strcpy (value + len, trav->key); -                                        value[len + strlen (trav->key)] = '\0'; -                                        len += strlen (trav->key) + 1; + +                        int _set_listxattr_keys (dict_t *d, char *k, data_t *v, +                                                 void *tmp) +                        { +                                if (!fuse_filter_xattr (this, k)) { +                                        strcpy (value + len, k); +                                        value[len + strlen (k)] = '\0'; +                                        len += strlen (k) + 1;                                  } -                                trav = trav->next; -                        } /* while(trav) */ +                                return 0; +                        } +                        dict_foreach (dict, _set_listxattr_keys, NULL); +                          send_fuse_xattr (this, finh, value, len, state->size);                  } /* if(state->name)...else */          } else { diff --git a/xlators/performance/md-cache/src/md-cache.c b/xlators/performance/md-cache/src/md-cache.c index 55923990d49..237acab9f18 100644 --- a/xlators/performance/md-cache/src/md-cache.c +++ b/xlators/performance/md-cache/src/md-cache.c @@ -455,7 +455,7 @@ struct updatedict {  	int ret;  }; -static void +static int  updatefn(dict_t *dict, char *key, data_t *value, void *data)  {  	struct updatedict *u = data; @@ -472,17 +472,18 @@ updatefn(dict_t *dict, char *key, data_t *value, void *data)  			u->dict = dict_new();  			if (!u->dict) {  				u->ret = -1; -				return; +				return -1;  			}  		}  		if (dict_set(u->dict, key, value) < 0) {  			u->ret = -1; -			return; +			return -1;  		}  		break;  	} +        return 0;  }  static int @@ -651,13 +652,15 @@ is_mdc_key_satisfied (const char *key)  } -static void +static int  checkfn (dict_t *this, char *key, data_t *value, void *data)  {          struct checkpair *pair = data;  	if (!is_mdc_key_satisfied (key))  		pair->ret = 0; + +        return 0;  } diff --git a/xlators/protocol/server/src/authenticate.c b/xlators/protocol/server/src/authenticate.c index d1cdebdee95..9c843d0bb45 100644 --- a/xlators/protocol/server/src/authenticate.c +++ b/xlators/protocol/server/src/authenticate.c @@ -31,7 +31,7 @@  #include <errno.h>  #include "authenticate.h" -static void +static int  init (dict_t *this, char *key, data_t *value, void *data)  {          void          *handle       = NULL; @@ -59,7 +59,7 @@ init (dict_t *this, char *key, data_t *value, void *data)          if (-1 == ret) {                  dict_set (this, key, data_from_dynptr (NULL, 0));                  *error = -1; -                return; +                return -1;          }          handle = dlopen (auth_file, RTLD_LAZY); @@ -69,7 +69,7 @@ init (dict_t *this, char *key, data_t *value, void *data)                  dict_set (this, key, data_from_dynptr (NULL, 0));                  GF_FREE (auth_file);                  *error = -1; -                return; +                return -1;          }          GF_FREE (auth_file); @@ -80,7 +80,7 @@ init (dict_t *this, char *key, data_t *value, void *data)                  dict_set (this, key, data_from_dynptr (NULL, 0));                  dlclose (handle);                  *error = -1; -                return; +                return -1;          }          auth_handle = GF_CALLOC (1, sizeof (*auth_handle), @@ -89,7 +89,7 @@ init (dict_t *this, char *key, data_t *value, void *data)                  dict_set (this, key, data_from_dynptr (NULL, 0));                  *error = -1;                  dlclose (handle); -                return; +                return -1;          }          auth_handle->vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t),                                            gf_common_mt_volume_opt_list_t); @@ -98,7 +98,7 @@ init (dict_t *this, char *key, data_t *value, void *data)                  *error = -1;                  GF_FREE (auth_handle);                  dlclose (handle); -                return; +                return -1;          }          auth_handle->vol_opt->given_opt = dlsym (handle, "options");          if (auth_handle->vol_opt->given_opt == NULL) { @@ -111,15 +111,17 @@ init (dict_t *this, char *key, data_t *value, void *data)          dict_set (this, key,                    data_from_dynptr (auth_handle, sizeof (*auth_handle))); +        return 0;  } -static void +static int  fini (dict_t *this, char *key, data_t *value, void *data)  {          auth_handle_t *handle = data_to_ptr (value);          if (handle) {                  dlclose (handle->handle);          } +        return 0;  }  int32_t @@ -127,31 +129,29 @@ gf_auth_init (xlator_t *xl, dict_t *auth_modules)  {          int ret = 0;          auth_handle_t *handle = NULL; -        data_pair_t *pair = NULL;          dict_foreach (auth_modules, init, &ret);          if (ret)                  goto out; -        pair = auth_modules->members_list; -        while (pair) { -                handle = data_to_ptr (pair->value); -                if (!handle) { -                        pair = pair->next; -                        continue; -                } +        int _auth_option_validate (dict_t *d, char *k, data_t *v, void *tmp) +        { +                handle = data_to_ptr (v); +                if (!handle) +                        return 0;                  list_add_tail (&(handle->vol_opt->list),                                 &(xl->volume_options));                  ret = xlator_options_validate_list (xl, xl->options,                                                      handle->vol_opt, NULL); - -                if (ret) +                if (ret) {                          gf_log ("authenticate", GF_LOG_ERROR,                                  "volume option validation failed"); - -                pair = pair->next; +                        return -1; +                } +                return 0;          } +        ret = dict_foreach (auth_modules, _auth_option_validate, NULL);  out:          if (ret) { @@ -165,7 +165,7 @@ out:  static dict_t *__input_params;  static dict_t *__config_params; -void +int  map (dict_t *this, char *key, data_t *value, void *data)  {          dict_t *res = data; @@ -180,15 +180,16 @@ map (dict_t *this, char *key, data_t *value, void *data)          } else {                  dict_set (res, key, int_to_data (AUTH_DONT_CARE));          } +        return 0;  } -void +int  reduce (dict_t *this, char *key, data_t *value, void *data)  {          int64_t val = 0;          int64_t *res = data;          if (!data) -                return; +                return 0;          val = data_to_int64 (value);          switch (val) @@ -205,6 +206,7 @@ reduce (dict_t *this, char *key, data_t *value, void *data)          case AUTH_DONT_CARE:                  break;          } +        return 0;  } diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index eec1684ca69..0adcd1cf10b 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -1388,7 +1388,6 @@ int  gf_server_check_setxattr_cmd (call_frame_t *frame, dict_t *dict)  { -        data_pair_t      *pair = NULL;          server_conf_t    *conf = NULL;          rpc_transport_t  *xprt = NULL;          uint64_t          total_read = 0; @@ -1398,19 +1397,23 @@ gf_server_check_setxattr_cmd (call_frame_t *frame, dict_t *dict)          if (!conf || !dict)                  return 0; -        for (pair = dict->members_list; pair; pair = pair->next) { -                /* this exact key is used in 'io-stats' too. -                 * But this is better place for this information dump. -                 */ -                if (fnmatch ("*io*stat*dump", pair->key, 0) == 0) { -                        list_for_each_entry (xprt, &conf->xprt_list, list) { -                                total_read  += xprt->total_bytes_read; -                                total_write += xprt->total_bytes_write; -                        } -                        gf_log ("stats", GF_LOG_INFO, -                                "total-read %"PRIu64", total-write %"PRIu64, -                                total_read, total_write); +        /* this exact key is used in 'io-stats' too. +         * But this is better place for this information dump. +         */ +        int _handle_keyvalue_pair (dict_t *d, char *k, +                                   data_t *v, void *tmp) +        { +                return 0; +        } +        if (dict_foreach_fnmatch (dict, "*io*stat*dump", +                                  _handle_keyvalue_pair, NULL ) > 0) { +                list_for_each_entry (xprt, &conf->xprt_list, list) { +                        total_read  += xprt->total_bytes_read; +                        total_write += xprt->total_bytes_write;                  } +                gf_log ("stats", GF_LOG_INFO, +                        "total-read %"PRIu64", total-write %"PRIu64, +                        total_read, total_write);          }          return 0; diff --git a/xlators/protocol/server/src/server-rpc-fops.c b/xlators/protocol/server/src/server-rpc-fops.c index a8f79ea7629..db02aaf9275 100644 --- a/xlators/protocol/server/src/server-rpc-fops.c +++ b/xlators/protocol/server/src/server-rpc-fops.c @@ -904,15 +904,19 @@ server_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                      rsp.xdata.xdata_len, op_errno, out);          if (op_ret == -1) { -                gf_log (this->name, ((op_errno == ENOTSUP) ? -                                     GF_LOG_DEBUG : GF_LOG_INFO), -                        "%"PRId64": SETXATTR %s (%s) ==> %s (%s)", -                        frame->root->unique, state->loc.path, -                        uuid_utoa (state->resolve.gfid), -                        ((state->dict) ? ((state->dict->members_list) ? -                                          state->dict->members_list->key : -                                          "(null)") : ("null")), -                        strerror (op_errno)); +                /* print every key */ +                int _log_setxattr_failure (dict_t *d, char *k, data_t *v, +                                           void *tmp) +                { +                        gf_log (this->name, ((op_errno == ENOTSUP) ? +                                             GF_LOG_DEBUG : GF_LOG_INFO), +                                "%"PRId64": SETXATTR %s (%s) ==> %s (%s)", +                                frame->root->unique, state->loc.path, +                                uuid_utoa (state->resolve.gfid), k, +                                strerror (op_errno)); +                        return 0; +                } +                dict_foreach (state->dict, _log_setxattr_failure, NULL);                  goto out;          } @@ -944,15 +948,19 @@ server_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                      rsp.xdata.xdata_len, op_errno, out);          if (op_ret == -1) { -                gf_log (this->name, ((op_errno == ENOTSUP) ? -                                     GF_LOG_DEBUG : GF_LOG_INFO), -                        "%"PRId64": FSETXATTR %"PRId64" (%s) ==> %s (%s)", -                        frame->root->unique, state->resolve.fd_no, -                        uuid_utoa (state->resolve.gfid), -                        ((state->dict) ? ((state->dict->members_list) ? -                                          state->dict->members_list->key : -                                          "(null)") : "null"), -                        strerror (op_errno)); +                /* print every key here */ +                int _log_setxattr_failure (dict_t *d, char *k, data_t *v, +                                           void *tmp) +                { +                        gf_log (this->name, ((op_errno == ENOTSUP) ? +                                             GF_LOG_DEBUG : GF_LOG_INFO), +                                "%"PRId64": FSETXATTR %"PRId64" (%s) ==> %s (%s)", +                                frame->root->unique, state->resolve.fd_no, +                                uuid_utoa (state->resolve.gfid), k, +                                strerror (op_errno)); +                        return 0; +                } +                dict_foreach (state->dict, _log_setxattr_failure, NULL);                  goto out;          } diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index b6519e5955a..9b1bd7cf5af 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -509,7 +509,7 @@ out:  } -static void +static int  get_auth_types (dict_t *this, char *key, data_t *value, void *data)  {          dict_t   *auth_dict = NULL; @@ -546,7 +546,7 @@ get_auth_types (dict_t *this, char *key, data_t *value, void *data)          GF_FREE (key_cpy);  out: -        return; +        return 0;  } @@ -555,7 +555,6 @@ validate_auth_options (xlator_t *this, dict_t *dict)  {          int            error = -1;          xlator_list_t *trav = NULL; -        data_pair_t   *pair = NULL;          char          *tail = NULL;          char          *tmp_addr_list = NULL;          char          *addr = NULL; @@ -566,51 +565,52 @@ validate_auth_options (xlator_t *this, dict_t *dict)          trav = this->children;          while (trav) { -                error = -1; -                for (pair = dict->members_list; pair; pair = pair->next) { -                        tail = strtail (pair->key, "auth."); +                int _check_for_auth_option (dict_t *d, char *k, data_t *v, +                                            void *tmp) +                { +                        int ret = 0; +                        tail = strtail (k, "auth.");                          if (!tail) -                                continue; +                                goto internal_out; +                          /* fast fwd thru module type */                          tail = strchr (tail, '.');                          if (!tail) -                                continue; +                                goto internal_out;                          tail++;                          tail = strtail (tail, trav->xlator->name);                          if (!tail) -                                continue; +                                goto internal_out;                          if (*tail == '.') { -                                error = 0;                                  /* when we are here, the key is checked for                                   * valid auth.allow.<xlator>                                   * Now we verify the ip address                                   */ -                                if (!strcmp (pair->value->data, "*")) { -                                     error = 0; -                                     goto out; +                                if (!strcmp (v->data, "*")) { +                                        ret = 0; +                                        goto internal_out;                                  } -                                tmp_addr_list = gf_strdup (pair->value->data); -                                addr = strtok_r (tmp_addr_list, ",", -                                                &tmp_str); +                                tmp_addr_list = gf_strdup (v->data); +                                addr = strtok_r (tmp_addr_list, ",", &tmp_str);                                  if (!addr) -                                        addr = pair->value->data; +                                        addr = v->data;                                  while (addr) { -                                        if (valid_internet_address -                                                        (addr, _gf_true)) { -                                                error = 0; +                                        if (valid_internet_address (addr, +                                                                    _gf_true)) { +                                                ret = 0;                                          } else { -                                                error = -1; +                                                ret = -1;                                                  gf_log (this->name, GF_LOG_ERROR,                                                          "internet address '%s'"                                                          " does not conform to"                                                          " standards.", addr); -                                                goto out; +                                                goto internal_out;                                          }                                          if (tmp_str) @@ -623,8 +623,10 @@ validate_auth_options (xlator_t *this, dict_t *dict)                                  GF_FREE (tmp_addr_list);                                  tmp_addr_list = NULL;                          } - +                internal_out: +                        return ret;                  } +                error = dict_foreach (dict, _check_for_auth_option, NULL);                  if (-1 == error) {                          gf_log (this->name, GF_LOG_ERROR, @@ -766,31 +768,24 @@ out:  } -static void -_delete_auth_opt (dict_t *this, -                char *key, -                data_t *value, -                void *data) +static int +_delete_auth_opt (dict_t *this, char *key, data_t *value, void *data)  {          char *auth_option_pattern[] = { "auth.addr.*.allow",                                          "auth.addr.*.reject"}; -        if (fnmatch ( auth_option_pattern[0], key, 0) != 0) { + +        if (fnmatch ( auth_option_pattern[0], key, 0) != 0)                  dict_del (this, key); -                return; -        } -        if (fnmatch ( auth_option_pattern[1], key, 0) != 0) { +        if (fnmatch ( auth_option_pattern[1], key, 0) != 0)                  dict_del (this, key); -                return; -        } + +        return 0;  } -static void -_copy_auth_opt (dict_t *unused, -                char *key, -                data_t *value, -                void *xl_dict) +static int +_copy_auth_opt (dict_t *unused, char *key, data_t *value, void *xl_dict)  {          char *auth_option_pattern[] = { "auth.addr.*.allow",                                          "auth.addr.*.reject"}; @@ -799,6 +794,8 @@ _copy_auth_opt (dict_t *unused,          if (fnmatch ( auth_option_pattern[1], key, 0) != 0)                  dict_set ((dict_t *)xl_dict, key, (value)); + +        return 0;  } diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index ea3ad429af9..4169429bd0f 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -108,7 +108,7 @@ out:          return ignore;  } -static void +static int  _posix_xattr_get_set (dict_t *xattr_req,                        char *key,                        data_t *data, @@ -202,7 +202,7 @@ _posix_xattr_get_set (dict_t *xattr_req,                          value = GF_CALLOC (1, xattr_size + 1,                                             gf_posix_mt_char);                          if (!value) -                                return; +                                return -1;                          xattr_size = sys_lgetxattr (filler->real_path, key, value,                                                      xattr_size); @@ -211,7 +211,7 @@ _posix_xattr_get_set (dict_t *xattr_req,                                          "getxattr failed. path: %s, key: %s",                                          filler->real_path, key);                                  GF_FREE (value); -                                return; +                                return -1;                          }                          value[xattr_size] = '\0'; @@ -226,7 +226,7 @@ _posix_xattr_get_set (dict_t *xattr_req,                  }          }  out: -        return; +        return 0;  } @@ -493,8 +493,8 @@ out:  int -posix_set_file_contents (xlator_t *this, const char *path, data_pair_t *trav, -                         int flags) +posix_set_file_contents (xlator_t *this, const char *path, char *keyp, +                         data_t *value, int flags)  {          char *      key                        = NULL;          char        real_path[PATH_MAX]; @@ -506,7 +506,7 @@ posix_set_file_contents (xlator_t *this, const char *path, data_pair_t *trav,          /* XXX: does not handle assigning GFID to created files */          return -1; -        key = &(trav->key[15]); +        key = &(keyp[15]);          sprintf (real_path, "%s/%s", path, key);          if (flags & XATTR_REPLACE) { @@ -518,9 +518,8 @@ posix_set_file_contents (xlator_t *this, const char *path, data_pair_t *trav,                          goto create;                  } -                if (trav->value->len) { -                        ret = write (file_fd, trav->value->data, -                                     trav->value->len); +                if (value->len) { +                        ret = write (file_fd, value->data, value->len);                          if (ret == -1) {                                  op_ret = -errno;                                  gf_log (this->name, GF_LOG_ERROR, @@ -552,7 +551,7 @@ posix_set_file_contents (xlator_t *this, const char *path, data_pair_t *trav,                          goto out;                  } -                ret = write (file_fd, trav->value->data, trav->value->len); +                ret = write (file_fd, value->data, value->len);                  if (ret == -1) {                          op_ret = -errno;                          gf_log (this->name, GF_LOG_ERROR, @@ -648,17 +647,17 @@ static int gf_xattr_enotsup_log;  int  posix_handle_pair (xlator_t *this, const char *real_path, -                   data_pair_t *trav, int flags) +                   char *key, data_t *value, int flags)  {          int sys_ret = -1;          int ret     = 0; -        if (ZR_FILE_CONTENT_REQUEST(trav->key)) { -                ret = posix_set_file_contents (this, real_path, trav, flags); +        if (ZR_FILE_CONTENT_REQUEST(key)) { +                ret = posix_set_file_contents (this, real_path, key, value, +                                               flags);          } else { -                sys_ret = sys_lsetxattr (real_path, trav->key, -                                         trav->value->data, -                                         trav->value->len, flags); +                sys_ret = sys_lsetxattr (real_path, key, value->data, +                                         value->len, flags);                  if (sys_ret < 0) {                          if (errno == ENOTSUP) { @@ -670,7 +669,7 @@ posix_handle_pair (xlator_t *this, const char *real_path,                                                      "flag)");                          } else if (errno == ENOENT) {                                  if (!posix_special_xattr (marker_xattrs, -                                                          trav->key)) { +                                                          key)) {                                          gf_log (this->name, GF_LOG_ERROR,                                                  "setxattr on %s failed: %s",                                                  real_path, strerror (errno)); @@ -682,12 +681,12 @@ posix_handle_pair (xlator_t *this, const char *real_path,                                          ((errno == EINVAL) ?                                           GF_LOG_DEBUG : GF_LOG_ERROR),                                          "%s: key:%s error:%s", -                                        real_path, trav->key, +                                        real_path, key,                                          strerror (errno));  #else /* ! DARWIN */                                  gf_log (this->name, GF_LOG_ERROR,                                          "%s: key:%s error:%s", -                                        real_path, trav->key, +                                        real_path, key,                                          strerror (errno));  #endif /* DARWIN */                          } @@ -702,13 +701,13 @@ out:  int  posix_fhandle_pair (xlator_t *this, int fd, -                    data_pair_t *trav, int flags) +                    char *key, data_t *value, int flags)  {          int sys_ret = -1;          int ret     = 0; -        sys_ret = sys_fsetxattr (fd, trav->key, trav->value->data, -                                 trav->value->len, flags); +        sys_ret = sys_fsetxattr (fd, key, value->data, +                                 value->len, flags);          if (sys_ret < 0) {                  if (errno == ENOTSUP) { @@ -729,13 +728,11 @@ posix_fhandle_pair (xlator_t *this, int fd,                                  ((errno == EINVAL) ?                                   GF_LOG_DEBUG : GF_LOG_ERROR),                                  "fd=%d: key:%s error:%s", -                                fd, trav->key, -                                strerror (errno)); +                                fd, key, strerror (errno));  #else /* ! DARWIN */                          gf_log (this->name, GF_LOG_ERROR,                                  "fd=%d: key:%s error:%s", -                                fd, trav->key, -                                strerror (errno)); +                                fd, key, strerror (errno));  #endif /* DARWIN */                  } @@ -934,33 +931,31 @@ int  posix_entry_create_xattr_set (xlator_t *this, const char *path,                               dict_t *dict)  { -        data_pair_t *trav = NULL;          int ret = -1;          if (!dict)                  goto out; -        trav = dict->members_list; -        while (trav) { -                if (!strcmp (GFID_XATTR_KEY, trav->key) || -                    !strcmp ("gfid-req", trav->key) || -                    !strcmp ("system.posix_acl_default", trav->key) || -                    !strcmp ("system.posix_acl_access", trav->key) || -                    ZR_FILE_CONTENT_REQUEST(trav->key)) { -                        trav = trav->next; -                        continue; +        int _handle_keyvalue_pair (dict_t *d, char *k, data_t *v, +                                   void *tmp) +        { +                if (!strcmp (GFID_XATTR_KEY, k) || +                    !strcmp ("gfid-req", k) || +                    !strcmp ("system.posix_acl_default", k) || +                    !strcmp ("system.posix_acl_access", k) || +                    ZR_FILE_CONTENT_REQUEST(k)) { +                        return 0;                  } -                ret = posix_handle_pair (this, path, trav, XATTR_CREATE); +                ret = posix_handle_pair (this, path, k, v, XATTR_CREATE);                  if (ret < 0) {                          errno = -ret; -                        ret = -1; -                        goto out; +                        return -1;                  } -                trav = trav->next; +                return 0;          } -        ret = 0; +        ret = dict_foreach (dict, _handle_keyvalue_pair, NULL);  out:          return ret; diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index df0dce72711..64cfca0c023 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -2375,7 +2375,6 @@ posix_setxattr (call_frame_t *frame, xlator_t *this,          int32_t       op_ret                  = -1;          int32_t       op_errno                = 0;          char *        real_path               = NULL; -        data_pair_t * trav                    = NULL;          int           ret                     = -1;          DECLARE_OLD_FS_ID_VAR; @@ -2391,18 +2390,17 @@ posix_setxattr (call_frame_t *frame, xlator_t *this,          op_ret = -1;          dict_del (dict, GFID_XATTR_KEY); -        trav = dict->members_list; -        while (trav) { -                ret = posix_handle_pair (this, real_path, trav, flags); +        int _handle_every_keyvalue_pair (dict_t *d, char *k, data_t *v, +                                         void *tmp) +        { +                ret = posix_handle_pair (this, real_path, k, v, flags);                  if (ret < 0) {                          op_errno = -ret; -                        goto out;                  } -                trav = trav->next; +                return ret;          } - -        op_ret = 0; +        op_ret = dict_foreach (dict, _handle_every_keyvalue_pair, NULL);  out:          SET_TO_OLD_FS_ID (); @@ -2895,7 +2893,6 @@ posix_fsetxattr (call_frame_t *frame, xlator_t *this,          int32_t            op_errno     = 0;          struct posix_fd *  pfd          = NULL;          int                _fd          = -1; -        data_pair_t * trav              = NULL;          int           ret               = -1;          DECLARE_OLD_FS_ID_VAR; @@ -2917,18 +2914,17 @@ posix_fsetxattr (call_frame_t *frame, xlator_t *this,          dict_del (dict, GFID_XATTR_KEY); -        trav = dict->members_list; - -        while (trav) { -                ret = posix_fhandle_pair (this, _fd, trav, flags); +        int _handle_every_keyvalue_pair (dict_t *d, char *k, data_t *v, +                                         void *tmp) +        { +                ret = posix_fhandle_pair (this, _fd, k, v, flags);                  if (ret < 0) {                          op_errno = -ret; -                        goto out;                  } -                trav = trav->next; +                return ret;          } -        op_ret = 0; +        op_ret = dict_foreach (dict, _handle_every_keyvalue_pair, NULL);  out:          SET_TO_OLD_FS_ID (); @@ -3123,8 +3119,6 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,          int              _fd = -1;          struct posix_fd *pfd = NULL; -        data_pair_t     *trav = NULL; -          char *    path  = NULL;          inode_t * inode = NULL; @@ -3132,8 +3126,6 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,          VALIDATE_OR_GOTO (xattr, out);          VALIDATE_OR_GOTO (this, out); -        trav = xattr->members_list; -          if (fd) {                  ret = posix_fd_ctx_get (fd, this, &pfd);                  if (ret < 0) { @@ -3157,19 +3149,21 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                  inode = fd->inode;          } -        while (trav && inode) { -                count = trav->value->len; -                array = GF_CALLOC (count, sizeof (char), -                                   gf_posix_mt_char); +        int _handle_every_keyvalue_pair (dict_t *d, char *k, data_t *v, +                                         void *tmp) +        { + +                count = v->len; +                array = GF_CALLOC (count, sizeof (char), gf_posix_mt_char);                  LOCK (&inode->lock);                  {                          if (loc) { -                                size = sys_lgetxattr (real_path, trav->key, (char *)array, -                                                      trav->value->len); +                                size = sys_lgetxattr (real_path, k, +                                                      (char *)array, v->len);                          } else { -                                size = sys_fgetxattr (_fd, trav->key, (char *)array, -                                                      trav->value->len); +                                size = sys_fgetxattr (_fd, k, (char *)array, +                                                      v->len);                          }                          op_errno = errno; @@ -3182,17 +3176,17 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                                                              "supported by filesystem");                                  } else if (op_errno != ENOENT ||                                             !posix_special_xattr (marker_xattrs, -                                                                 trav->key)) { +                                                                 k)) {                                          if (loc)                                                  gf_log (this->name, GF_LOG_ERROR,                                                          "getxattr failed on %s while doing "                                                          "xattrop: Key:%s (%s)", path, -                                                        trav->key, strerror (op_errno)); +                                                        k, strerror (op_errno));                                          else                                                  gf_log (this->name, GF_LOG_ERROR,                                                          "fgetxattr failed on fd=%d while doing "                                                          "xattrop: Key:%s (%s)", _fd, -                                                        trav->key, strerror (op_errno)); +                                                        k, strerror (op_errno));                                  }                                  op_ret = -1; @@ -3202,13 +3196,13 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                          switch (optype) {                          case GF_XATTROP_ADD_ARRAY: -                                __add_array ((int32_t *) array, (int32_t *) trav->value->data, -                                             trav->value->len / 4); +                                __add_array ((int32_t *) array, (int32_t *) v->data, +                                             v->len / 4);                                  break;                          case GF_XATTROP_ADD_ARRAY64: -                                __add_long_array ((int64_t *) array, (int64_t *) trav->value->data, -                                                  trav->value->len / 8); +                                __add_long_array ((int64_t *) array, (int64_t *) v->data, +                                                  v->len / 8);                                  break;                          default: @@ -3222,11 +3216,11 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                          }                          if (loc) { -                                size = sys_lsetxattr (real_path, trav->key, array, -                                                      trav->value->len, 0); +                                size = sys_lsetxattr (real_path, k, array, +                                                      v->len, 0);                          } else { -                                size = sys_fsetxattr (_fd, trav->key, (char *)array, -                                                      trav->value->len, 0); +                                size = sys_fsetxattr (_fd, k, (char *)array, +                                                      v->len, 0);                          }                  }          unlock: @@ -3241,30 +3235,29 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                                  gf_log (this->name, GF_LOG_ERROR,                                          "setxattr failed on %s while doing xattrop: "                                          "key=%s (%s)", path, -                                        trav->key, strerror (op_errno)); +                                        k, strerror (op_errno));                          else                                  gf_log (this->name, GF_LOG_ERROR,                                          "fsetxattr failed on fd=%d while doing xattrop: "                                          "key=%s (%s)", _fd, -                                        trav->key, strerror (op_errno)); +                                        k, strerror (op_errno));                          op_ret = -1;                          goto out;                  } else { -                        size = dict_set_bin (xattr, trav->key, array, -                                             trav->value->len); +                        size = dict_set_bin (xattr, k, array, v->len);                          if (size != 0) {                                  if (loc)                                          gf_log (this->name, GF_LOG_DEBUG,                                                  "dict_set_bin failed (path=%s): "                                                  "key=%s (%s)", path, -                                                trav->key, strerror (-size)); +                                                k, strerror (-size));                                  else                                          gf_log (this->name, GF_LOG_DEBUG,                                                  "dict_set_bin failed (fd=%d): "                                                  "key=%s (%s)", _fd, -                                                trav->key, strerror (-size)); +                                                k, strerror (-size));                                  op_ret = -1;                                  op_errno = EINVAL; @@ -3274,8 +3267,11 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,                  }                  array = NULL; -                trav = trav->next; + +        out: +                return op_ret;          } +        op_ret = dict_foreach (xattr, _handle_every_keyvalue_pair, NULL);  out:          GF_FREE (array); diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h index 669bd5cbb29..84ad85e8ada 100644 --- a/xlators/storage/posix/src/posix.h +++ b/xlators/storage/posix/src/posix.h @@ -142,14 +142,15 @@ int posix_pstat (xlator_t *this, uuid_t gfid, const char *real_path,                   struct iatt *iatt);  dict_t *posix_lookup_xattr_fill (xlator_t *this, const char *path,                                   loc_t *loc, dict_t *xattr, struct iatt *buf); -int posix_handle_pair (xlator_t *this, const char *real_path, -                       data_pair_t *trav, int flags); -int posix_fhandle_pair (xlator_t *this, int fd, data_pair_t *trav, int flags); +int posix_handle_pair (xlator_t *this, const char *real_path, char *key, +                       data_t *value, int flags); +int posix_fhandle_pair (xlator_t *this, int fd, char *key, data_t *value, +                        int flags);  void posix_spawn_janitor_thread (xlator_t *this);  int posix_get_file_contents (xlator_t *this, uuid_t pargfid,                               const char *name, char **contents); -int posix_set_file_contents (xlator_t *this, const char *path, -                             data_pair_t *trav, int flags); +int posix_set_file_contents (xlator_t *this, const char *path, char *key, +                             data_t *value, int flags);  int posix_acl_xattr_set (xlator_t *this, const char *path, dict_t *xattr_req);  int posix_gfid_heal (xlator_t *this, const char *path, dict_t *xattr_req);  int posix_entry_create_xattr_set (xlator_t *this, const char *path,  | 
