diff options
author | Kaleb S. KEITHLEY <kkeithle@redhat.com> | 2014-11-03 16:07:30 -0500 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-11-07 00:23:34 -0800 |
commit | 7e497871d11a3a527e2ce192e4274322631f27d0 (patch) | |
tree | e35b5c3d2d780a4512211c5c3a51e0190540424d /api/src/glfs-internal.h | |
parent | 1fe785152cc44e78fcd67da5091bc780eb42f1dd (diff) |
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: I499456807a5cd26acb39843216ece4276f8e9b84
BUG: 1160709
Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com>
Reviewed-on: http://review.gluster.org/9036
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Tested-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'api/src/glfs-internal.h')
-rw-r--r-- | api/src/glfs-internal.h | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/api/src/glfs-internal.h b/api/src/glfs-internal.h index ff875280ce6..afcbb4553ba 100644 --- a/api/src/glfs-internal.h +++ b/api/src/glfs-internal.h @@ -51,7 +51,7 @@ #define GLFS_LOC_FILL_INODE(oinode, loc, label) do { \ loc.inode = inode_ref (oinode); \ uuid_copy (loc.gfid, oinode->gfid); \ - ret = glfs_loc_touchup (&loc); \ + ret = priv_glfs_loc_touchup (&loc); \ if (ret != 0) { \ errno = EINVAL; \ goto label; \ @@ -67,7 +67,7 @@ } \ loc.parent = inode_ref (pinode); \ loc.name = path; \ - ret = glfs_loc_touchup (&loc); \ + ret = priv_glfs_loc_touchup (&loc); \ if (ret != 0) { \ errno = EINVAL; \ goto label; \ @@ -135,7 +135,7 @@ struct glfs_object { #define GF_MEMPOOL_COUNT_OF_LRU_BUF_T 256 int glfs_mgmt_init (struct glfs *fs); -void glfs_init_done (struct glfs *fs, int ret); +void priv_glfs_init_done (struct glfs *fs, int ret); int glfs_process_volfp (struct glfs *fs, FILE *fp); int glfs_resolve (struct glfs *fs, xlator_t *subvol, const char *path, loc_t *loc, struct iatt *iatt, int reval); @@ -197,11 +197,11 @@ void glfs_fd_destroy (struct glfs_fd *glfd); struct glfs_fd *glfs_fd_new (struct glfs *fs); void glfs_fd_bind (struct glfs_fd *glfd); -xlator_t * glfs_active_subvol (struct glfs *fs); -xlator_t * __glfs_active_subvol (struct glfs *fs); -void glfs_subvol_done (struct glfs *fs, xlator_t *subvol); +xlator_t *priv_glfs_active_subvol (struct glfs *fs); +xlator_t *__glfs_active_subvol (struct glfs *fs); +void priv_glfs_subvol_done (struct glfs *fs, xlator_t *subvol); -inode_t * glfs_refresh_inode (xlator_t *subvol, inode_t *inode); +inode_t *glfs_refresh_inode (xlator_t *subvol, inode_t *inode); inode_t *glfs_cwd_get (struct glfs *fs); int glfs_cwd_set (struct glfs *fs, inode_t *inode); @@ -212,14 +212,14 @@ int __glfs_cwd_set (struct glfs *fs, inode_t *inode); int glfs_resolve_base (struct glfs *fs, xlator_t *subvol, inode_t *inode, struct iatt *iatt); -int 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); -int glfs_loc_touchup (loc_t *loc); +int 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); +int priv_glfs_loc_touchup (loc_t *loc); void glfs_iatt_to_stat (struct glfs *fs, struct iatt *iatt, struct stat *stat); int glfs_loc_link (loc_t *loc, struct iatt *iatt); int glfs_loc_unlink (loc_t *loc); -dict_t * dict_for_key_value (const char *name, const char *value, size_t size); +dict_t *dict_for_key_value (const char *name, const char *value, size_t size); int glfs_getxattr_process (void *value, size_t size, dict_t *xattr, const char *name); @@ -250,7 +250,7 @@ int glfs_get_volume_info (struct glfs *fs); NULL : Otherwise. */ -struct glfs *glfs_new_from_ctx (glusterfs_ctx_t *ctx); +struct glfs *priv_glfs_new_from_ctx (glusterfs_ctx_t *ctx); /* SYNOPSIS @@ -275,6 +275,13 @@ struct glfs *glfs_new_from_ctx (glusterfs_ctx_t *ctx); void */ -void glfs_free_from_ctx (struct glfs *fs); +void priv_glfs_free_from_ctx (struct glfs *fs); + +#define GFAPI_SYMVER_PUBLIC_DEFAULT(fn, dotver) \ + asm(".symver pub_"STR(fn)", "STR(fn)"@@GFAPI_"STR(dotver)) + +#define GFAPI_SYMVER_PRIVATE_DEFAULT(fn, dotver) \ + asm(".symver priv_"STR(fn)", "STR(fn)"@@GFAPI_PRIVATE_"STR(dotver)) +#define STR(str) #str #endif /* !_GLFS_INTERNAL_H */ |