From 28397cae4102ac3f08576ebaf071ad92683097e8 Mon Sep 17 00:00:00 2001 From: Emmanuel Dreyfus Date: Thu, 2 Apr 2015 15:51:30 +0200 Subject: Avoid conflict between contrib/uuid and system uuid glusterfs relies on Linux uuid implementation, which API is incompatible with most other systems's uuid. As a result, libglusterfs has to embed contrib/uuid, which is the Linux implementation, on non Linux systems. This implementation is incompatible with systtem's built in, but the symbols have the same names. Usually this is not a problem because when we link with -lglusterfs, libc's symbols are trumped. However there is a problem when a program not linked with -lglusterfs will dlopen() glusterfs component. In such a case, libc's uuid implementation is already loaded in the calling program, and it will be used instead of libglusterfs's implementation, causing crashes. A possible workaround is to use pre-load libglusterfs in the calling program (using LD_PRELOAD on NetBSD for instance), but such a mechanism is not portable, nor is it flexible. A much better approach is to rename libglusterfs's uuid_* functions to gf_uuid_* to avoid any possible conflict. This is what this change attempts. BUG: 1206587 Change-Id: I9ccd3e13afed1c7fc18508e92c7beb0f5d49f31a Signed-off-by: Emmanuel Dreyfus Reviewed-on: http://review.gluster.org/10017 Tested-by: Gluster Build System Reviewed-by: Niels de Vos --- xlators/storage/posix/src/posix-handle.c | 10 +++---- xlators/storage/posix/src/posix-handle.h | 4 +-- xlators/storage/posix/src/posix-helpers.c | 12 ++++----- xlators/storage/posix/src/posix.c | 44 +++++++++++++++---------------- 4 files changed, 35 insertions(+), 35 deletions(-) (limited to 'xlators/storage/posix') diff --git a/xlators/storage/posix/src/posix-handle.c b/xlators/storage/posix/src/posix-handle.c index 2bf8813f44c..5aedfe3eb95 100644 --- a/xlators/storage/posix/src/posix-handle.c +++ b/xlators/storage/posix/src/posix-handle.c @@ -87,7 +87,7 @@ posix_make_ancestral_node (const char *priv_base_path, char *path, int pathsize, strcat (real_path, "/"); strcat (real_path, path); loc.inode = inode_ref (inode); - uuid_copy (loc.gfid, inode->gfid); + gf_uuid_copy (loc.gfid, inode->gfid); entry->dict = posix_lookup_xattr_fill (THIS, real_path, &loc, xdata, iabuf); @@ -119,7 +119,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize, int ret = -1; uuid_t tmp_gfid = {0, }; - if (!path || !parent || !priv_base_path || uuid_is_null (gfid)) { + if (!path || !parent || !priv_base_path || gf_uuid_is_null (gfid)) { goto out; } @@ -135,7 +135,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize, inode = itable->root; memset (&iabuf, 0, sizeof (iabuf)); - uuid_copy (iabuf.ia_gfid, inode->gfid); + gf_uuid_copy (iabuf.ia_gfid, inode->gfid); iabuf.ia_type = inode->ia_type; ret = posix_make_ancestral_node (priv_base_path, path, pathsize, @@ -163,7 +163,7 @@ posix_make_ancestryfromgfid (xlator_t *this, char *path, int pathsize, pgfidstr = strtok_r (linkname + SLEN("../../00/00/"), "/", &saveptr); dir_name = strtok_r (NULL, "/", &saveptr); - uuid_parse (pgfidstr, tmp_gfid); + gf_uuid_parse (pgfidstr, tmp_gfid); ret = posix_make_ancestryfromgfid (this, path, pathsize, head, type, tmp_gfid, handle_size, @@ -609,7 +609,7 @@ posix_mv_old_trash_into_new_trash (xlator_t *this, char *old, char *new) if (!posix_does_old_trash_exists (old)) goto out; - uuid_generate (dest_name); + gf_uuid_generate (dest_name); snprintf (dest_old, sizeof (dest_old), "%s/%s", new, uuid_utoa (dest_name)); ret = rename (old, dest_old); diff --git a/xlators/storage/posix/src/posix-handle.h b/xlators/storage/posix/src/posix-handle.h index 3af1a70b31a..e0b5b67e20f 100644 --- a/xlators/storage/posix/src/posix-handle.h +++ b/xlators/storage/posix/src/posix-handle.h @@ -181,7 +181,7 @@ #define MAKE_INODE_HANDLE(rpath, this, loc, iatt_p) do { \ - if (uuid_is_null (loc->gfid)) { \ + if (gf_uuid_is_null (loc->gfid)) { \ gf_log (this->name, GF_LOG_ERROR, \ "null gfid for path %s", (loc)->path); \ break; \ @@ -210,7 +210,7 @@ #define MAKE_ENTRY_HANDLE(entp, parp, this, loc, ent_p) do { \ char *__parp; \ \ - if (uuid_is_null (loc->pargfid) || !loc->name) { \ + if (gf_uuid_is_null (loc->pargfid) || !loc->name) { \ gf_log (this->name, GF_LOG_ERROR, \ "null pargfid/name for path %s", loc->path); \ break; \ diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 4a062970f7d..0638f845e9d 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -420,7 +420,7 @@ posix_fill_ino_from_gfid (xlator_t *this, struct iatt *buf) int i = 0; /* consider least significant 8 bytes of value out of gfid */ - if (uuid_is_null (buf->ia_gfid)) { + if (gf_uuid_is_null (buf->ia_gfid)) { buf->ia_ino = -1; goto out; } @@ -519,7 +519,7 @@ posix_istat (xlator_t *this, uuid_t gfid, const char *basename, if (basename) posix_fill_gfid_path (this, real_path, &stbuf); else - uuid_copy (stbuf.ia_gfid, gfid); + gf_uuid_copy (stbuf.ia_gfid, gfid); posix_fill_ino_from_gfid (this, &stbuf); @@ -574,8 +574,8 @@ posix_pstat (xlator_t *this, uuid_t gfid, const char *path, iatt_from_stat (&stbuf, &lstatbuf); - if (gfid && !uuid_is_null (gfid)) - uuid_copy (stbuf.ia_gfid, gfid); + if (gfid && !gf_uuid_is_null (gfid)) + gf_uuid_copy (stbuf.ia_gfid, gfid); else posix_fill_gfid_path (this, path, &stbuf); @@ -724,7 +724,7 @@ posix_gfid_set (xlator_t *this, const char *path, loc_t *loc, dict_t *xattr_req) strerror (errno)); goto out; } - uuid_copy (uuid_curr, uuid_req); + gf_uuid_copy (uuid_curr, uuid_req); verify_handle: if (!S_ISDIR (stat.st_mode)) @@ -1125,7 +1125,7 @@ del_stale_dir_handle (xlator_t *this, uuid_t gfid) gf_log (this->name, GF_LOG_DEBUG, "%s: %s", newpath, strerror (ENOENT)); stale = _gf_true; - } else if (size == 16 && uuid_compare (gfid, gfid_curr)) { + } else if (size == 16 && gf_uuid_compare (gfid, gfid_curr)) { gf_log (this->name, GF_LOG_DEBUG, "%s: mismatching gfid: %s, " "at %s", hpath, uuid_utoa (gfid_curr), newpath); stale = _gf_true; diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 3cc942d50a6..9f20aeb6abc 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -128,13 +128,13 @@ posix_lookup (call_frame_t *frame, xlator_t *this, op_ret = dict_get_int32 (xdata, GF_GFIDLESS_LOOKUP, &gfidless); op_ret = -1; - if (uuid_is_null (loc->pargfid) || (loc->name == NULL)) { + if (gf_uuid_is_null (loc->pargfid) || (loc->name == NULL)) { /* nameless lookup */ MAKE_INODE_HANDLE (real_path, this, loc, &buf); } else { MAKE_ENTRY_HANDLE (real_path, par_path, this, loc, &buf); - if (uuid_is_null (loc->inode->gfid)) { + if (gf_uuid_is_null (loc->inode->gfid)) { posix_gfid_heal (this, real_path, loc, xdata); MAKE_ENTRY_HANDLE (real_path, par_path, this, loc, &buf); @@ -161,7 +161,7 @@ posix_lookup (call_frame_t *frame, xlator_t *this, } if (priv->update_pgfid_nlinks) { - if (!uuid_is_null (loc->pargfid) && !IA_ISDIR (buf.ia_type)) { + if (!gf_uuid_is_null (loc->pargfid) && !IA_ISDIR (buf.ia_type)) { MAKE_PGFID_XATTR_KEY (pgfid_xattr_key, PGFID_XATTR_KEY_PREFIX, loc->pargfid); @@ -199,7 +199,7 @@ parent: op_ret = entry_ret; out: - if (!op_ret && !gfidless && uuid_is_null (buf.ia_gfid)) { + if (!op_ret && !gfidless && gf_uuid_is_null (buf.ia_gfid)) { gf_log (this->name, GF_LOG_ERROR, "buf->ia_gfid is null for " "%s", (real_path) ? real_path: ""); op_ret = -1; @@ -1314,7 +1314,7 @@ posix_mkdir (call_frame_t *frame, xlator_t *this, SET_FS_ID (frame->root->uid, gid); op_ret = dict_get_ptr (xdata, "gfid-req", &uuid_req); - if (uuid_req && !uuid_is_null (uuid_req)) { + if (uuid_req && !gf_uuid_is_null (uuid_req)) { op_ret = posix_istat (this, uuid_req, NULL, &stbuf); if ((op_ret == 0) && IA_ISDIR (stbuf.ia_type)) { size = posix_handle_path (this, uuid_req, NULL, NULL, @@ -2004,7 +2004,7 @@ posix_rename (call_frame_t *frame, xlator_t *this, if ((op_ret == -1) && (errno == ENOENT)){ was_present = 0; } else { - uuid_copy (victim, stbuf.ia_gfid); + gf_uuid_copy (victim, stbuf.ia_gfid); if (IA_ISDIR (stbuf.ia_type)) was_dir = 1; nlink = stbuf.ia_nlink; @@ -2020,7 +2020,7 @@ posix_rename (call_frame_t *frame, xlator_t *this, } if (was_present && IA_ISDIR(stbuf.ia_type) && - uuid_compare (newloc->inode->gfid, stbuf.ia_gfid)) { + gf_uuid_compare (newloc->inode->gfid, stbuf.ia_gfid)) { gf_log (this->name, GF_LOG_WARNING, "found directory %s at %s while renaming %s", uuid_utoa_r (newloc->inode->gfid, olddirid), @@ -2789,7 +2789,7 @@ _fill_writev_xdata (fd_t *fd, dict_t *xdata, xlator_t *this, int is_append) if (fd) inode = fd->inode; - if (!fd || !fd->inode || uuid_is_null (fd->inode->gfid)) { + if (!fd || !fd->inode || gf_uuid_is_null (fd->inode->gfid)) { gf_log_callingfn (this->name, GF_LOG_ERROR, "Invalid Args: " "fd: %p inode: %p gfid:%s", fd, inode?inode:0, inode?uuid_utoa(inode->gfid):"N/A"); @@ -3418,7 +3418,7 @@ posix_links_in_same_directory (char *dirpath, int count, inode_t *leaf_inode, loc_t loc = {0, }; loc.inode = inode_ref (leaf_inode); - uuid_copy (loc.gfid, leaf_inode->gfid); + gf_uuid_copy (loc.gfid, leaf_inode->gfid); strcpy (temppath, dirpath); strcat (temppath, "/"); @@ -3510,7 +3510,7 @@ posix_get_ancestry_non_directory (xlator_t *this, inode_t *leaf_inode, goto out; } - uuid_copy (loc->gfid, leaf_inode->gfid); + gf_uuid_copy (loc->gfid, leaf_inode->gfid); MAKE_INODE_HANDLE (leaf_path, this, loc, NULL); if (!leaf_path) { @@ -3592,7 +3592,7 @@ posix_get_ancestry_non_directory (xlator_t *this, inode_t *leaf_inode, nlink_samepgfid = ntoh32 (nlink_samepgfid); strcpy (pgfidstr, key + strlen(PGFID_XATTR_KEY_PREFIX)); - uuid_parse (pgfidstr, pgfid); + gf_uuid_parse (pgfidstr, pgfid); handle_size = POSIX_GFID_HANDLE_SIZE(priv->base_path_length); @@ -3792,7 +3792,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, (void) snprintf (host_buf, 1024, "", priv->base_path, ((priv->node_uuid_pathinfo - && !uuid_is_null(priv->glusterd_uuid)) + && !gf_uuid_is_null(priv->glusterd_uuid)) ? uuid_utoa (priv->glusterd_uuid) : priv->hostname), rpath); @@ -3816,7 +3816,7 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, if (loc->inode && name && (strcmp (name, GF_XATTR_NODE_UUID_KEY) == 0) - && !uuid_is_null (priv->glusterd_uuid)) { + && !gf_uuid_is_null (priv->glusterd_uuid)) { (void) snprintf (host_buf, 1024, "%s", uuid_utoa (priv->glusterd_uuid)); @@ -4785,7 +4785,7 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd, _fd = pfd->fd; } - if (loc && !uuid_is_null (loc->gfid)) + if (loc && !gf_uuid_is_null (loc->gfid)) MAKE_INODE_HANDLE (real_path, this, loc, NULL); if (real_path) { @@ -5163,12 +5163,12 @@ posix_fill_readdir (fd_t *fd, DIR *dir, off_t off, size_t size, * when the cluster/dht xlator decides to distribute * exended attribute backing file across storage servers. */ - if ((uuid_compare (fd->inode->gfid, rootgfid) == 0) + if ((gf_uuid_compare (fd->inode->gfid, rootgfid) == 0) && (!strcmp(entry->d_name, ".attribute"))) continue; #endif /* __NetBSD__ */ - if ((uuid_compare (fd->inode->gfid, rootgfid) == 0) + if ((gf_uuid_compare (fd->inode->gfid, rootgfid) == 0) && (!strcmp (GF_HIDDEN_PATH, entry->d_name))) { continue; } @@ -5296,7 +5296,7 @@ posix_readdirp_fill (xlator_t *this, fd_t *fd, gf_dirent_t *entries, dict_t *dic inode = inode_grep (fd->inode->table, fd->inode, entry->d_name); if (inode) - uuid_copy (gfid, inode->gfid); + gf_uuid_copy (gfid, inode->gfid); strcpy (&hpath[len+1], entry->d_name); @@ -5725,7 +5725,7 @@ reconfigure (xlator_t *this, dict_t *options) options, bool, out); if (priv->node_uuid_pathinfo && - (uuid_is_null (priv->glusterd_uuid))) { + (gf_uuid_is_null (priv->glusterd_uuid))) { gf_log (this->name, GF_LOG_INFO, "glusterd uuid is NULL, pathinfo xattr would" " fallback to :"); @@ -5837,7 +5837,7 @@ init (xlator_t *this) tmp_data = dict_get (this->options, "volume-id"); if (tmp_data) { - op_ret = uuid_parse (tmp_data->data, dict_uuid); + op_ret = gf_uuid_parse (tmp_data->data, dict_uuid); if (op_ret < 0) { gf_log (this->name, GF_LOG_ERROR, "wrong volume-id (%s) set in volume file", @@ -5848,7 +5848,7 @@ init (xlator_t *this) size = sys_lgetxattr (dir_data->data, "trusted.glusterfs.volume-id", old_uuid, 16); if (size == 16) { - if (uuid_compare (old_uuid, dict_uuid)) { + if (gf_uuid_compare (old_uuid, dict_uuid)) { gf_log (this->name, GF_LOG_ERROR, "mismatching volume-id (%s) received. " "already is a part of volume %s ", @@ -6054,7 +6054,7 @@ init (xlator_t *this) ret = dict_get_str (this->options, "glusterd-uuid", &guuid); if (!ret) { - if (uuid_parse (guuid, _private->glusterd_uuid)) + if (gf_uuid_parse (guuid, _private->glusterd_uuid)) gf_log (this->name, GF_LOG_WARNING, "Cannot parse " "glusterd (node) UUID, node-uuid xattr " "request would return - \"No such attribute\""); @@ -6155,7 +6155,7 @@ init (xlator_t *this) GF_OPTION_INIT ("node-uuid-pathinfo", _private->node_uuid_pathinfo, bool, out); if (_private->node_uuid_pathinfo && - (uuid_is_null (_private->glusterd_uuid))) { + (gf_uuid_is_null (_private->glusterd_uuid))) { gf_log (this->name, GF_LOG_INFO, "glusterd uuid is NULL, pathinfo xattr would" " fallback to :"); -- cgit