From 7e5f56de063772cb09be282008fe4250ea57b8be Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Fri, 16 Feb 2018 14:10:29 -0700 Subject: [PATCH] net: move common sock_group code out of posix_sock functions Signed-off-by: Jim Harris Change-Id: If400fbd1c8ce3730ed3ef52b9da3fc5474de8444 Reviewed-on: https://review.gerrithub.io/400331 Tested-by: SPDK Automated Test System Reviewed-by: Shuhei Matsumoto Reviewed-by: Tomasz Zawadzki Reviewed-by: Daniel Verkamp --- lib/net/sock.c | 75 +++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/lib/net/sock.c b/lib/net/sock.c index d90db1e25..8bf46b739 100644 --- a/lib/net/sock.c +++ b/lib/net/sock.c @@ -439,31 +439,15 @@ spdk_posix_sock_group_create(void) } sock_group->fd = fd; - TAILQ_INIT(&sock_group->socks); return sock_group; } static int -spdk_posix_sock_group_add_sock(struct spdk_sock_group *group, struct spdk_sock *sock, - spdk_sock_cb cb_fn, void *cb_arg) +spdk_posix_sock_group_add_sock(struct spdk_sock_group *group, struct spdk_sock *sock) { int rc; - if (cb_fn == NULL) { - errno = EINVAL; - return -1; - } - - if (sock->cb_fn != NULL) { - /* - * This sock is already part of a sock_group. Currently we don't - * support this. - */ - errno = EBUSY; - return -1; - } - #if defined(__linux__) struct epoll_event event; @@ -479,12 +463,6 @@ spdk_posix_sock_group_add_sock(struct spdk_sock_group *group, struct spdk_sock * rc = kevent(group->fd, &event, 1, NULL, 0, &ts); #endif - if (rc == 0) { - TAILQ_INSERT_TAIL(&group->socks, sock, link); - sock->cb_fn = cb_fn; - sock->cb_arg = cb_arg; - } - return rc; } @@ -509,12 +487,6 @@ spdk_posix_sock_group_remove_sock(struct spdk_sock_group *group, struct spdk_soc errno = event.data; } #endif - if (rc == 0) { - TAILQ_REMOVE(&group->socks, sock, link); - sock->cb_fn = NULL; - sock->cb_arg = NULL; - } - return rc; } @@ -667,20 +639,59 @@ spdk_sock_is_ipv4(struct spdk_sock *sock) struct spdk_sock_group * spdk_sock_group_create(void) { - return spdk_posix_sock_group_create(); + struct spdk_sock_group *group; + + group = spdk_posix_sock_group_create(); + if (group != NULL) { + TAILQ_INIT(&group->socks); + } + + return group; } int spdk_sock_group_add_sock(struct spdk_sock_group *group, struct spdk_sock *sock, spdk_sock_cb cb_fn, void *cb_arg) { - return spdk_posix_sock_group_add_sock(group, sock, cb_fn, cb_arg); + int rc; + + if (cb_fn == NULL) { + errno = EINVAL; + return -1; + } + + if (sock->cb_fn != NULL) { + /* + * This sock is already part of a sock_group. Currently we don't + * support this. + */ + errno = EBUSY; + return -1; + } + + rc = spdk_posix_sock_group_add_sock(group, sock); + if (rc == 0) { + TAILQ_INSERT_TAIL(&group->socks, sock, link); + sock->cb_fn = cb_fn; + sock->cb_arg = cb_arg; + } + + return rc; } int spdk_sock_group_remove_sock(struct spdk_sock_group *group, struct spdk_sock *sock) { - return spdk_posix_sock_group_remove_sock(group, sock); + int rc; + + rc = spdk_posix_sock_group_remove_sock(group, sock); + if (rc == 0) { + TAILQ_REMOVE(&group->socks, sock, link); + sock->cb_fn = NULL; + sock->cb_arg = NULL; + } + + return rc; } int