From 030bbebeb2cccd7ae23827004d2f1b0592ea655b Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Wed, 6 Jul 2022 15:27:24 +0200 Subject: [PATCH] sock: extract copying impl_opts to a function Both get_opts and set_opts use very similar macros to achieve almost the same thing, so it makes sense to extract it to a separate function. Additionally, it'll be also useful in subsequent patches introducing per-sock impl_opts, as there will be more places when we want to copy impl_opts. Signed-off-by: Konrad Sztyber Change-Id: I8ab27298d62ea0118463ee945c708acd91aa5104 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13658 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- module/sock/posix/posix.c | 74 ++++++++++++++++----------------------- module/sock/uring/uring.c | 73 ++++++++++++++++---------------------- 2 files changed, 62 insertions(+), 85 deletions(-) diff --git a/module/sock/posix/posix.c b/module/sock/posix/posix.c index a673a385d..c44184e5d 100644 --- a/module/sock/posix/posix.c +++ b/module/sock/posix/posix.c @@ -93,54 +93,16 @@ posix_sock_map_cleanup(void) #define __posix_sock(sock) (struct spdk_posix_sock *)sock #define __posix_group_impl(group) (struct spdk_posix_sock_group_impl *)group -static int -posix_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) +static void +posix_sock_copy_impl_opts(struct spdk_sock_impl_opts *dest, const struct spdk_sock_impl_opts *src, + size_t len) { - if (!opts || !len) { - errno = EINVAL; - return -1; - } - memset(opts, 0, *len); - #define FIELD_OK(field) \ - offsetof(struct spdk_sock_impl_opts, field) + sizeof(opts->field) <= *len - -#define GET_FIELD(field) \ - if (FIELD_OK(field)) { \ - opts->field = g_spdk_posix_sock_impl_opts.field; \ - } - - GET_FIELD(recv_buf_size); - GET_FIELD(send_buf_size); - GET_FIELD(enable_recv_pipe); - GET_FIELD(enable_zerocopy_send); - GET_FIELD(enable_quickack); - GET_FIELD(enable_placement_id); - GET_FIELD(enable_zerocopy_send_server); - GET_FIELD(enable_zerocopy_send_client); - GET_FIELD(zerocopy_threshold); - -#undef GET_FIELD -#undef FIELD_OK - - *len = spdk_min(*len, sizeof(g_spdk_posix_sock_impl_opts)); - return 0; -} - -static int -posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) -{ - if (!opts) { - errno = EINVAL; - return -1; - } - -#define FIELD_OK(field) \ - offsetof(struct spdk_sock_impl_opts, field) + sizeof(opts->field) <= len + offsetof(struct spdk_sock_impl_opts, field) + sizeof(src->field) <= len #define SET_FIELD(field) \ if (FIELD_OK(field)) { \ - g_spdk_posix_sock_impl_opts.field = opts->field; \ + dest->field = src->field; \ } SET_FIELD(recv_buf_size); @@ -155,6 +117,32 @@ posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) #undef SET_FIELD #undef FIELD_OK +} + +static int +posix_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) +{ + if (!opts || !len) { + errno = EINVAL; + return -1; + } + memset(opts, 0, *len); + + posix_sock_copy_impl_opts(opts, &g_spdk_posix_sock_impl_opts, *len); + *len = spdk_min(*len, sizeof(g_spdk_posix_sock_impl_opts)); + + return 0; +} + +static int +posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) +{ + if (!opts) { + errno = EINVAL; + return -1; + } + + posix_sock_copy_impl_opts(&g_spdk_posix_sock_impl_opts, opts, len); return 0; } diff --git a/module/sock/uring/uring.c b/module/sock/uring/uring.c index 61af09aed..f2788f82e 100644 --- a/module/sock/uring/uring.c +++ b/module/sock/uring/uring.c @@ -114,53 +114,16 @@ uring_sock_map_cleanup(void) #define __uring_sock(sock) (struct spdk_uring_sock *)sock #define __uring_group_impl(group) (struct spdk_uring_sock_group_impl *)group -static int -uring_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) +static void +uring_sock_copy_impl_opts(struct spdk_sock_impl_opts *dest, const struct spdk_sock_impl_opts *src, + size_t len) { - if (!opts || !len) { - errno = EINVAL; - return -1; - } - memset(opts, 0, *len); - #define FIELD_OK(field) \ - offsetof(struct spdk_sock_impl_opts, field) + sizeof(opts->field) <= *len - -#define GET_FIELD(field) \ - if (FIELD_OK(field)) { \ - opts->field = g_spdk_uring_sock_impl_opts.field; \ - } - - GET_FIELD(recv_buf_size); - GET_FIELD(send_buf_size); - GET_FIELD(enable_recv_pipe); - GET_FIELD(enable_quickack); - GET_FIELD(enable_placement_id); - GET_FIELD(enable_zerocopy_send_server); - GET_FIELD(enable_zerocopy_send_client); - GET_FIELD(zerocopy_threshold); - -#undef GET_FIELD -#undef FIELD_OK - - *len = spdk_min(*len, sizeof(g_spdk_uring_sock_impl_opts)); - return 0; -} - -static int -uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) -{ - if (!opts) { - errno = EINVAL; - return -1; - } - -#define FIELD_OK(field) \ - offsetof(struct spdk_sock_impl_opts, field) + sizeof(opts->field) <= len + offsetof(struct spdk_sock_impl_opts, field) + sizeof(src->field) <= len #define SET_FIELD(field) \ if (FIELD_OK(field)) { \ - g_spdk_uring_sock_impl_opts.field = opts->field; \ + dest->field = src->field; \ } SET_FIELD(recv_buf_size); @@ -174,6 +137,32 @@ uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) #undef SET_FIELD #undef FIELD_OK +} + +static int +uring_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) +{ + if (!opts || !len) { + errno = EINVAL; + return -1; + } + memset(opts, 0, *len); + + uring_sock_copy_impl_opts(opts, &g_spdk_uring_sock_impl_opts, *len); + *len = spdk_min(*len, sizeof(g_spdk_uring_sock_impl_opts)); + + return 0; +} + +static int +uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) +{ + if (!opts) { + errno = EINVAL; + return -1; + } + + uring_sock_copy_impl_opts(&g_spdk_uring_sock_impl_opts, opts, len); return 0; }