diff options
Diffstat (limited to 'glusterfsd')
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 22 | 
1 files changed, 19 insertions, 3 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 459d79fea0e..d7e87728e74 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -33,6 +33,7 @@  #include "xlator.h"  static gf_boolean_t is_mgmt_rpc_reconnect = _gf_false; +int need_emancipate = 0;  int glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx);  int glusterfs_volfile_fetch (glusterfs_ctx_t *ctx); @@ -1571,6 +1572,7 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,          oldvollen = size;          memcpy (oldvolfile, rsp.spec, size);          if (!is_mgmt_rpc_reconnect) { +                need_emancipate = 1;                  glusterfs_mgmt_pmap_signin (ctx);                  is_mgmt_rpc_reconnect =  _gf_true;          } @@ -1580,9 +1582,6 @@ out:          free (rsp.spec); -        if (ctx) -                emancipate (ctx, ret); -          // Stop if server is running at an unsupported op-version          if (ENOTSUP == ret) {                  gf_log ("mgmt", GF_LOG_ERROR, "Server is operating at an " @@ -2070,12 +2069,15 @@ mgmt_pmap_signin2_cbk (struct rpc_req *req, struct iovec *iov, int count,                         void *myframe)  {          pmap_signin_rsp  rsp   = {0,}; +        glusterfs_ctx_t *ctx   = NULL;          call_frame_t    *frame = NULL;          int              ret   = 0; +        ctx = glusterfsd_ctx;          frame = myframe;          if (-1 == req->rpc_status) { +                ret = -1;                  rsp.op_ret   = -1;                  rsp.op_errno = EINVAL;                  goto out; @@ -2092,9 +2094,13 @@ mgmt_pmap_signin2_cbk (struct rpc_req *req, struct iovec *iov, int count,          if (-1 == rsp.op_ret) {                  gf_log (frame->this->name, GF_LOG_ERROR,                          "failed to register the port with glusterd"); +                ret = -1;                  goto out;          }  out: +        if (need_emancipate) +                emancipate (ctx, ret); +          STACK_DESTROY (frame->root);          return 0; @@ -2107,6 +2113,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          pmap_signin_rsp  rsp   = {0,};          call_frame_t    *frame = NULL;          int              ret   = 0; +        int              emancipate_ret  = -1;          pmap_signin_req  pmap_req = {0, };          cmd_args_t      *cmd_args = NULL;          glusterfs_ctx_t *ctx      = NULL; @@ -2115,6 +2122,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          frame = myframe;          if (-1 == req->rpc_status) { +                ret = -1;                  rsp.op_ret   = -1;                  rsp.op_errno = EINVAL;                  goto out; @@ -2131,6 +2139,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          if (-1 == rsp.op_ret) {                  gf_log (frame->this->name, GF_LOG_ERROR,                          "failed to register the port with glusterd"); +                ret = -1;                  goto out;          } @@ -2139,6 +2148,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          if (!cmd_args->brick_port2) {                  /* We are done with signin process */ +                emancipate_ret = 0;                  goto out;          } @@ -2155,6 +2165,8 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          return 0;  out: +        if (need_emancipate && (ret < 0 || !cmd_args->brick_port2)) +                emancipate (ctx, emancipate_ret);          STACK_DESTROY (frame->root);          return 0; @@ -2166,6 +2178,7 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx)          call_frame_t     *frame                 = NULL;          pmap_signin_req   req                   = {0, };          int               ret                   = -1; +        int               emancipate_ret        = -1;          cmd_args_t       *cmd_args              = NULL;          char              brick_name[PATH_MAX]  = {0,}; @@ -2175,6 +2188,7 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx)          if (!cmd_args->brick_port || !cmd_args->brick_name) {                  gf_log ("fsd-mgmt", GF_LOG_DEBUG,                          "portmapper signin arguments not given"); +                emancipate_ret = 0;                  goto out;          } @@ -2193,6 +2207,8 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx)                                     (xdrproc_t)xdr_pmap_signin_req);  out: +        if (need_emancipate && ret < 0) +                emancipate (ctx, emancipate_ret);          return ret;  }  | 
