diff options
author | Amar Tumballi <amarts@redhat.com> | 2012-09-06 00:13:04 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-09-06 00:34:15 -0700 |
commit | d6c99b6134f1eb90b3a8020c3538101df266e9b5 (patch) | |
tree | a5ec27bcf3136ddfda5ce5f21917bea50ad3be58 /xlators | |
parent | 54b71368ef290bc579f113e683a82b09893fb50a (diff) |
libglusterfs/dict: make 'dict_t' a opaque object
* ie, don't dereference dict_t pointer, instead use APIs everywhere
* other than dict_t only 'data_t' should be the valid export from dict.h
* added 'dict_foreach_fnmatch()' API
* changed dict_lookup() to use data_t, instead of data_pair_t
Change-Id: I400bb0dd55519a7c5d2a107e67c8e7a7207228dc
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 850917
Reviewed-on: http://review.gluster.org/3829
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
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 40e5abd3a..4679e4610 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 6ea288a5e..148a939ca 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 ff42d8dc1..e42c955d0 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 4d8d326ec..24f28c1fe 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 8053f871a..e85661c14 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 6588a4499..76d912a09 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 3bb48b905..82159fcac 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 071a25b4b..a98236c1e 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 f478db7a3..f9e9a835a 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 cd68ab6a0..22860255a 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 a0c941b20..eeb208eaf 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 cb1483258..4a2e56bb3 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 808b1276b..2a7cfca91 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 8804176dc..180b28294 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 aea27500d..4385f8764 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 a3522a98c..491a3255e 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 eef42fb34..d11454bc4 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 51478fb12..3a48a41d7 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 28f480a31..1375bd482 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 17a206394..f55b3ea51 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 619f488d7..1ad774e1b 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 55923990d..237acab9f 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 d1cdebdee..9c843d0bb 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 eec1684ca..0adcd1cf1 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 a8f79ea76..db02aaf92 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 b6519e595..9b1bd7cf5 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 ea3ad429a..4169429bd 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 df0dce727..64cfca0c0 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 669bd5cbb..84ad85e8a 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, |