From 1ffdf112f707a13c9fd74bbf17f99d28f84f0f0c Mon Sep 17 00:00:00 2001 From: "Kaleb S. KEITHLEY" Date: Wed, 5 Nov 2014 10:26:46 -0500 Subject: api: versioned symbols in libgfapi.so for compatibility Use versioned symbols to keep libgfapi at libgfapi.so.0.0.0 Some nits uncovered: + there are a couple functions declared that do not have an associated definition, e.g. glfs_truncate(), glfs_caller_specific_init() + there are seven private/internal functions used by heal/src/glfsheal and the gfapi master xlator (glfs-master.c): glfs_loc_touchup(), glfs_active_subvol(), and glfs_subvol_done(), glfs_init_done(), glfs_resolve_at(), glfs_free_from_ctx(), and glfs_new_from_ctx(); which are not declared in glfs.h; + for this initial pass at versioned symbols, we use the earliest version of all public symbols, i.e. those for which there are declarations in glfs.h or glfs-handles.h. Further investigation as we do backports to 3.6, 3.4, and 3.4 will be required to determine if older implementations need to be preserved (forward ported) and their associated alias(es) and symbol version(s) defined. FWIW, we should consider linking all of our libraries with a map, it'll result in a cleaner ABI. Perhaps something for an intern to do or a Google Summer of Code project. Change-Id: Ie3323e62bb125a3b26214153278b4e998804de0e BUG: 1160710 Signed-off-by: Kaleb S. KEITHLEY Reviewed-on: http://review.gluster.org/9055 Tested-by: Gluster Build System Reviewed-by: Niels de Vos Tested-by: Niels de Vos Reviewed-by: Vijay Bellur --- api/src/glfs-resolve.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'api/src/glfs-resolve.c') diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index 7ed45169a25..7a3a0bc13c7 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -137,7 +137,7 @@ __glfs_refresh_inode (struct glfs *fs, xlator_t *subvol, inode_t *inode) } int -glfs_loc_touchup (loc_t *loc) +priv_glfs_loc_touchup (loc_t *loc) { char *path = NULL; int ret = -1; @@ -165,6 +165,7 @@ out: return ret; } +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_loc_touchup, 3.4.0); int glfs_resolve_symlink (struct glfs *fs, xlator_t *subvol, inode_t *inode, @@ -283,7 +284,7 @@ glfs_resolve_component (struct glfs *fs, xlator_t *subvol, inode_t *parent, } - glret = glfs_loc_touchup (&loc); + glret = priv_glfs_loc_touchup (&loc); if (glret < 0) { ret = -1; goto out; @@ -343,7 +344,7 @@ out: int -glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, +priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, const char *origpath, loc_t *loc, struct iatt *iatt, int follow, int reval) { @@ -420,7 +421,7 @@ glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, if (ret < 0) break; - ret = glfs_resolve_at (fs, subvol, parent, lpath, + ret = priv_glfs_resolve_at (fs, subvol, parent, lpath, &sym_loc, /* followed iatt becomes the component iatt @@ -474,7 +475,7 @@ glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, ret = 0; } - if (glfs_loc_touchup (loc) < 0) { + if (priv_glfs_loc_touchup (loc) < 0) { ret = -1; } out: @@ -485,6 +486,8 @@ out: return ret; } +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_resolve_at, 3.4.0); + int glfs_resolve_path (struct glfs *fs, xlator_t *subvol, const char *origpath, @@ -494,13 +497,13 @@ glfs_resolve_path (struct glfs *fs, xlator_t *subvol, const char *origpath, inode_t *cwd = NULL; if (origpath[0] == '/') - return glfs_resolve_at (fs, subvol, NULL, origpath, loc, iatt, - follow, reval); + return priv_glfs_resolve_at (fs, subvol, NULL, origpath, loc, + iatt, follow, reval); cwd = glfs_cwd_get (fs); - ret = glfs_resolve_at (fs, subvol, cwd, origpath, loc, iatt, - follow, reval); + ret = priv_glfs_resolve_at (fs, subvol, cwd, origpath, loc, iatt, + follow, reval); if (cwd) inode_unref (cwd); @@ -827,7 +830,7 @@ __glfs_active_subvol (struct glfs *fs) } xlator_t * -glfs_active_subvol (struct glfs *fs) +priv_glfs_active_subvol (struct glfs *fs) { xlator_t *subvol = NULL; xlator_t *old_subvol = NULL; @@ -848,14 +851,15 @@ glfs_active_subvol (struct glfs *fs) glfs_unlock (fs); if (old_subvol) - glfs_subvol_done (fs, old_subvol); + priv_glfs_subvol_done (fs, old_subvol); return subvol; } +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_active_subvol, 3.4.0); void -glfs_subvol_done (struct glfs *fs, xlator_t *subvol) +priv_glfs_subvol_done (struct glfs *fs, xlator_t *subvol) { int ref = 0; xlator_t *active_subvol = NULL; @@ -876,6 +880,7 @@ glfs_subvol_done (struct glfs *fs, xlator_t *subvol) } } +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_subvol_done, 3.4.0); int __glfs_cwd_set (struct glfs *fs, inode_t *inode) -- cgit