From d6029f801bccdd4579698c78c849abce9ede9916 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Tue, 1 Nov 2016 20:32:17 +0530 Subject: gfapi/upcall: Fix mismatch in few upcall API SYMVER There is mismatch in few of the upcall API routine definitions and their corresponding symbol version declarations. Fixed the same. > Change-Id: I2edfd9546a4c6a9128757f3b68e3ae4edd2c7a79 > BUG: 1344714 > Signed-off-by: Soumya Koduri > Reviewed-on: http://review.gluster.org/15760 > Smoke: Gluster Build System > Reviewed-by: jiffin tony Thottan > Reviewed-by: Kaleb KEITHLEY > Tested-by: Kaleb KEITHLEY > NetBSD-regression: NetBSD Build System > CentOS-regression: Gluster Build System > (cherry picked from commit 5b453380b15f34c0841f453a02fdabc46ad2f7ef) Change-Id: Ifa57114dbe788ad71f57faccd45c1f55e86ee6ad BUG: 1391851 Signed-off-by: Soumya Koduri Reviewed-on: http://review.gluster.org/15776 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Kaleb KEITHLEY CentOS-regression: Gluster Build System --- api/src/glfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'api') diff --git a/api/src/glfs.c b/api/src/glfs.c index 096e6aec2cf..9a92fa97c3d 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -1370,18 +1370,18 @@ pub_glfs_upcall_inode_get_pstat (struct glfs_upcall_inode *arg) { return &arg->p_buf; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_pstat, 3.7.16); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_pstat, 3.7.16); struct glfs_object* pub_glfs_upcall_inode_get_oldpobject (struct glfs_upcall_inode *arg) { return arg->oldp_object; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_oldpobject, 3.7.16); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_oldpobject, 3.7.16); struct stat* pub_glfs_upcall_inode_get_oldpstat (struct glfs_upcall_inode *arg) { return &arg->oldp_buf; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_oldpstat, 3.7.16); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_oldpstat, 3.7.16); -- cgit From f593a4d7d1cd972e2fa65d1dac471d0bebee7235 Mon Sep 17 00:00:00 2001 From: Raghavendra Talur Date: Wed, 2 Nov 2016 19:51:26 +0530 Subject: gfapi: async fops should unref in callbacks If fd is unref'd at the end of async call then the unref in cbks would lead to double unref and possible crash. Removing duplicate unrefs. Added unref only in failure cases. This backport to 3.7 branch does not have tests because gfapi tests are not configured properly on 3.7 branch. Details: All glfd based calls in libgfapi, except for glfs_open and glfs_close, behave in the same way. At the start of the operation, they take a ref on glfd and fd. At the end of the operation, they unref it. Async calls are a little different as they unref in the cbk function. A successfull open call does not unref either the glfd or fd, thereby functioning as a reference for a OPEN file object. glfs_close makes a syncop_flush call sandwiched between a fd ref and unref(this can be removed, more on this below), followed by a call to glfs_mark_glfd_for_deletion which unrefs glfd and also calls glfs_fd_destroy as a release function thereby doing a unref on fd too. Functionally, there is no problem with how everything works when as described above. However, it is a little non-intuitive that we need to perform a fd_unref as a consequence of a implicit fd_ref that happens within glfs_resolve_fd. As we perform a GF_REF_GET(glfd) at the start of every operation, it would be worthwhile to remove the fd_ref that glfs_resovle_fd takes and do away with explicit fd_unref()s at the end of every operation. This is the same reason why we don't need the fd_ref in glfs_close. This is however not in the scope of this patch. Change-Id: I86b1d3b2ad846b16ea527d541dc82b5e90b0ba85 BUG: 1392289 Signed-off-by: Raghavendra Talur Reviewed-on: http://review.gluster.org/15768 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Rajesh Joseph Reviewed-by: Xavier Hernandez Reviewed-by: soumya k Reviewed-by: Prasanna Kumar Kalever CentOS-regression: Gluster Build System Reviewed-by: Shyamsundar Ranganathan (cherry picked from commit e65738818dd22462ec00dda021566654d1c702b1) Reviewed-on: http://review.gluster.org/15780 --- api/src/glfs-fops.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'api') diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c index be1077a2760..ec2fbb2c264 100644 --- a/api/src/glfs-fops.c +++ b/api/src/glfs-fops.c @@ -869,10 +869,9 @@ pub_glfs_preadv_async (struct glfs_fd *glfd, const struct iovec *iovec, offset, flags, NULL); out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); if (gio) { @@ -1187,10 +1186,9 @@ pub_glfs_pwritev_async (struct glfs_fd *glfd, const struct iovec *iovec, ret = 0; out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); GF_FREE (gio); @@ -1374,10 +1372,9 @@ glfs_fsync_async_common (struct glfs_fd *glfd, glfs_io_cbk fn, void *data, subvol->fops->fsync, fd, dataonly, NULL); out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); GF_FREE (gio); @@ -1628,10 +1625,9 @@ pub_glfs_ftruncate_async (struct glfs_fd *glfd, off_t offset, glfs_io_cbk fn, ret = 0; out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); GF_FREE (gio); @@ -2487,10 +2483,9 @@ pub_glfs_discard_async (struct glfs_fd *glfd, off_t offset, size_t len, ret = 0; out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); GF_FREE (gio); @@ -2575,10 +2570,9 @@ pub_glfs_zerofill_async (struct glfs_fd *glfd, off_t offset, off_t len, subvol->fops->zerofill, fd, offset, len, NULL); ret = 0; out: - if (fd) - fd_unref (fd); - if (ret) { + if (fd) + fd_unref (fd); if (glfd) GF_REF_PUT (glfd); GF_FREE (gio); -- cgit