summaryrefslogtreecommitdiffstats
path: root/api/src/glfs-handleops.c
diff options
context:
space:
mode:
authorKaleb S. KEITHLEY <kkeithle@redhat.com>2014-11-18 11:08:16 -0500
committerShyamsundar Ranganathan <srangana@redhat.com>2015-01-12 09:16:08 -0800
commitc49a77001bd80affa70d22ba974d8de9e3f0f0cd (patch)
tree15cf68f9bbe72f3d4d00f5ae750e4d8ac980af36 /api/src/glfs-handleops.c
parentf839e25a1ee67279c0c59da9d7262728133e8b37 (diff)
api: versioned symbols in libgfapi.so for compatibility
Use versioned symbols to keep libgfapi at libgfapi.so.0.0.0 Revisited to address broken build on Mac OS X See http://review.gluster.org/9036 Rebased to include http://review.gluster.org/#/c/9376/ (glfs_resolve()) but note that gerrit's "Rebase Change" couldn't do it. N.B. noticed that glfs_get_volumeid() decl in glfs.h was missing the __THROW, added it. On systems using ELF and the GNU toolchain, symbol versions are created with a .symver asm operand in the .c source file. Clang is claimed to be compatible with gcc, so we'll pretend for now that this also works with clang. On Mac OS X, aliases are created with __asm "magic" in the .h header file. In the normal case, when both the decl and defn match, that's all that's needed. In our case though the decl and defn don't match --- we have, e.g. a defn such as 'int glfs_foo(...)' and the corresponding decl is 'int pub_glfs_foo(...)'. To make this work we create the necessary aliases in the library at link time with the -alias_list link option. Note that this results in there being pairs of symbols in the .dylib, e.g. _pub_glfs_foo and _glfs_foo$GFAPI_3.4.0. We could use another link option, -unexported_symbols_list to elide the _pub_glfs_* symbols. (And we probably should.) Linux symbol versioning was essentially copied from Solaris; in general I would expect this to "just work" on Solaris, but until someone tries we don't really know. Change-Id: Icb96a3c2d80be7b6d7a6849bb9168f03a947f47c BUG: 1160709 Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com> Reviewed-on: http://review.gluster.org/9143 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Diffstat (limited to 'api/src/glfs-handleops.c')
-rw-r--r--api/src/glfs-handleops.c93
1 files changed, 45 insertions, 48 deletions
diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c
index 706c00f98eb..631af01d97b 100644
--- a/api/src/glfs-handleops.c
+++ b/api/src/glfs-handleops.c
@@ -80,7 +80,7 @@ pub_glfs_h_lookupat (struct glfs *fs, struct glfs_object *parent,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
errno = EIO;
goto out;
@@ -96,7 +96,7 @@ pub_glfs_h_lookupat (struct glfs *fs, struct glfs_object *parent,
}
/* fop/op */
- ret = priv_glfs_resolve_at (fs, subvol, inode, path, &loc, &iatt,
+ ret = glfs_resolve_at (fs, subvol, inode, path, &loc, &iatt,
0 /*TODO: links? */, 0);
/* populate out args */
@@ -113,7 +113,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -139,7 +139,7 @@ pub_glfs_h_stat (struct glfs *fs, struct glfs_object *object, struct stat *stat)
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -170,7 +170,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -196,7 +196,7 @@ pub_glfs_h_getattrs (struct glfs *fs, struct glfs_object *object,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -222,7 +222,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -249,7 +249,7 @@ pub_glfs_h_getxattrs (struct glfs *fs, struct glfs_object *object,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -284,7 +284,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -311,7 +311,7 @@ pub_glfs_h_setattrs (struct glfs *fs, struct glfs_object *object,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -340,7 +340,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -369,7 +369,7 @@ pub_glfs_h_setxattrs (struct glfs *fs, struct glfs_object *object,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -406,7 +406,7 @@ out:
if (xattr)
dict_unref (xattr);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -432,7 +432,7 @@ pub_glfs_h_removexattrs (struct glfs *fs, struct glfs_object *object,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -459,7 +459,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -485,7 +485,7 @@ pub_glfs_h_open (struct glfs *fs, struct glfs_object *object, int flags)
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
errno = EIO;
goto out;
@@ -548,7 +548,7 @@ out:
glfd = NULL;
}
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return glfd;
}
@@ -579,7 +579,7 @@ pub_glfs_h_creat (struct glfs *fs, struct glfs_object *parent, const char *path,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -671,7 +671,7 @@ out:
glfd = NULL;
}
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -701,7 +701,7 @@ pub_glfs_h_mkdir (struct glfs *fs, struct glfs_object *parent, const char *path,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -763,7 +763,7 @@ out:
if (xattr_req)
dict_unref (xattr_req);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -793,7 +793,7 @@ pub_glfs_h_mknod (struct glfs *fs, struct glfs_object *parent, const char *path,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -854,7 +854,7 @@ out:
if (xattr_req)
dict_unref (xattr_req);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -879,7 +879,7 @@ pub_glfs_h_unlink (struct glfs *fs, struct glfs_object *parent, const char *path
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if ( !subvol ) {
ret = -1;
errno = EIO;
@@ -893,7 +893,7 @@ pub_glfs_h_unlink (struct glfs *fs, struct glfs_object *parent, const char *path
goto out;
}
- ret = priv_glfs_resolve_at (fs, subvol, inode, path, &loc, NULL, 0 , 0);
+ ret = glfs_resolve_at (fs, subvol, inode, path, &loc, NULL, 0 , 0);
if (ret != 0) {
goto out;
}
@@ -921,7 +921,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -947,7 +947,7 @@ pub_glfs_h_opendir (struct glfs *fs, struct glfs_object *object)
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1000,7 +1000,7 @@ out:
glfs_fd_bind (glfd);
}
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return glfd;
}
@@ -1025,7 +1025,7 @@ pub_glfs_h_access (struct glfs *fs, struct glfs_object *object, int mask)
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1054,7 +1054,7 @@ out:
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -1116,7 +1116,7 @@ pub_glfs_h_create_from_handle (struct glfs *fs, unsigned char *handle, int len,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
errno = EIO;
goto out;
@@ -1175,7 +1175,7 @@ out:
/* TODO: Check where the inode ref is being held? */
loc_wipe (&loc);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -1213,7 +1213,7 @@ pub_glfs_h_truncate (struct glfs *fs, struct glfs_object *object, off_t offset)
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1243,7 +1243,7 @@ out:
if (inode)
inode_unref (inode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -1274,7 +1274,7 @@ pub_glfs_h_symlink (struct glfs *fs, struct glfs_object *parent,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1341,7 +1341,7 @@ out:
if (xattr_req)
dict_unref (xattr_req);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return object;
}
@@ -1368,7 +1368,7 @@ pub_glfs_h_readlink (struct glfs *fs, struct glfs_object *object, char *buf,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1401,7 +1401,7 @@ out:
if (linkval)
GF_FREE (linkval);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -1409,9 +1409,6 @@ out:
GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_readlink, 3.4.2);
-extern int
-priv_glfs_loc_touchup (loc_t *);
-
int
pub_glfs_h_link (struct glfs *fs, struct glfs_object *linksrc,
struct glfs_object *parent, const char *name)
@@ -1433,7 +1430,7 @@ pub_glfs_h_link (struct glfs *fs, struct glfs_object *linksrc,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if (!subvol) {
ret = -1;
errno = EIO;
@@ -1465,7 +1462,7 @@ pub_glfs_h_link (struct glfs *fs, struct glfs_object *linksrc,
/* setup newloc based on parent */
newloc.parent = inode_ref (pinode);
newloc.name = name;
- ret = priv_glfs_loc_touchup (&newloc);
+ ret = glfs_loc_touchup (&newloc);
if (ret != 0) {
errno = EINVAL;
goto out;
@@ -1493,7 +1490,7 @@ out:
if (pinode)
inode_unref (pinode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}
@@ -1525,7 +1522,7 @@ pub_glfs_h_rename (struct glfs *fs, struct glfs_object *olddir,
__glfs_entry_fs (fs);
/* get the active volume */
- subvol = priv_glfs_active_subvol (fs);
+ subvol = glfs_active_subvol (fs);
if ( !subvol ) {
ret = -1;
errno = EIO;
@@ -1539,7 +1536,7 @@ pub_glfs_h_rename (struct glfs *fs, struct glfs_object *olddir,
goto out;
}
- ret = priv_glfs_resolve_at (fs, subvol, oldpinode, oldname, &oldloc,
+ ret = glfs_resolve_at (fs, subvol, oldpinode, oldname, &oldloc,
&oldiatt, 0 , 0);
if (ret != 0) {
goto out;
@@ -1552,7 +1549,7 @@ pub_glfs_h_rename (struct glfs *fs, struct glfs_object *olddir,
goto out;
}
- ret = priv_glfs_resolve_at (fs, subvol, newpinode, newname, &newloc,
+ ret = glfs_resolve_at (fs, subvol, newpinode, newname, &newloc,
&newiatt, 0, 0);
if (ret && errno != ENOENT && newloc.parent)
@@ -1590,7 +1587,7 @@ out:
if (newpinode)
inode_unref (newpinode);
- priv_glfs_subvol_done (fs, subvol);
+ glfs_subvol_done (fs, subvol);
return ret;
}