diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c3502ee9..247e9582d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,17 @@ Updated ISA-L submodule to v2.29.0. Updated OCF submodule to v20.03.1 +### sock + +The `enable_placement_id` field was added in the struct spdk_sock_impl_opts to +make the placement_id feature configurable by users. The default setting is +not enabled. + +### rpc + +A new optional parameter `enable_placement_id` was added to the `sock_impl_set_options` +RPC. + ## v20.07: SPDK CSI driver, new accel_fw commands, I/O abort support ### accel diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index 2c09da795..8d03f1dee 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -6929,6 +6929,7 @@ send_buf_size | Optional | number | Size of socket send buffer in enable_recv_pipe | Optional | boolean | Enable or disable receive pipe enable_zerocopy_send | Optional | boolean | Enable or disable zero copy on send enable_quick_ack | Optional | boolean | Enable or disable quick ACK +enable_placement_id | Optional | boolean | Enable or disable placement_id ### Response @@ -6949,7 +6950,8 @@ Example request: "send_buf_size": 2097152, "enable_recv_pipe": false, "enable_zerocopy_send": true, - "enable_quick_ack": false + "enable_quick_ack": false, + "enable_placement_id": false } } ~~~ diff --git a/include/spdk/sock.h b/include/spdk/sock.h index 94a02bc6e..a51ba8706 100644 --- a/include/spdk/sock.h +++ b/include/spdk/sock.h @@ -112,6 +112,12 @@ struct spdk_sock_impl_opts { * Enable or disable quick ACK. Used by posix and uring socket modules. */ bool enable_quickack; + + /** + * Enable or disable placement_id. Used by posix and uring socket modules. + */ + bool enable_placement_id; + }; /** diff --git a/lib/sock/Makefile b/lib/sock/Makefile index 5878e2655..b063bf281 100644 --- a/lib/sock/Makefile +++ b/lib/sock/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -SO_VER := 4 +SO_VER := 5 SO_MINOR := 0 C_SRCS = sock.c net_framework.c sock_rpc.c diff --git a/lib/sock/sock_rpc.c b/lib/sock/sock_rpc.c index 726ab54ae..c4e3e653e 100644 --- a/lib/sock/sock_rpc.c +++ b/lib/sock/sock_rpc.c @@ -76,6 +76,7 @@ rpc_sock_impl_get_options(struct spdk_jsonrpc_request *request, spdk_json_write_named_bool(w, "enable_recv_pipe", sock_opts.enable_recv_pipe); spdk_json_write_named_bool(w, "enable_zerocopy_send", sock_opts.enable_zerocopy_send); spdk_json_write_named_bool(w, "enable_quickack", sock_opts.enable_quickack); + spdk_json_write_named_bool(w, "enable_placement_id", sock_opts.enable_placement_id); spdk_json_write_object_end(w); spdk_jsonrpc_end_result(request, w); free(impl_name); @@ -113,6 +114,11 @@ static const struct spdk_json_object_decoder rpc_sock_impl_set_opts_decoders[] = "enable_quickack", offsetof(struct spdk_rpc_sock_impl_set_opts, sock_opts.enable_quickack), spdk_json_decode_bool, true }, + { + "enable_placement_id", offsetof(struct spdk_rpc_sock_impl_set_opts, sock_opts.enable_placement_id), + spdk_json_decode_bool, true + }, + }; static void diff --git a/module/sock/posix/posix.c b/module/sock/posix/posix.c index f626776d4..0db20dd27 100644 --- a/module/sock/posix/posix.c +++ b/module/sock/posix/posix.c @@ -83,6 +83,7 @@ static struct spdk_sock_impl_opts g_spdk_posix_sock_impl_opts = { .enable_recv_pipe = true, .enable_zerocopy_send = true, .enable_quickack = false, + .enable_placement_id = false, }; static int @@ -1103,6 +1104,10 @@ posix_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id) { int rc = -1; + if (!g_spdk_posix_sock_impl_opts.enable_placement_id) { + return rc; + } + #if defined(SO_INCOMING_NAPI_ID) struct spdk_posix_sock *sock = __posix_sock(_sock); socklen_t salen = sizeof(int); @@ -1356,6 +1361,7 @@ posix_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) GET_FIELD(enable_recv_pipe); GET_FIELD(enable_zerocopy_send); GET_FIELD(enable_quickack); + GET_FIELD(enable_placement_id); #undef GET_FIELD #undef FIELD_OK @@ -1385,6 +1391,7 @@ posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) SET_FIELD(enable_recv_pipe); SET_FIELD(enable_zerocopy_send); SET_FIELD(enable_quickack); + SET_FIELD(enable_placement_id); #undef SET_FIELD #undef FIELD_OK diff --git a/module/sock/uring/uring.c b/module/sock/uring/uring.c index b85428d29..447cccc9f 100644 --- a/module/sock/uring/uring.c +++ b/module/sock/uring/uring.c @@ -104,6 +104,7 @@ static struct spdk_sock_impl_opts g_spdk_uring_sock_impl_opts = { .send_buf_size = MIN_SO_SNDBUF_SIZE, .enable_recv_pipe = true, .enable_quickack = false, + .enable_placement_id = false, }; #define SPDK_URING_SOCK_REQUEST_IOV(req) ((struct iovec *)((uint8_t *)req + sizeof(struct spdk_sock_request))) @@ -1140,6 +1141,10 @@ uring_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id) { int rc = -1; + if (!g_spdk_uring_sock_impl_opts.enable_placement_id) { + return rc; + } + #if defined(SO_INCOMING_NAPI_ID) struct spdk_uring_sock *sock = __uring_sock(_sock); socklen_t salen = sizeof(int); @@ -1325,6 +1330,7 @@ uring_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) GET_FIELD(send_buf_size); GET_FIELD(enable_recv_pipe); GET_FIELD(enable_quickack); + GET_FIELD(enable_placement_id); #undef GET_FIELD #undef FIELD_OK @@ -1353,6 +1359,7 @@ uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) SET_FIELD(send_buf_size); SET_FIELD(enable_recv_pipe); SET_FIELD(enable_quickack); + SET_FIELD(enable_placement_id); #undef SET_FIELD #undef FIELD_OK diff --git a/scripts/rpc.py b/scripts/rpc.py index 3ad23c848..555ad7bb7 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -2521,7 +2521,8 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse send_buf_size=args.send_buf_size, enable_recv_pipe=args.enable_recv_pipe, enable_zerocopy_send=args.enable_zerocopy_send, - enable_quickack=args.enable_quickack) + enable_quickack=args.enable_quickack, + enable_placement_id=args.enable_placement_id) p = subparsers.add_parser('sock_impl_set_options', help="""Set options of socket layer implementation""") p.add_argument('-i', '--impl', help='Socket implementation name, e.g. posix', required=True) @@ -2539,8 +2540,12 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse action='store_true', dest='enable_quickack') p.add_argument('--disable-quickack', help='Disable quick ACK', action='store_false', dest='enable_quickack') + p.add_argument('--enable-placement_id', help='Enable placement_id', + action='store_true', dest='enable_placement_id') + p.add_argument('--disable-placement_id', help='Disable placement_id', + action='store_false', dest='enable_placement_id') p.set_defaults(func=sock_impl_set_options, enable_recv_pipe=None, enable_zerocopy_send=None, - enable_quickack=None) + enable_quickack=None, enable_placement_id=None) def check_called_name(name): if name in deprecated_aliases: diff --git a/scripts/rpc/sock.py b/scripts/rpc/sock.py index 526bac698..94f9b8293 100644 --- a/scripts/rpc/sock.py +++ b/scripts/rpc/sock.py @@ -17,7 +17,8 @@ def sock_impl_set_options(client, send_buf_size=None, enable_recv_pipe=None, enable_zerocopy_send=None, - enable_quickack=None): + enable_quickack=None, + enable_placement_id=None): """Set parameters for the socket layer implementation. Args: @@ -27,6 +28,7 @@ def sock_impl_set_options(client, enable_recv_pipe: enable or disable receive pipe (optional) enable_zerocopy_send: enable or disable zerocopy on send (optional) enable_quickack: enable or disable quickack (optional) + enable_placement_id: enable or disable placement_id (optional) """ params = {} @@ -41,5 +43,7 @@ def sock_impl_set_options(client, params['enable_zerocopy_send'] = enable_zerocopy_send if enable_quickack is not None: params['enable_quickack'] = enable_quickack + if enable_placement_id is not None: + params['enable_placement_id'] = enable_placement_id return client.call('sock_impl_set_options', params)