summaryrefslogtreecommitdiffstats
path: root/xlators/storage/posix/src
diff options
context:
space:
mode:
authorVijay Bellur <vbellur@redhat.com>2014-01-12 22:39:14 +0530
committerAnand Avati <avati@redhat.com>2014-01-14 00:23:52 -0800
commit3af42583dd804371952d61e9d7ff4c640e67ba0d (patch)
tree33b82a76443753017a7f150c0d824f701328cf13 /xlators/storage/posix/src
parentaa3b01533efcd85fc1e654ac14a03ab8e1d5bbab (diff)
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 <zlang@redhat.com> Change-Id: I96c15f12a5d7717b7584ba392f390a0b4f704a98 BUG: 1051896 Signed-off-by: Vijay Bellur <vbellur@redhat.com> Reviewed-on: http://review.gluster.org/6684 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/storage/posix/src')
-rw-r--r--xlators/storage/posix/src/posix-helpers.c4
-rw-r--r--xlators/storage/posix/src/posix.c8
2 files changed, 8 insertions, 4 deletions
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 ();