diff options
author | Soumya Koduri <skoduri@redhat.com> | 2018-12-18 22:07:55 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2019-01-09 15:16:24 +0000 |
commit | e1257564b85901a31a05afa0316ebc0c52d00cff (patch) | |
tree | 05fc67b70a2bc9d4177abde25118b37689a4429e /api | |
parent | cee5f93ac00f628539f0367bc4958d59b98af011 (diff) |
gfapi: Access fs->oldvolfile under mutex lock
In some cases (for eg., when there are multiple
RPC_CLNT_CONNECT notifications), multiple threads may fetch
volfile and try to update it in 'fs' object simultaneously.
Hence protect those variables' access under fs->mutex lock.
This is backport of below two mainline patches -
- https://review.gluster.org/#/c/glusterfs/+/21882/
- https://review.gluster.org/#/c/glusterfs/+/21927/
Change-Id: Idaee9548560db32d83f4c04ebb1f375fee7864a9
fixes: bz#1663131
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
(cherry picked from commit 8fe3c6107a2b431d7cc0b8cfaeeb7941cf9590f9)
Diffstat (limited to 'api')
-rw-r--r-- | api/src/glfs-mgmt.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c index 87b62173689..c283b2e0c82 100644 --- a/api/src/glfs-mgmt.c +++ b/api/src/glfs-mgmt.c @@ -653,12 +653,15 @@ volfile: ret = 0; size = rsp.op_ret; + pthread_mutex_lock(&fs->mutex); if ((size == fs->oldvollen) && (memcmp(fs->oldvolfile, rsp.spec, size) == 0)) { + pthread_mutex_unlock(&fs->mutex); gf_msg(frame->this->name, GF_LOG_INFO, 0, API_MSG_VOLFILE_INFO, "No change in volfile, continuing"); goto out; } + pthread_mutex_unlock(&fs->mutex); /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmp_fd = mkstemp(template); @@ -699,7 +702,10 @@ volfile: * occurred during the operation */ + pthread_mutex_lock(&fs->mutex); ret = gf_volfile_reconfigure(fs->oldvollen, tmpfp, fs->ctx, fs->oldvolfile); + pthread_mutex_unlock(&fs->mutex); + if (ret == 0) { gf_msg_debug("glusterfsd-mgmt", 0, "No need to re-load " |