Bug 1734423

Summary: interrupts leak memory
Product: [Red Hat Storage] Red Hat Gluster Storage Reporter: Csaba Henk <csaba>
Component: fuseAssignee: Csaba Henk <csaba>
Status: CLOSED ERRATA QA Contact: Nag Pavan Chilakam <nchilaka>
Severity: high Docs Contact:
Priority: unspecified    
Version: rhgs-3.5CC: bkunal, bugs, nchilaka, pdhange, rhs-bugs, sheggodu, storage-qa-internal, vdas
Target Milestone: ---Flags: csaba: needinfo-
Target Release: RHGS 3.5.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: glusterfs-6.0-11 Doc Type: Bug Fix
Doc Text:
Previously, dynamically allocated memory was not freed correctly, which led to an increase in memory consumption and out-of-memory management on gluster clients. Memory is now freed correctly so that memory overruns do not occur.
Story Points: ---
Clone Of: 1728047 Environment:
Last Closed: 2019-10-30 12:22:40 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1728047, 1744874, 1753571    
Bug Blocks: 1696809    

Description Csaba Henk 2019-07-30 14:00:51 UTC
+++ This bug was initially created as a clone of Bug #1728047 +++

Description of problem:

When the glusterfs fuse client gets an INTERRUPT message (ie. a process gets SIGINT while in a syscall to the filesystem), not all data allocated by the handler code is freed.

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

>= 6.0

The issue appears with the introduction of the interrupt handling framework.

How reproducible:

Always

Steps to Reproduce:
1. Compile the test helper of the tests/features/interrupt.t test, open_and_sleep.c:

  $ gcc -o open_and_sleep tests/features/open_and_sleep.c

2. Mount a glusterfs volume 
3. Run the command used in tests/features/interrupt.t in a loop against some file in the mount:

   $ while :; do ./open_and_sleep <SOME-FILE> | { sleep 0.1; xargs -n1 kill -INT; }
3. Take statedumps at regular intervals and check gf_fuse_mt_iov_base memusage:

   # grep -A5 gf_fuse_mt_iov_base <STATEDUMP>

Actual results:

Values of size and num_alloc fields monotonously grow with time across statedumps.

Expected results:

Values of size and num_alloc fields stay low across statedumps.

--- Additional comment from Csaba Henk on 2019-07-09 00:11:10 CEST ---

Command in reproduction step 3. is incomplete. It should be:

  $ while :; do ./open_and_sleep <SOME-FILE> | { sleep 0.1; xargs -n1 kill -INT; }; done

Improved version which also displays a counter:

  $ i=1; while :; do echo -en "\r$i  "; ./open_and_sleep <SOME-FILE> | { sleep 0.1; xargs -n1 kill -INT; }; i=$(($i+1)); done

--- Additional comment from Worker Ant on 2019-07-09 11:10:00 CEST ---

REVIEW: https://review.gluster.org/23016 (fuse: add missing GF_FREE to fuse_interrupt) posted (#1) for review on master by Csaba Henk

--- Additional comment from Worker Ant on 2019-07-25 18:46:43 CEST ---

REVIEW: https://review.gluster.org/23016 (fuse: add missing GF_FREE to fuse_interrupt) merged (#4) on master by Amar Tumballi

Comment 7 Prashant Dhange 2019-08-29 04:00:50 UTC
*** Bug 1737674 has been marked as a duplicate of this bug. ***

Comment 14 errata-xmlrpc 2019-10-30 12:22:40 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2019:3249