summaryrefslogtreecommitdiffstats
path: root/xlators/storage/posix/src
diff options
context:
space:
mode:
authorRaghavendra G <raghavendra@gluster.com>2013-05-18 11:52:09 +0530
committerAnand Avati <avati@redhat.com>2014-02-08 11:26:42 -0800
commit66113e3473555c31926045218dc8b79c61751d5d (patch)
tree88e0efe643ab06232fea70dbcd9fd4101e4adf3f /xlators/storage/posix/src
parent104e8df41073036eb47583503035bad298bdbe87 (diff)
features/marker-quota: more stringent error handling in rename.
If an error occurs and op_errno is not set to non-zero value, we can end up in loosing a frame resulting in a hung syscall. This patch adds code setting op_errno appropriately in storage/posix and makes marker to set err to a default non-zero value in case of op_errno being zero. Change-Id: Idc2c3e843b932709a69b32ba67deb284547168f2 BUG: 833586 Signed-off-by: Raghavendra G <raghavendra@gluster.com> Reviewed-on: http://review.gluster.org/5032 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/storage/posix/src')
-rw-r--r--xlators/storage/posix/src/posix.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index ba928de2a..fde322099 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -3383,7 +3383,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
dict = dict_new ();
if (!dict) {
- op_errno = ENOMEM;
+ op_errno = ENOMEM;
goto out;
}
@@ -3550,6 +3550,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
value = GF_CALLOC (size + 1, sizeof(char), gf_posix_mt_char);
if (!value) {
op_ret = -1;
+ op_errno = ENOMEM;
goto out;
}
size = sys_lgetxattr (real_path, key, value, size);
@@ -3565,6 +3566,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
value [size] = '\0';
op_ret = dict_set_dynptr (dict, key, value, size);
if (op_ret < 0) {
+ op_errno = -op_ret;
gf_log (this->name, GF_LOG_ERROR, "dict set operation "
"on %s for the key %s failed.", real_path, key);
GF_FREE (value);
@@ -3642,6 +3644,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
value [size] = '\0';
op_ret = dict_set_dynptr (dict, key, value, size);
if (op_ret < 0) {
+ op_errno = -op_ret;
gf_log (this->name, GF_LOG_ERROR, "dict set operation "
"on %s for the key %s failed.", real_path, key);
GF_FREE (value);