From 7171d7d4e331fb11603dd7b7613b5cd8342d44be Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 30 Sep 2019 12:07:28 -0700 Subject: [PATCH] sock/posix: Call set_recvbuf internally Instead of having two places in the code that do the syscalls to set up the recvbuf size, just call the function we already have. Change-Id: I7d098fc7a39d0593c58fbe05b1f0b14f8b6a360d Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470509 Tested-by: SPDK CI Jenkins Reviewed-by: Alexey Marchuk Reviewed-by: Darek Stojaczyk Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- mk/spdk.lib_deps.mk | 2 +- module/sock/posix/posix.c | 60 +++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/mk/spdk.lib_deps.mk b/mk/spdk.lib_deps.mk index 8a09985a1..cd5970490 100644 --- a/mk/spdk.lib_deps.mk +++ b/mk/spdk.lib_deps.mk @@ -101,7 +101,7 @@ DEPDIRS-blob_bdev := log thread bdev DEPDIRS-copy_ioat := log ioat conf thread $(JSON_LIBS) copy # module/sock -DEPDIRS-sock_posix := log sock util +DEPDIRS-sock_posix := log sock DEPDIRS-sock_vpp := log sock util thread # module/bdev diff --git a/module/sock/posix/posix.c b/module/sock/posix/posix.c index e965dcbd4..d0f8c4d61 100644 --- a/module/sock/posix/posix.c +++ b/module/sock/posix/posix.c @@ -41,7 +41,6 @@ #include "spdk/log.h" #include "spdk/sock.h" -#include "spdk/string.h" #include "spdk_internal/sock.h" #define MAX_TMPBUF 1024 @@ -166,6 +165,26 @@ enum spdk_posix_sock_create_type { SPDK_SOCK_CREATE_CONNECT, }; +static int +spdk_posix_sock_set_recvbuf(struct spdk_sock *_sock, int sz) +{ + struct spdk_posix_sock *sock = __posix_sock(_sock); + int rc; + + assert(sock != NULL); + + if (sz < SO_RCVBUF_SIZE) { + sz = SO_RCVBUF_SIZE; + } + + rc = setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF, &sz, sizeof(sz)); + if (rc < 0) { + return rc; + } + + return 0; +} + static struct spdk_sock * spdk_posix_sock_create(const char *ip, int port, enum spdk_posix_sock_create_type type) { @@ -298,6 +317,12 @@ retry: } sock->fd = fd; + + rc = spdk_posix_sock_set_recvbuf(&sock->base, SO_RCVBUF_SIZE); + if (rc) { + /* Not fatal */ + } + return &sock->base; } @@ -322,7 +347,6 @@ spdk_posix_sock_accept(struct spdk_sock *_sock) int rc, fd; struct spdk_posix_sock *new_sock; int flag; - size_t sz = 0; memset(&sa, 0, sizeof(sa)); salen = sizeof(sa); @@ -344,21 +368,6 @@ spdk_posix_sock_accept(struct spdk_sock *_sock) return NULL; } - rc = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &sz, &salen); - if (rc < 0) { - SPDK_ERRLOG("Unable to get recvbuf size for socket fd %d (%s)\n", fd, spdk_strerror(errno)); - close(fd); - return NULL; - } - - if (sz < SO_RCVBUF_SIZE) { - sz = SO_RCVBUF_SIZE; - rc = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &sz, sizeof(sz)); - if (rc < 0) { - SPDK_WARNLOG("Unable to increase size of rcvbuf for socket fd %d (%s)", fd, spdk_strerror(errno)); - } - } - new_sock = calloc(1, sizeof(*sock)); if (new_sock == NULL) { SPDK_ERRLOG("sock allocation failed\n"); @@ -367,6 +376,12 @@ spdk_posix_sock_accept(struct spdk_sock *_sock) } new_sock->fd = fd; + + rc = spdk_posix_sock_set_recvbuf(&new_sock->base, SO_RCVBUF_SIZE); + if (rc) { + /* Not fatal */ + } + return &new_sock->base; } @@ -425,17 +440,6 @@ spdk_posix_sock_set_recvlowat(struct spdk_sock *_sock, int nbytes) return 0; } -static int -spdk_posix_sock_set_recvbuf(struct spdk_sock *_sock, int sz) -{ - struct spdk_posix_sock *sock = __posix_sock(_sock); - - assert(sock != NULL); - - return setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF, - &sz, sizeof(sz)); -} - static int spdk_posix_sock_set_sendbuf(struct spdk_sock *_sock, int sz) {