diff options
| -rw-r--r-- | api/src/glfs-internal.h | 1 | ||||
| -rw-r--r-- | api/src/glfs-mgmt.c | 2 | ||||
| -rw-r--r-- | cli/src/cli-quotad-client.c | 2 | ||||
| -rw-r--r-- | cli/src/cli.c | 2 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 2 | ||||
| -rw-r--r-- | libglusterfs/src/globals.h | 1 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 19 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.h | 4 | ||||
| -rw-r--r-- | xlators/features/changelog/src/changelog-rpc-common.c | 2 | ||||
| -rw-r--r-- | xlators/features/quota/src/quota-enforcer-client.c | 2 | ||||
| -rw-r--r-- | xlators/features/snapview-server/src/snapview-server-mgmt.c | 2 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c | 2 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 2 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nlm4.c | 2 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.c | 2 | 
15 files changed, 33 insertions, 14 deletions
diff --git a/api/src/glfs-internal.h b/api/src/glfs-internal.h index ff8ace9cbb8..7e26a48eea5 100644 --- a/api/src/glfs-internal.h +++ b/api/src/glfs-internal.h @@ -249,7 +249,6 @@ int glfs_first_lookup (xlator_t *subvol);  void glfs_process_upcall_event (struct glfs *fs, void *data)          GFAPI_PRIVATE(glfs_process_upcall_event, 3.7.0); -#define DECLARE_OLD_THIS xlator_t *old_THIS = NULL  #define __GLFS_ENTRY_VALIDATE_FS(fs, label)                         \  do {                                                                \ diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c index d69c3fc1883..48fd618ff68 100644 --- a/api/src/glfs-mgmt.c +++ b/api/src/glfs-mgmt.c @@ -863,7 +863,7 @@ glfs_mgmt_init (struct glfs *fs)  	if (ret)  		goto out; -	rpc = rpc_clnt_new (options, ctx, THIS->name, 8); +	rpc = rpc_clnt_new (options, THIS, THIS->name, 8);  	if (!rpc) {  		ret = -1;  		gf_msg (THIS->name, GF_LOG_WARNING, 0, diff --git a/cli/src/cli-quotad-client.c b/cli/src/cli-quotad-client.c index d00dfac6e60..5be9c80c858 100644 --- a/cli/src/cli-quotad-client.c +++ b/cli/src/cli-quotad-client.c @@ -126,7 +126,7 @@ cli_quotad_clnt_init (xlator_t *this, dict_t *options)          if (ret)                  goto out; -        rpc = rpc_clnt_new (options, this->ctx, this->name, 16); +        rpc = rpc_clnt_new (options, this, this->name, 16);          if (!rpc)                  goto out; diff --git a/cli/src/cli.c b/cli/src/cli.c index 53c9c3b297b..cc2862c5318 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -626,7 +626,7 @@ cli_rpc_init (struct cli_state *state)                          goto out;          } -        rpc = rpc_clnt_new (options, this->ctx, this->name, 16); +        rpc = rpc_clnt_new (options, this, this->name, 16);          if (!rpc)                  goto out; diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 4a84ae56a44..459d79fea0e 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -2033,7 +2033,7 @@ glusterfs_mgmt_init (glusterfs_ctx_t *ctx)          if (ret)                  goto out; -        rpc = rpc_clnt_new (options, THIS->ctx, THIS->name, 8); +        rpc = rpc_clnt_new (options, THIS, THIS->name, 8);          if (!rpc) {                  ret = -1;                  gf_log (THIS->name, GF_LOG_WARNING, "failed to create rpc clnt"); diff --git a/libglusterfs/src/globals.h b/libglusterfs/src/globals.h index 3f91363a7c9..46c9ca27f6c 100644 --- a/libglusterfs/src/globals.h +++ b/libglusterfs/src/globals.h @@ -61,6 +61,7 @@  /* THIS */  #define THIS (*__glusterfs_this_location()) +#define DECLARE_OLD_THIS        xlator_t *old_THIS = THIS  xlator_t **__glusterfs_this_location ();  xlator_t *glusterfs_this_get (); diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index 7bc9010f0b9..11d6cedfe07 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -810,6 +810,16 @@ out:  static void  rpc_clnt_destroy (struct rpc_clnt *rpc); +#define RPC_THIS_SAVE(xl) do {                                  \ +        old_THIS = THIS ;                                       \ +        if (!old_THIS)                                          \ +                gf_log_callingfn ("rpc", GF_LOG_CRITICAL,       \ +                                  "THIS is not initialised.");  \ +        THIS = xl;                                              \ +} while (0) + +#define RPC_THIS_RESTORE        (THIS = old_THIS) +  int  rpc_clnt_notify (rpc_transport_t *trans, void *mydata,                   rpc_transport_event_t event, void *data, ...) @@ -821,6 +831,7 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,          rpc_transport_pollin_t *pollin      = NULL;          struct timespec         ts          = {0, };          void                   *clnt_mydata = NULL; +        DECLARE_OLD_THIS;          conn = mydata;          if (conn == NULL) { @@ -830,6 +841,8 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,          if (!clnt)                  goto out; +        RPC_THIS_SAVE (clnt->owner); +          switch (event) {          case RPC_TRANSPORT_DISCONNECT:          { @@ -930,6 +943,7 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,          }  out: +        RPC_THIS_RESTORE;          return ret;  } @@ -1034,11 +1048,13 @@ out:  }  struct rpc_clnt * -rpc_clnt_new (dict_t *options, glusterfs_ctx_t *ctx, char *name, +rpc_clnt_new (dict_t *options, xlator_t *owner, char *name,                uint32_t reqpool_size)  {          int                    ret  = -1;          struct rpc_clnt       *rpc  = NULL; +        glusterfs_ctx_t       *ctx  = owner->ctx; +          rpc = GF_CALLOC (1, sizeof (*rpc), gf_common_mt_rpcclnt_t);          if (!rpc) { @@ -1047,6 +1063,7 @@ rpc_clnt_new (dict_t *options, glusterfs_ctx_t *ctx, char *name,          pthread_mutex_init (&rpc->lock, NULL);          rpc->ctx = ctx; +        rpc->owner = owner;          if (!reqpool_size)                  reqpool_size = RPC_CLNT_DEFAULT_REQUEST_COUNT; diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h index ee46a9a9263..6a4bb40793f 100644 --- a/rpc/rpc-lib/src/rpc-clnt.h +++ b/rpc/rpc-lib/src/rpc-clnt.h @@ -188,9 +188,11 @@ typedef struct rpc_clnt {          int                   refcount;          int                   auth_null;          char                  disabled; +        xlator_t             *owner;  } rpc_clnt_t; -struct rpc_clnt *rpc_clnt_new (dict_t *options, glusterfs_ctx_t *ctx, + +struct rpc_clnt *rpc_clnt_new (dict_t *options, xlator_t *owner,                                 char *name, uint32_t reqpool_size);  int rpc_clnt_start (struct rpc_clnt *rpc); diff --git a/xlators/features/changelog/src/changelog-rpc-common.c b/xlators/features/changelog/src/changelog-rpc-common.c index 7d2ec1de988..e8905a87f62 100644 --- a/xlators/features/changelog/src/changelog-rpc-common.c +++ b/xlators/features/changelog/src/changelog-rpc-common.c @@ -53,7 +53,7 @@ changelog_rpc_client_init (xlator_t *this, void *cbkdata,                  goto dealloc_dict;          } -        rpc = rpc_clnt_new (options, this->ctx, this->name, 16); +        rpc = rpc_clnt_new (options, this, this->name, 16);          if (!rpc)                  goto dealloc_dict; diff --git a/xlators/features/quota/src/quota-enforcer-client.c b/xlators/features/quota/src/quota-enforcer-client.c index 09df3534a75..6f36c081dbc 100644 --- a/xlators/features/quota/src/quota-enforcer-client.c +++ b/xlators/features/quota/src/quota-enforcer-client.c @@ -448,7 +448,7 @@ quota_enforcer_init (xlator_t *this, dict_t *options)          if (ret)                  goto out; -        rpc = rpc_clnt_new (options, this->ctx, this->name, 16); +        rpc = rpc_clnt_new (options, this, this->name, 16);          if (!rpc) {                  ret = -1;                  goto out; diff --git a/xlators/features/snapview-server/src/snapview-server-mgmt.c b/xlators/features/snapview-server/src/snapview-server-mgmt.c index 53dd6ff44af..fc2ff2ab10d 100644 --- a/xlators/features/snapview-server/src/snapview-server-mgmt.c +++ b/xlators/features/snapview-server/src/snapview-server-mgmt.c @@ -80,7 +80,7 @@ svs_mgmt_init (xlator_t *this)                  goto out;          } -        priv->rpc = rpc_clnt_new (options, this->ctx, this->name, 8); +        priv->rpc = rpc_clnt_new (options, this, this->name, 8);          if (!priv->rpc) {                  gf_log (this->name, GF_LOG_ERROR, "failed to initialize RPC");                  goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c index fca9323a180..607a0655432 100644 --- a/xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c +++ b/xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c @@ -46,7 +46,7 @@ glusterd_conn_init (glusterd_conn_t *conn, char *sockpath,                  goto out;          /* @options is free'd by rpc_transport when destroyed */ -        rpc = rpc_clnt_new (options, this->ctx, (char *)svc->name, 16); +        rpc = rpc_clnt_new (options, this, (char *)svc->name, 16);          if (!rpc) {                  ret = -1;                  goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 7ead1f5ab70..085a63b4592 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -3291,7 +3291,7 @@ glusterd_rpc_create (struct rpc_clnt **rpc,          GF_ASSERT (options);          /* TODO: is 32 enough? or more ? */ -        new_rpc = rpc_clnt_new (options, this->ctx, this->name, 16); +        new_rpc = rpc_clnt_new (options, this, this->name, 16);          if (!new_rpc)                  goto out; diff --git a/xlators/nfs/server/src/nlm4.c b/xlators/nfs/server/src/nlm4.c index 7343fea8cd6..26c45e089b0 100644 --- a/xlators/nfs/server/src/nlm4.c +++ b/xlators/nfs/server/src/nlm4.c @@ -1050,7 +1050,7 @@ nlm4_establish_callback (void *csarg)          }          /* TODO: is 32 frames in transit enough ? */ -        rpc_clnt = rpc_clnt_new (options, cs->nfsx->ctx, "NLM-client", 32); +        rpc_clnt = rpc_clnt_new (options, cs->nfsx, "NLM-client", 32);          if (rpc_clnt == NULL) {                  gf_msg (GF_NLM, GF_LOG_ERROR, EINVAL, NFS_MSG_INVALID_ENTRY,                          "rpc_clnt NULL"); diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index fcf6e375af8..b8f467622d5 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -2281,7 +2281,7 @@ client_init_rpc (xlator_t *this)                  goto out;          } -        conf->rpc = rpc_clnt_new (this->options, this->ctx, this->name, 0); +        conf->rpc = rpc_clnt_new (this->options, this, this->name, 0);          if (!conf->rpc) {                  gf_msg (this->name, GF_LOG_ERROR, 0, PC_MSG_RPC_INIT_FAILED,                          "failed to initialize RPC");  | 
