From 3ca5ae2f3bff2371042b607b8e8a218bf316b48c Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Fri, 19 May 2017 21:04:53 +0530 Subject: glusterfsd: process attach and detach request inside lock With brick multiplexing, there is a high possibility that attach and detach requests might be parallely processed and to avoid a concurrent update to the same graph list, a mutex lock is required. Credits : Rafi (rkavunga@redhat.com) for the RCA of this issue Change-Id: Ic8e6d1708655c8a143c5a3690968dfa572a32a9c BUG: 1454865 Signed-off-by: Atin Mukherjee Reviewed-on: https://review.gluster.org/17374 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy --- xlators/protocol/server/src/server-handshake.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'xlators/protocol/server/src/server-handshake.c') diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c index 64267f2aef9..f00804a3d3a 100644 --- a/xlators/protocol/server/src/server-handshake.c +++ b/xlators/protocol/server/src/server-handshake.c @@ -412,7 +412,7 @@ server_setvolume (rpcsvc_request_t *req) rpc_transport_t *xprt = NULL; int32_t fop_version = 0; int32_t mgmt_version = 0; - + glusterfs_ctx_t *ctx = NULL; params = dict_new (); reply = dict_new (); @@ -423,6 +423,7 @@ server_setvolume (rpcsvc_request_t *req) req->rpc_err = GARBAGE_ARGS; goto fail; } + ctx = THIS->ctx; this = req->svc->xl; /* this is to ensure config_params is populated with the first brick @@ -468,7 +469,11 @@ server_setvolume (rpcsvc_request_t *req) goto fail; } - xl = get_xlator_by_name (this, name); + LOCK (&ctx->volfile_lock); + { + xl = get_xlator_by_name (this, name); + } + UNLOCK (&ctx->volfile_lock); if (xl == NULL) { ret = gf_asprintf (&msg, "remote-subvolume \"%s\" is not found", name); -- cgit