diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-mgmt.c | 56 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-syncop.c | 70 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-syncop.h | 10 | 
3 files changed, 94 insertions, 42 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-mgmt.c index a3eaf2ebdcd..954ff039085 100644 --- a/xlators/mgmt/glusterd/src/glusterd-mgmt.c +++ b/xlators/mgmt/glusterd/src/glusterd-mgmt.c @@ -341,6 +341,8 @@ gd_mgmt_v3_lock_cbk_fn (struct rpc_req *req, struct iovec *iov,  out:          gd_mgmt_v3_collate_errors (args, op_ret, op_errno, NULL,                                     GLUSTERD_MGMT_V3_LOCK, *peerid, rsp.uuid); +        GF_FREE (peerid); +          if (rsp.dict.dict_val)                  free (rsp.dict.dict_val);          STACK_DESTROY (frame->root); @@ -366,7 +368,7 @@ gd_mgmt_v3_lock (glusterd_op_t op, dict_t *op_ctx,          glusterd_conf_t         *conf = THIS->private;          int32_t                  ret  = -1;          xlator_t                *this = NULL; -        uuid_t                  peerid = {0,}; +        uuid_t                  *peerid = NULL;          this = THIS;          GF_ASSERT (this); @@ -383,9 +385,11 @@ gd_mgmt_v3_lock (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.uuid, my_uuid);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_LOCK,                                          gd_mgmt_v3_lock_cbk, @@ -620,6 +624,7 @@ out:          if (rsp.op_errstr)                  free (rsp.op_errstr); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -644,7 +649,7 @@ gd_mgmt_v3_pre_validate_req (glusterd_op_t op, dict_t *op_ctx,          gd1_mgmt_v3_pre_val_req  req   = {{0},};          glusterd_conf_t         *conf  = THIS->private;          xlator_t                *this  = NULL; -        uuid_t                  peerid = {0,}; +        uuid_t                  *peerid = NULL;          this = THIS;          GF_ASSERT (this); @@ -661,9 +666,11 @@ gd_mgmt_v3_pre_validate_req (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.uuid, my_uuid);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_PRE_VALIDATE,                                          gd_mgmt_v3_pre_validate_cbk, @@ -879,6 +886,7 @@ out:          if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -903,7 +911,7 @@ gd_mgmt_v3_brick_op_req (glusterd_op_t op, dict_t *op_ctx,          gd1_mgmt_v3_brick_op_req  req  = {{0},};          glusterd_conf_t          *conf = THIS->private;          xlator_t                 *this = NULL; -        uuid_t                    peerid = {0,}; +        uuid_t                   *peerid = {0,};          this = THIS;          GF_ASSERT (this); @@ -920,9 +928,11 @@ gd_mgmt_v3_brick_op_req (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.uuid, my_uuid);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_BRICK_OP,                                          gd_mgmt_v3_brick_op_cbk, @@ -1122,7 +1132,7 @@ out:          gd_mgmt_v3_collate_errors (args, op_ret, op_errno, rsp.op_errstr,                                    GLUSTERD_MGMT_V3_COMMIT, *peerid, rsp.uuid); - +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -1147,7 +1157,7 @@ gd_mgmt_v3_commit_req (glusterd_op_t op, dict_t *op_ctx,          gd1_mgmt_v3_commit_req   req  = {{0},};          glusterd_conf_t         *conf = THIS->private;          xlator_t                *this = NULL; -        uuid_t                  peerid = {0,}; +        uuid_t                  *peerid = NULL;          this = THIS;          GF_ASSERT (this); @@ -1164,9 +1174,11 @@ gd_mgmt_v3_commit_req (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.uuid, my_uuid);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_COMMIT,                                          gd_mgmt_v3_commit_cbk, @@ -1345,6 +1357,7 @@ out:          if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -1369,7 +1382,7 @@ gd_mgmt_v3_post_validate_req (glusterd_op_t op, int32_t op_ret, dict_t *op_ctx,          gd1_mgmt_v3_post_val_req  req  = {{0},};          glusterd_conf_t          *conf = THIS->private;          xlator_t                 *this = NULL; -        uuid_t                   peerid = {0,}; +        uuid_t                   *peerid = NULL;          this = THIS;          GF_ASSERT (this); @@ -1387,9 +1400,11 @@ gd_mgmt_v3_post_validate_req (glusterd_op_t op, int32_t op_ret, dict_t *op_ctx,          req.op = op;          req.op_ret = op_ret; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_POST_VALIDATE,                                          gd_mgmt_v3_post_validate_cbk, @@ -1558,6 +1573,7 @@ out:                                    GLUSTERD_MGMT_V3_UNLOCK, *peerid, rsp.uuid);          if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -1582,7 +1598,7 @@ gd_mgmt_v3_unlock (glusterd_op_t op, dict_t *op_ctx,          gd1_mgmt_v3_unlock_req   req  = {{0},};          glusterd_conf_t         *conf = THIS->private;          xlator_t                *this = NULL; -        uuid_t                  peerid = {0,}; +        uuid_t                  *peerid = NULL;          this = THIS;          GF_ASSERT (this); @@ -1599,9 +1615,11 @@ gd_mgmt_v3_unlock (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.uuid, my_uuid);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_UNLOCK,                                          gd_mgmt_v3_unlock_cbk, diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.c b/xlators/mgmt/glusterd/src/glusterd-syncop.c index 2ac947fd710..d7d75bbc1f1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-syncop.c +++ b/xlators/mgmt/glusterd/src/glusterd-syncop.c @@ -322,7 +322,7 @@ out:  int32_t  gd_syncop_mgmt_v3_lock_cbk_fn (struct rpc_req *req, struct iovec *iov, -                                 int count, void *myframe) +                               int count, void *myframe)  {          int                         ret           = -1;          struct syncargs            *args          = NULL; @@ -366,6 +366,8 @@ out:          gd_mgmt_v3_collate_errors (args, op_ret, op_errno, NULL,                                     GLUSTERD_MGMT_V3_LOCK, *peerid, rsp.uuid); +        GF_FREE (peerid); +          STACK_DESTROY (frame->root);          synctask_barrier_wake(args);          return 0; @@ -388,7 +390,7 @@ gd_syncop_mgmt_v3_lock (glusterd_op_t op, dict_t *op_ctx,          int                      ret  = -1;          gd1_mgmt_v3_lock_req     req  = {{0},};          glusterd_conf_t         *conf = THIS->private; -        uuid_t                  peerid = {0,}; +        uuid_t                  *peerid = NULL;          GF_ASSERT(op_ctx);          GF_ASSERT(peerinfo); @@ -404,9 +406,11 @@ gd_syncop_mgmt_v3_lock (glusterd_op_t op, dict_t *op_ctx,          gf_uuid_copy (req.txn_id, txn_id);          req.op = op; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_LOCK,                                          gd_syncop_mgmt_v3_lock_cbk, @@ -463,6 +467,8 @@ out:          gd_mgmt_v3_collate_errors (args, op_ret, op_errno, NULL,                                     GLUSTERD_MGMT_V3_UNLOCK, *peerid, rsp.uuid); +        GF_FREE (peerid); +          STACK_DESTROY (frame->root);          synctask_barrier_wake(args);          return 0; @@ -484,7 +490,7 @@ gd_syncop_mgmt_v3_unlock (dict_t *op_ctx, glusterd_peerinfo_t *peerinfo,          int                          ret  = -1;          gd1_mgmt_v3_unlock_req       req  = {{0},};          glusterd_conf_t             *conf = THIS->private; -        uuid_t                      peerid = {0,}; +        uuid_t                      *peerid = NULL;          GF_ASSERT(op_ctx);          GF_ASSERT(peerinfo); @@ -499,9 +505,11 @@ gd_syncop_mgmt_v3_unlock (dict_t *op_ctx, glusterd_peerinfo_t *peerinfo,          gf_uuid_copy (req.uuid, my_uuid);          gf_uuid_copy (req.txn_id, txn_id); -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_v3_prog,                                          GLUSTERD_MGMT_V3_UNLOCK,                                          gd_syncop_mgmt_v3_unlock_cbk, @@ -569,6 +577,8 @@ out:          gd_collate_errors (args, op_ret, op_errno, NULL,                             GLUSTERD_MGMT_CLUSTER_LOCK, *peerid, rsp.uuid); +        GF_FREE (peerid); +          STACK_DESTROY (frame->root);          synctask_barrier_wake(args);          return 0; @@ -589,16 +599,19 @@ gd_syncop_mgmt_lock (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          int                       ret = -1;          gd1_mgmt_cluster_lock_req req  = {{0},};          glusterd_conf_t           *conf = THIS->private; -        uuid_t                    peerid = {0,}; +        uuid_t                    *peerid = NULL;          gf_uuid_copy (req.uuid, my_uuid); -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_prog,                                          GLUSTERD_MGMT_CLUSTER_LOCK,                                          gd_syncop_mgmt_lock_cbk,                                          (xdrproc_t) xdr_gd1_mgmt_cluster_lock_req); +out:          return ret;  } @@ -657,6 +670,8 @@ out:          gd_collate_errors (args, op_ret, op_errno, NULL,                             GLUSTERD_MGMT_CLUSTER_UNLOCK, *peerid, rsp.uuid); +        GF_FREE (peerid); +          STACK_DESTROY (frame->root);          synctask_barrier_wake(args);          return 0; @@ -678,16 +693,19 @@ gd_syncop_mgmt_unlock (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          int                         ret     = -1;          gd1_mgmt_cluster_unlock_req req     = {{0},};          glusterd_conf_t             *conf   = THIS->private; -        uuid_t                      peerid = {0,}; +        uuid_t                      *peerid = NULL;          gf_uuid_copy (req.uuid, my_uuid); -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, &req, args, peerid,                                          &gd_mgmt_prog,                                          GLUSTERD_MGMT_CLUSTER_UNLOCK,                                          gd_syncop_mgmt_unlock_cbk,                                          (xdrproc_t) xdr_gd1_mgmt_cluster_lock_req); +out:          return ret;  } @@ -779,6 +797,7 @@ out:          if (rsp_dict)                  dict_unref (rsp_dict); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -802,7 +821,7 @@ gd_syncop_mgmt_stage_op (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          gd1_mgmt_stage_op_req *req  = NULL;          glusterd_conf_t       *conf = THIS->private;          int                   ret   = -1; -        uuid_t                peerid = {0,}; +        uuid_t                *peerid = NULL;          req = GF_CALLOC (1, sizeof (*req), gf_gld_mt_mop_stage_req_t);          if (!req) @@ -816,9 +835,11 @@ gd_syncop_mgmt_stage_op (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          if (ret)                  goto out; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, req, args, peerid,                                          &gd_mgmt_prog, GLUSTERD_MGMT_STAGE_OP,                                          gd_syncop_stage_op_cbk,                                          (xdrproc_t) xdr_gd1_mgmt_stage_op_req); @@ -1058,6 +1079,7 @@ out:                             GLUSTERD_MGMT_COMMIT_OP, *peerid, rsp.uuid);          if (rsp_dict)                  dict_unref (rsp_dict); +        GF_FREE (peerid);          STACK_DESTROY (frame->root);          synctask_barrier_wake(args); @@ -1082,7 +1104,7 @@ gd_syncop_mgmt_commit_op (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          glusterd_conf_t        *conf = THIS->private;          gd1_mgmt_commit_op_req *req  = NULL;          int                    ret  = -1; -        uuid_t                 peerid = {0,}; +        uuid_t                 *peerid = NULL;          req = GF_CALLOC (1, sizeof (*req), gf_gld_mt_mop_commit_req_t);          if (!req) @@ -1096,9 +1118,11 @@ gd_syncop_mgmt_commit_op (glusterd_peerinfo_t *peerinfo, struct syncargs *args,          if (ret)                  goto out; -        gf_uuid_copy (peerid, peerinfo->uuid); +        GD_ALLOC_COPY_UUID (peerid, peerinfo->uuid, ret); +        if (ret) +                goto out; -        ret = gd_syncop_submit_request (peerinfo->rpc, req, args, &peerid, +        ret = gd_syncop_submit_request (peerinfo->rpc, req, args, peerid,                                          &gd_mgmt_prog, GLUSTERD_MGMT_COMMIT_OP,                                          gd_syncop_commit_op_cbk,                                          (xdrproc_t) xdr_gd1_mgmt_commit_op_req); @@ -1840,14 +1864,14 @@ local_locking_done:  out:          op_ret = ret;          if (txn_id) { -                if (volname) -                        (void) gd_unlock_op_phase (conf, op, &op_ret, req, op_ctx, -                                                   op_errstr, volname, is_acquired, -                                                   *txn_id, &txn_opinfo);                  if (global)                          (void) gd_unlock_op_phase (conf, op, &op_ret, req, op_ctx,                                                     op_errstr, global, is_acquired,                                                     *txn_id, &txn_opinfo); +                else +                        (void) gd_unlock_op_phase (conf, op, &op_ret, req, op_ctx, +                                                   op_errstr, volname, is_acquired, +                                                   *txn_id, &txn_opinfo);                  /* Clearing the transaction opinfo */ diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.h b/xlators/mgmt/glusterd/src/glusterd-syncop.h index 87a3c76f9fb..c8303a04d5e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-syncop.h +++ b/xlators/mgmt/glusterd/src/glusterd-syncop.h @@ -36,6 +36,16 @@                  synclock_lock (&conf->big_lock);                               \          } while (0) +#define GD_ALLOC_COPY_UUID(dst_ptr, uuid, ret) do {                            \ +        dst_ptr = GF_CALLOC (1, sizeof (*dst_ptr), gf_common_mt_uuid_t);       \ +        if (dst_ptr) {                                                         \ +                gf_uuid_copy (*dst_ptr, uuid);                                 \ +                ret = 0;                                                       \ +        } else {                                                               \ +                ret = -1;                                                      \ +        }                                                                      \ +} while (0) +  int gd_syncop_submit_request (struct rpc_clnt *rpc, void *req, void *local,                                void *cookie, rpc_clnt_prog_t *prog, int procnum,                                fop_cbk_fn_t cbkfn, xdrproc_t xdrproc);  | 
