From 3af42583dd804371952d61e9d7ff4c640e67ba0d Mon Sep 17 00:00:00 2001 From: Vijay Bellur Date: Sun, 12 Jan 2014 22:39:14 +0530 Subject: storage/posix: UNWIND right op_error and op_errno in *setxattr() 1. errno was being set after gf_log() in posix_{f}handle_pair, this would cause errno to be overwritten. 2. dht would expect -1 for indication of failure in setxattr callback (dht_err_cbk()). posix_{f}setxattr has been changed to set op_ret as -1 instead of -op_errno. 3. dict_foreach() has been changed to return an error if the invoked fn() returns < 0. Bug report and test case credits to Zorro Lang Change-Id: I96c15f12a5d7717b7584ba392f390a0b4f704a98 BUG: 1051896 Signed-off-by: Vijay Bellur Reviewed-on: http://review.gluster.org/6684 Tested-by: Gluster Build System Reviewed-by: Niels de Vos Reviewed-by: Anand Avati --- xlators/storage/posix/src/posix-helpers.c | 4 ++-- xlators/storage/posix/src/posix.c | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'xlators/storage/posix') diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index d2c991900..3a66ecfc2 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -792,6 +792,7 @@ posix_handle_pair (xlator_t *this, const char *real_path, value->len, flags); if (sys_ret < 0) { + ret = -errno; if (errno == ENOTSUP) { GF_LOG_OCCASIONALLY(gf_xattr_enotsup_log, this->name,GF_LOG_WARNING, @@ -823,7 +824,6 @@ posix_handle_pair (xlator_t *this, const char *real_path, #endif /* DARWIN */ } - ret = -errno; goto out; } } @@ -847,6 +847,7 @@ posix_fhandle_pair (xlator_t *this, int fd, value->len, flags); if (sys_ret < 0) { + ret = -errno; if (errno == ENOTSUP) { GF_LOG_OCCASIONALLY(gf_xattr_enotsup_log, this->name,GF_LOG_WARNING, @@ -873,7 +874,6 @@ posix_fhandle_pair (xlator_t *this, int fd, #endif /* DARWIN */ } - ret = -errno; goto out; } diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 7695289fa..dc4af1b92 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -2950,8 +2950,10 @@ posix_setxattr (call_frame_t *frame, xlator_t *this, filler.flags = flags; op_ret = dict_foreach (dict, _handle_setxattr_keyvalue_pair, &filler); - if (op_ret < 0) + if (op_ret < 0) { op_errno = -op_ret; + op_ret = -1; + } out: SET_TO_OLD_FS_ID (); @@ -3916,8 +3918,10 @@ posix_fsetxattr (call_frame_t *frame, xlator_t *this, filler.flags = flags; op_ret = dict_foreach (dict, _handle_fsetxattr_keyvalue_pair, &filler); - if (op_ret < 0) + if (op_ret < 0) { op_errno = -op_ret; + op_ret = -1; + } out: SET_TO_OLD_FS_ID (); -- cgit