diff options
| author | Atin Mukherjee <amukherj@redhat.com> | 2017-05-19 21:04:53 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-05-26 12:11:28 +0000 | 
| commit | 3ca5ae2f3bff2371042b607b8e8a218bf316b48c (patch) | |
| tree | 99671a396708a555c86d16c7bc70d41dd491e603 /xlators | |
| parent | 23930326e0378edace9c8c41e8ae95931a2f68ba (diff) | |
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 <amukherj@redhat.com>
Reviewed-on: https://review.gluster.org/17374
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/protocol/server/src/server-handshake.c | 9 | 
1 files changed, 7 insertions, 2 deletions
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);  | 
