Bug 1344421 - fd leak in disperse
Summary: fd leak in disperse
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: GlusterFS
Classification: Community
Component: disperse
Version: 3.8.0
Hardware: Unspecified
OS: Unspecified
unspecified
medium
Target Milestone: ---
Assignee: Xavi Hernandez
QA Contact:
URL:
Whiteboard:
Depends On: 1344396
Blocks: glusterfs-3.8.0
TreeView+ depends on / blocked
 
Reported: 2016-06-09 15:52 UTC by Xavi Hernandez
Modified: 2016-06-16 14:37 UTC (History)
4 users (show)

Fixed In Version: glusterfs-3.8.0
Doc Type: If docs needed, set a value
Doc Text:
Clone Of: 1344396
Environment:
Last Closed: 2016-06-16 12:34:04 UTC
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Embargoed:


Attachments (Terms of Use)

Description Xavi Hernandez 2016-06-09 15:52:15 UTC
+++ This bug was initially created as a clone of Bug #1344396 +++

Description of problem:

The disperse xlator uses __fd_unref() to release references to the fd. However this function doesn't make the cleanup of the fd resources if this was the last reference.

Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:
1.
2.
3.

Actual results:


Expected results:


Additional info:

--- Additional comment from Pranith Kumar K on 2016-06-09 17:21:24 CEST ---

Could you give a reference to the function you are referring to where this cleanup is not happening as we intend it to?

--- Additional comment from Xavier Hernandez on 2016-06-09 17:27:19 CEST ---

In function ec_lock_update_fd() we choose the newest fd to keep it in the lock structure. If there's already an fd assigned, we release it using __fd_unref(). We use this function because we are already inside a region protected bye inode->lock, so we cannot call fd_unref().

The problem is that this function doesn't do any cleanup. It only decrements the ref counter. All cleanup is made in fd_unref().

--- Additional comment from Vijay Bellur on 2016-06-09 17:35:30 CEST ---

REVIEW: http://review.gluster.org/14683 (cluster/ec: Fix invalid __fd_unref() call) posted (#1) for review on master by Xavier Hernandez (xhernandez)

Comment 1 Vijay Bellur 2016-06-09 16:05:02 UTC
REVIEW: http://review.gluster.org/14684 (cluster/ec: Fix invalid __fd_unref() call) posted (#1) for review on release-3.8 by Xavier Hernandez (xhernandez)

Comment 2 Vijay Bellur 2016-06-10 07:25:00 UTC
REVIEW: http://review.gluster.org/14684 (cluster/ec: Fix invalid __fd_unref() call) posted (#2) for review on release-3.8 by Xavier Hernandez (xhernandez)

Comment 3 Vijay Bellur 2016-06-13 10:16:22 UTC
COMMIT: http://review.gluster.org/14684 committed in release-3.8 by Niels de Vos (ndevos) 
------
commit 3f4755ca6dce8f7aa29b4a5b48682e04c3e7587b
Author: Xavier Hernandez <xhernandez>
Date:   Thu Jun 9 17:29:26 2016 +0200

    cluster/ec: Fix invalid __fd_unref() call
    
    __fd_unref() doesn't do any cleanup, so it cannot be called to release
    fd references, specially if it's the last reference.
    
    The code has been changed to avoid a call to this function.
    
    In the previous version we always tried to keep the newest fd in the
    ec_lock_t structure. However this is not necessary. We'll always keep
    one reference to an open file on the same inode. It's irrelevant if
    the reference is new or old.
    
    The function __fd_unref() has also been removed from fd.h to avoid being
    used in the future since it's useless as it's defined now.
    
    Backport of http://review.gluster.org/14683
    
    Change-Id: Ia728777fc8e464758d5ea4d3bf020f0603919039
    BUG: 1344421
    Signed-off-by: Xavier Hernandez <xhernandez>
    Reviewed-on: http://review.gluster.org/14684
    CentOS-regression: Gluster Build System <jenkins.com>
    Smoke: Gluster Build System <jenkins.com>
    NetBSD-regression: NetBSD Build System <jenkins.org>
    Reviewed-by: Ashish Pandey <aspandey>
    Reviewed-by: Niels de Vos <ndevos>

Comment 4 Niels de Vos 2016-06-16 12:34:04 UTC
This bug is getting closed because a release has been made available that should address the reported issue. In case the problem is still not fixed with glusterfs-3.8.0, please open a new bug report.

glusterfs-3.8.0 has been announced on the Gluster mailinglists [1], packages for several distributions should become available in the near future. Keep an eye on the Gluster Users mailinglist [2] and the update infrastructure for your distribution.

[1] http://blog.gluster.org/2016/06/glusterfs-3-8-released/
[2] http://thread.gmane.org/gmane.comp.file-systems.gluster.user


Note You need to log in before you can comment on or make changes to this bug.