From b0bcb4b093984d9f0189061e27ddeefa4b0afe6c Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Tue, 18 Dec 2018 22:07:55 +0530 Subject: 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 (cherry picked from commit 8fe3c6107a2b431d7cc0b8cfaeeb7941cf9590f9) --- api/src/glfs-mgmt.c | 6 ++++++ 1 file changed, 6 insertions(+) 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"); -- cgit