summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/glusterfs/client_t.h
diff options
context:
space:
mode:
authorMohit Agrawal <moagrawal@redhat.com>2019-01-28 21:28:45 +0530
committerAmar Tumballi <amarts@redhat.com>2019-01-31 06:23:39 +0000
commitb41cdeb638f9f9ec2fef13ec95c216faf52a9df9 (patch)
tree65692a065793a0241f0c23375af45bc0b46858cb /libglusterfs/src/glusterfs/client_t.h
parent09db11b0c020bc79d493c6d7e7ea4f3beb000c68 (diff)
core: heketi-cli is throwing error "target is busy"
Problem: When rpc-transport-disconnect happens, server_connection_cleanup_flush_cbk() is supposed to call rpc_transport_unref() after open-files on that transport are flushed per transport.But open-fd-count is maintained in bound_xl->fd_count, which can be incremented/decremented cumulatively in server_connection_cleanup() by all transport disconnect paths. So instead of rpc_transport_unref() happening per transport, it ends up doing it only once after all the files on all the transports for the brick are flushed leading to rpc-leaks. Solution: To avoid races maintain fd_cnt at client instead of maintaining on brick Credits: Pranith Kumar Karampuri Change-Id: I6e8ea37a61f82d9aefb227c5b3ab57a7a36850e6 fixes: bz#1668190 Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
Diffstat (limited to 'libglusterfs/src/glusterfs/client_t.h')
-rw-r--r--libglusterfs/src/glusterfs/client_t.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/libglusterfs/src/glusterfs/client_t.h b/libglusterfs/src/glusterfs/client_t.h
index 29f50daf03b..8ef3665a9c2 100644
--- a/libglusterfs/src/glusterfs/client_t.h
+++ b/libglusterfs/src/glusterfs/client_t.h
@@ -47,6 +47,8 @@ typedef struct _client {
inode_t *subdir_inode;
uuid_t subdir_gfid;
int32_t opversion;
+ /* Variable to save fd_count for detach brick */
+ gf_atomic_t fd_cnt;
} client_t;
#define GF_CLIENTCTX_INITIAL_SIZE 8