summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorJeff Darcy <jdarcy@redhat.com>2016-10-27 11:51:47 -0400
committerShyamsundar Ranganathan <srangana@redhat.com>2017-02-01 19:59:25 -0500
commitc8a23cc6cd289dd28deb136bf2550f28e2761ef3 (patch)
tree0d094de18439a092fcbf4084a7a2d6b8bf02b1af /rpc
parentd7077bca4b372a056d23416294e729637e9af94e (diff)
libglusterfs+transport+io-threads: fix 256KB stack abuse
Some functions were allocating 64K booleans, which are (crazily) mapped to 4-byte ints, for a total of 256KB per call. Changed to use bitfields instead, so usage is now only 8KB per call. This was the impediment to changing the io-threads stack size, so that has been adjusted too. Change-Id: I8781c4f2c8f2b830f4535e366995fac8dd0a8653 BUG: 1418095 Signed-off-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: https://review.gluster.org/15745 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: N Balachandran <nbalacha@redhat.com> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Diffstat (limited to 'rpc')
-rw-r--r--rpc/rpc-transport/rdma/src/name.c12
-rw-r--r--rpc/rpc-transport/socket/src/name.c12
2 files changed, 12 insertions, 12 deletions
diff --git a/rpc/rpc-transport/rdma/src/name.c b/rpc/rpc-transport/rdma/src/name.c
index 8003b1c..5064427 100644
--- a/rpc/rpc-transport/rdma/src/name.c
+++ b/rpc/rpc-transport/rdma/src/name.c
@@ -54,10 +54,10 @@ af_inet_bind_to_port_lt_ceiling (struct rdma_cm_id *cm_id,
struct sockaddr *sockaddr,
socklen_t sockaddr_len, uint32_t ceiling)
{
- int32_t ret = -1;
- uint16_t port = ceiling - 1;
- gf_boolean_t ports[GF_PORT_MAX];
- int i = 0;
+ int32_t ret = -1;
+ uint16_t port = ceiling - 1;
+ unsigned char ports[GF_PORT_ARRAY_SIZE] = {0,};
+ int i = 0;
loop:
ret = gf_process_reserved_ports (ports, ceiling);
@@ -69,7 +69,7 @@ loop:
}
/* ignore the reserved ports */
- if (ports[port] == _gf_true) {
+ if (BIT_VALUE (ports, port)) {
port--;
continue;
}
@@ -95,7 +95,7 @@ loop:
if (!port) {
ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;
for (i = 0; i <= ceiling; i++)
- ports[i] = _gf_false;
+ BIT_CLEAR (ports, i);
goto loop;
}
diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c
index 0e34dc2..acd1dc7 100644
--- a/rpc/rpc-transport/socket/src/name.c
+++ b/rpc/rpc-transport/socket/src/name.c
@@ -42,10 +42,10 @@ static int32_t
af_inet_bind_to_port_lt_ceiling (int fd, struct sockaddr *sockaddr,
socklen_t sockaddr_len, uint32_t ceiling)
{
- int32_t ret = -1;
- uint16_t port = ceiling - 1;
- gf_boolean_t ports[GF_PORT_MAX];
- int i = 0;
+ int32_t ret = -1;
+ uint16_t port = ceiling - 1;
+ unsigned char ports[GF_PORT_ARRAY_SIZE] = {0,};
+ int i = 0;
loop:
ret = gf_process_reserved_ports (ports, ceiling);
@@ -57,7 +57,7 @@ loop:
}
/* ignore the reserved ports */
- if (ports[port] == _gf_true) {
+ if (BIT_VALUE (ports, port)) {
port--;
continue;
}
@@ -83,7 +83,7 @@ loop:
if (!port) {
ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;
for (i = 0; i <= ceiling; i++)
- ports[i] = _gf_false;
+ BIT_CLEAR (ports, i);
goto loop;
}