From 72324ef5e6a1749fbdb1944b2f088f58090f81b3 Mon Sep 17 00:00:00 2001 From: Emmanuel Dreyfus Date: Mon, 1 Sep 2014 14:07:15 +0200 Subject: Always check for ENODATA with ENOATTR Linux defines ENODATA and ENOATTR with the same value, which means that code can miss on on the two without breaking. FreeBSD does not have ENODATA and GlusterFS defines it as ENOATTR just like Linux does. On NetBSD, ENODATA != ENOATTR, hence we need to check for both values to get portable behavior. BUG: 764655 Change-Id: I003a3af055fdad285d235f2a0c192c9cce56fab8 Signed-off-by: Emmanuel Dreyfus Reviewed-on: http://review.gluster.org/8447 Tested-by: Gluster Build System Reviewed-by: Niels de Vos --- xlators/features/marker/src/marker.c | 6 +++--- xlators/mgmt/glusterd/src/glusterd-quota.c | 3 +++ xlators/mount/fuse/src/fuse-bridge.c | 2 +- xlators/storage/posix/src/posix-handle.c | 2 +- xlators/storage/posix/src/posix-handle.h | 2 +- xlators/storage/posix/src/posix.c | 20 ++++++++++++-------- 6 files changed, 21 insertions(+), 14 deletions(-) (limited to 'xlators') diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index e9a8e544b3b..465ee8c7ce6 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -1130,7 +1130,7 @@ marker_rename_release_oldp_lock (call_frame_t *frame, void *cookie, local = frame->local; oplocal = local->oplocal; - if ((op_ret < 0) && (op_errno != ENOATTR)) { + if ((op_ret < 0) && (op_errno != ENOATTR) && (op_errno != ENODATA)) { local->err = op_errno; } @@ -1275,7 +1275,7 @@ marker_do_rename (call_frame_t *frame, void *cookie, xlator_t *this, if (cookie == (void *) _GF_UID_GID_CHANGED) MARKER_RESET_UID_GID (frame, frame->root, local); - if ((op_ret < 0) && (op_errno != ENOATTR)) { + if ((op_ret < 0) && (op_errno != ENOATTR) && (op_errno != ENODATA)) { local->err = op_errno ? op_errno : EINVAL; gf_log (this->name, GF_LOG_WARNING, "fetching contribution values from %s (gfid:%s) " @@ -1327,7 +1327,7 @@ marker_get_newpath_contribution (call_frame_t *frame, void *cookie, if (cookie == (void *) _GF_UID_GID_CHANGED) MARKER_RESET_UID_GID (frame, frame->root, local); - if ((op_ret < 0) && (op_errno != ENOATTR)) { + if ((op_ret < 0) && (op_errno != ENOATTR) && (op_errno != ENODATA)) { local->err = op_errno ? op_errno : EINVAL; gf_log (this->name, GF_LOG_WARNING, "fetching contribution values from %s (gfid:%s) " diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c index 14767f75089..f2f742ddaf2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quota.c +++ b/xlators/mgmt/glusterd/src/glusterd-quota.c @@ -449,6 +449,9 @@ glusterd_set_quota_limit (char *volname, char *path, char *hard_limit, sizeof (existing_limit)); if (ret < 0) { switch (errno) { +#if defined(ENOATTR) && (ENOATTR != ENODATA) + case ENODATA: /* FALLTHROUGH */ +#endif case ENOATTR: existing_limit.sl = -1; break; diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index a50f0c8387f..dd51f5a6608 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -3312,7 +3312,7 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } /* if(state->name)...else */ } else { /* if failure - no need to check if listxattr or getxattr */ - if (op_errno != ENODATA) { + if (op_errno != ENODATA && op_errno != ENOATTR) { if (op_errno == ENOTSUP) { GF_LOG_OCCASIONALLY (gf_fuse_xattr_enotsup_log, "glusterfs-fuse", diff --git a/xlators/storage/posix/src/posix-handle.c b/xlators/storage/posix/src/posix-handle.c index 48ca77d9e01..9439b295cb9 100644 --- a/xlators/storage/posix/src/posix-handle.c +++ b/xlators/storage/posix/src/posix-handle.c @@ -549,7 +549,7 @@ posix_does_old_trash_exists (char *old_trash) ret = lstat (old_trash, &stbuf); if ((ret == 0) && S_ISDIR (stbuf.st_mode)) { ret = sys_lgetxattr (old_trash, "trusted.gfid", gfid, 16); - if ((ret < 0) && (errno == ENODATA)) + if ((ret < 0) && (errno == ENODATA || errno == ENOATTR) ) exists = _gf_true; } return exists; diff --git a/xlators/storage/posix/src/posix-handle.h b/xlators/storage/posix/src/posix-handle.h index fec1447982b..a30e0296140 100644 --- a/xlators/storage/posix/src/posix-handle.h +++ b/xlators/storage/posix/src/posix-handle.h @@ -68,7 +68,7 @@ op_ret = sys_lgetxattr (path, key, &value, sizeof (value)); \ if (op_ret == -1) { \ op_errno = errno; \ - if (op_errno == ENOATTR) { \ + if (op_errno == ENOATTR || op_errno == ENODATA) { \ value = 1; \ } else { \ gf_log (this->name, GF_LOG_WARNING,"getting xattr " \ diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index e0fff819c6c..e8d6a8bd66a 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -3910,8 +3910,9 @@ posix_fgetxattr (call_frame_t *frame, xlator_t *this, size = sys_fgetxattr (_fd, key, NULL, 0); if (size <= 0) { op_errno = errno; - gf_log (this->name, ((errno == ENODATA) ? - GF_LOG_DEBUG : GF_LOG_ERROR), + gf_log (this->name, + ((errno == ENODATA || errno == ENOATTR) ? + GF_LOG_DEBUG : GF_LOG_ERROR), "fgetxattr failed on key %s (%s)", key, strerror (op_errno)); goto done; @@ -4131,7 +4132,7 @@ _posix_remove_xattr (dict_t *dict, char *key, data_t *value, void *data) op_ret = sys_lremovexattr (filler->real_path, key); if (op_ret == -1) { filler->op_errno = errno; - if (errno != ENOATTR && errno != EPERM) + if (errno != ENOATTR && errno != ENODATA && errno != EPERM) gf_log (this->name, GF_LOG_ERROR, "removexattr failed on %s (for %s): %s", filler->real_path, key, strerror (errno)); @@ -4191,7 +4192,8 @@ posix_removexattr (call_frame_t *frame, xlator_t *this, op_ret = sys_lremovexattr (real_path, name); if (op_ret == -1) { op_errno = errno; - if (op_errno != ENOATTR && op_errno != EPERM) + if (op_errno != ENOATTR && op_errno != ENODATA && + op_errno != EPERM) gf_log (this->name, GF_LOG_ERROR, "removexattr on %s (for %s): %s", real_path, name, strerror (op_errno)); @@ -4246,7 +4248,8 @@ posix_fremovexattr (call_frame_t *frame, xlator_t *this, op_ret = sys_fremovexattr (_fd, name); if (op_ret == -1) { op_errno = errno; - if (op_errno != ENOATTR && op_errno != EPERM) + if (op_errno != ENOATTR && op_errno != ENODATA && + op_errno != EPERM) gf_log (this->name, GF_LOG_ERROR, "fremovexattr (for %s): %s", name, strerror (op_errno)); @@ -5516,15 +5519,16 @@ init (xlator_t *this) ret = -1; goto out; } - } else if ((size == -1) && (errno == ENODATA)) { - + } else if ((size == -1) && + (errno == ENODATA || errno == ENOATTR)) { gf_log (this->name, GF_LOG_ERROR, "Extended attribute trusted.glusterfs." "volume-id is absent"); ret = -1; goto out; - } else if ((size == -1) && (errno != ENODATA)) { + } else if ((size == -1) && (errno != ENODATA) && + (errno != ENOATTR)) { /* Wrong 'volume-id' is set, it should be error */ gf_log (this->name, GF_LOG_WARNING, "%s: failed to fetch volume-id (%s)", -- cgit