summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpc/rpc-lib/src/rpc-clnt.c12
-rw-r--r--rpc/rpc-lib/src/rpc-transport.c29
-rw-r--r--rpc/rpc-lib/src/rpcsvc-auth.c8
-rw-r--r--rpc/rpc-lib/src/rpcsvc.c55
-rw-r--r--rpc/rpc-lib/src/rpcsvc.h4
5 files changed, 70 insertions, 38 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c
index 2fc3b38df2c..adb8e3d4a60 100644
--- a/rpc/rpc-lib/src/rpc-clnt.c
+++ b/rpc/rpc-lib/src/rpc-clnt.c
@@ -946,6 +946,11 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,
clnt->mydata = NULL;
ret = clnt->notifyfn (clnt, clnt_mydata,
RPC_CLNT_DESTROY, NULL);
+ if (ret < 0) {
+ gf_log (trans->name, GF_LOG_WARNING,
+ "client notify handler returned error "
+ "while handling RPC_CLNT_DESTROY");
+ }
}
rpc_clnt_destroy (clnt);
ret = 0;
@@ -1667,6 +1672,13 @@ rpc_clnt_submit (struct rpc_clnt *rpc, rpc_clnt_prog_t *prog,
if (conn->connected == 0 && !rpc->disabled) {
ret = rpc_transport_connect (conn->trans,
conn->config.remote_port);
+ if (ret < 0) {
+ gf_log (conn->name, GF_LOG_WARNING,
+ "error returned while attempting to "
+ "connect to host:%s, port:%d",
+ conn->config.remote_host,
+ conn->config.remote_port);
+ }
}
ret = rpc_transport_submit_request (conn->trans, &req);
diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c
index 4c3d5279fe1..40b5917f9b8 100644
--- a/rpc/rpc-lib/src/rpc-transport.c
+++ b/rpc/rpc-lib/src/rpc-transport.c
@@ -175,6 +175,7 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)
volume_opt_list_t *vol_opt = NULL;
gf_boolean_t bind_insecure = _gf_false;
xlator_t *this = NULL;
+ gf_boolean_t success = _gf_false;
GF_VALIDATE_OR_GOTO("rpc-transport", options, fail);
GF_VALIDATE_OR_GOTO("rpc-transport", ctx, fail);
@@ -357,26 +358,32 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)
GF_FREE (name);
- return return_trans;
+ success = _gf_true;
fail:
- if (trans) {
- GF_FREE (trans->name);
+ if (!success) {
+ if (trans) {
+ GF_FREE (trans->name);
- if (trans->dl_handle)
- dlclose (trans->dl_handle);
+ if (trans->dl_handle)
+ dlclose (trans->dl_handle);
- GF_FREE (trans);
- }
+ GF_FREE (trans);
+ }
- GF_FREE (name);
+ GF_FREE (name);
- if (vol_opt && !list_empty (&vol_opt->list)) {
- list_del_init (&vol_opt->list);
+ return_trans = NULL;
+ }
+
+ if (vol_opt) {
+ if (!list_empty (&vol_opt->list)) {
+ list_del_init (&vol_opt->list);
+ }
GF_FREE (vol_opt);
}
- return NULL;
+ return return_trans;
}
diff --git a/rpc/rpc-lib/src/rpcsvc-auth.c b/rpc/rpc-lib/src/rpcsvc-auth.c
index b7d6c2216ef..bfff0bc557f 100644
--- a/rpc/rpc-lib/src/rpcsvc-auth.c
+++ b/rpc/rpc-lib/src/rpcsvc-auth.c
@@ -482,15 +482,13 @@ rpcsvc_auth_array (rpcsvc_t *svc, char *volname, int *autharr, int arrlen)
switch (ret) {
case _gf_true:
- result = RPCSVC_AUTH_ACCEPT;
autharr[count] = auth->auth->authnum;
++count;
break;
- case _gf_false:
- result = RPCSVC_AUTH_REJECT;
- break;
+
default:
- result = RPCSVC_AUTH_DONTCARE;
+ /* nothing to do */
+ break;
}
}
diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c
index ffc6b763590..cd8e3f18b0a 100644
--- a/rpc/rpc-lib/src/rpcsvc.c
+++ b/rpc/rpc-lib/src/rpcsvc.c
@@ -46,10 +46,15 @@
struct rpcsvc_program gluster_dump_prog;
-#define rpcsvc_alloc_request(svc, request) \
- do { \
- request = (rpcsvc_request_t *) mem_get ((svc)->rxpool); \
- memset (request, 0, sizeof (rpcsvc_request_t)); \
+#define rpcsvc_alloc_request(svc, request) \
+ do { \
+ request = (rpcsvc_request_t *)mem_get ((svc)->rxpool); \
+ if (request) { \
+ memset (request, 0, sizeof (rpcsvc_request_t)); \
+ } else { \
+ gf_log ("rpcsvc", GF_LOG_ERROR, \
+ "error getting memory for rpc request"); \
+ } \
} while (0)
rpcsvc_listener_t *
@@ -1353,6 +1358,10 @@ rpcsvc_submit_generic (rpcsvc_request_t *req, struct iovec *proghdr,
proghdr, hdrcount,
payload, payloadcount);
UNLOCK (&drc->lock);
+ if (ret < 0) {
+ gf_log (GF_RPCSVC, GF_LOG_ERROR,
+ "failed to cache reply");
+ }
}
ret = rpcsvc_transport_submit (trans, &recordhdr, 1, proghdr, hdrcount,
@@ -1665,11 +1674,6 @@ rpcsvc_program_unregister (rpcsvc_t *svc, rpcsvc_program_t *program)
}
pthread_rwlock_unlock (&svc->rpclock);
- if (prog == NULL) {
- ret = -1;
- goto out;
- }
-
gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Program unregistered: %s, Num: %d,"
" Ver: %d, Port: %d", prog->progname, prog->prognum,
prog->progver, prog->progport);
@@ -2046,9 +2050,13 @@ rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program,
newprog->ownthread = _gf_false;
if (newprog->ownthread) {
- gf_thread_create (&newprog->thread, NULL,
- rpcsvc_request_handler,
- newprog, "rpcsvcrh");
+ ret = gf_thread_create (&newprog->thread, NULL,
+ rpcsvc_request_handler,
+ newprog, "rpcsvcrh");
+ if (ret != 0) {
+ gf_log (GF_RPCSVC, GF_LOG_ERROR,
+ "error creating request handler thread");
+ }
}
pthread_rwlock_wrlock (&svc->rpclock);
@@ -2884,17 +2892,24 @@ rpcsvc_match_subnet_v4 (const char *addrtok, const char *ipaddr)
goto out;
/* Find the network socket addr of subnet pattern */
- slash = strchr (netaddr, '/');
- *slash = '\0';
if (inet_pton (AF_INET, netaddr, &sin2.sin_addr) == 0)
goto out;
- /*
- * Find the IPv4 network mask in network byte order.
- * IMP: String slash+1 is already validated, it cant have value
- * more than IPv4_ADDR_SIZE (32).
- */
- prefixlen = (uint32_t) atoi (slash + 1);
+ slash = strchr (netaddr, '/');
+ if (slash) {
+ *slash = '\0';
+ /*
+ * Find the IPv4 network mask in network byte order.
+ * IMP: String slash+1 is already validated, it cant have value
+ * more than IPv4_ADDR_SIZE (32).
+ */
+ prefixlen = (uint32_t) atoi (slash + 1);
+ if (prefixlen > 31)
+ goto out;
+ } else {
+ goto out;
+ }
+
shift = IPv4_ADDR_SIZE - prefixlen;
mask.sin_addr.s_addr = htonl ((uint32_t)~0 << shift);
diff --git a/rpc/rpc-lib/src/rpcsvc.h b/rpc/rpc-lib/src/rpcsvc.h
index 1fdbc69c7ad..533e6bde374 100644
--- a/rpc/rpc-lib/src/rpcsvc.h
+++ b/rpc/rpc-lib/src/rpcsvc.h
@@ -514,8 +514,8 @@ rpcsvc_auth_check (rpcsvc_t *svc, char *volname, char *ipaddr);
extern int
rpcsvc_transport_privport_check (rpcsvc_t *svc, char *volname, uint16_t port);
-#define rpcsvc_request_seterr(req, err) (req)->rpc_err = err
-#define rpcsvc_request_set_autherr(req, err) (req)->auth_err = err
+#define rpcsvc_request_seterr(req, err) ((req)->rpc_err = (int)(err))
+#define rpcsvc_request_set_autherr(req, err) ((req)->auth_err = (int)(err))
extern int rpcsvc_submit_vectors (rpcsvc_request_t *req);