summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2016-09-26 14:54:27 +0530
committerRaghavendra Talur <rtalur@redhat.com>2016-11-09 22:44:03 -0800
commit6b037e3782ebafe3b08656c578b5fa245f68395f (patch)
treec1a8acea257e04ec5f8d30c93380cb55ea19e0d1 /api
parentd20a4a82d4832274b68015e74233430a49901baf (diff)
gfapi: Fix few fd ref leaks
From the code inspection, have observed that there are fd ref leaks for few fd-based gfapi fops. 'glfs_resolve_fd' returns a fd (either existing or migrated) with an extra ref taken. This needs to be unref'ed at the end of the operation. Mainline reference: > Change-Id: Id63394e3e7deafb0c8b06444f2ae847248b126db > BUG: 1379285 > Signed-off-by: Soumya Koduri <skoduri@redhat.com> > Reviewed-on: http://review.gluster.org/15573 > Reviewed-by: Niels de Vos <ndevos@redhat.com> (cherry picked from commit d27cffab670858d7812bbb458a0833303d009b3b) Change-Id: I17dd9e31eca7ffa1f60a9e3a66b1c7051ce9002f BUG: 1379707 Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/15584 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com> Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
Diffstat (limited to 'api')
-rw-r--r--api/src/glfs-fops.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c
index d0bc9b6effa..0a59a8dcf1c 100644
--- a/api/src/glfs-fops.c
+++ b/api/src/glfs-fops.c
@@ -601,6 +601,9 @@ glfs_seek (struct glfs_fd *glfd, off_t offset, int whence)
glfd->offset = off;
done:
+ if (fd)
+ fd_unref (fd);
+
glfs_subvol_done (glfd->fs, subvol);
out:
@@ -931,6 +934,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 (glfd)
GF_REF_PUT (glfd);
@@ -1246,6 +1252,9 @@ pub_glfs_pwritev_async (struct glfs_fd *glfd, const struct iovec *iovec,
ret = 0;
out:
+ if (fd)
+ fd_unref (fd);
+
if (ret) {
if (glfd)
GF_REF_PUT (glfd);
@@ -1430,6 +1439,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 (glfd)
GF_REF_PUT (glfd);
@@ -1681,6 +1693,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 (glfd)
GF_REF_PUT (glfd);
@@ -2537,6 +2552,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 (glfd)
GF_REF_PUT (glfd);
@@ -2622,6 +2640,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 (glfd)
GF_REF_PUT (glfd);