summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2018-12-18 22:07:55 +0530
committerSoumya Koduri <skoduri@redhat.com>2019-01-03 15:08:16 +0530
commitb0bcb4b093984d9f0189061e27ddeefa4b0afe6c (patch)
tree67eab0435a03cbd0d5e21b1df4c144c5cc6799c8
parent321f5a2b021be77463e045de84975902912a8c1a (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#1663132 Signed-off-by: Soumya Koduri <skoduri@redhat.com> (cherry picked from commit 8fe3c6107a2b431d7cc0b8cfaeeb7941cf9590f9)
-rw-r--r--api/src/glfs-mgmt.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c
index 229caa98777..f1018ff28f7 100644
--- a/api/src/glfs-mgmt.c
+++ b/api/src/glfs-mgmt.c
@@ -660,13 +660,16 @@ 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);
tmpfp = tmpfile ();
if (!tmpfp) {
@@ -689,8 +692,11 @@ volfile:
* return -1(or -ve) =======> Some Internal Error 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 "
"volfile, reconfigure done");