diff options
author | Soumya Koduri <skoduri@redhat.com> | 2016-09-26 14:54:27 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2016-09-30 05:44:56 -0700 |
commit | 7a50690e8939d1f806556ece1bad9fc2a81c3b80 (patch) | |
tree | d3ac0fa9bb2759e639c281ab67503b5afd197e9e /api | |
parent | 9e4135c46455da7fe67c5ef61e098428cd238e95 (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: I0919abbddb618d08aaf77b2ce1173eec18b382f1
BUG: 1379708
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: http://review.gluster.org/15585
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: Niels de Vos <ndevos@redhat.com>
Diffstat (limited to 'api')
-rw-r--r-- | api/src/glfs-fops.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c index 9c31502d725..bbbf61dddfc 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); |