diff options
| author | Soumya Koduri <skoduri@redhat.com> | 2018-12-18 22:07:55 +0530 | 
|---|---|---|
| committer | Soumya Koduri <skoduri@redhat.com> | 2019-01-03 15:08:16 +0530 | 
| commit | b0bcb4b093984d9f0189061e27ddeefa4b0afe6c (patch) | |
| tree | 67eab0435a03cbd0d5e21b1df4c144c5cc6799c8 /api | |
| parent | 321f5a2b021be77463e045de84975902912a8c1a (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)
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 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");  | 
