From 642697878fe703b851a0171a3edb37ed1d62d917 Mon Sep 17 00:00:00 2001 From: Pawel Wodkowski Date: Tue, 17 Jul 2018 19:44:22 +0200 Subject: [PATCH] iscsi/rpc: fix several bugs of set_iscsi_options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In python script: - timeout should be nop_timeout - min_connections_per_core was min_connections_per_session by mistake. - max_queue_depth was not included. - call_cmd was missing. - A space should be added after semicolon ":" In SPDK library: - type of options was not int32_t but int. Hence decode failed. - type of options in dump were not correct. Change-Id: Iaa79236c03d368cdf286a72c2386509ffa81530f Signed-off-by: Pawel Wodkowski Reviewed-on: https://review.gerrithub.io/419553 Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Seth Howell Reviewed-by: Paweł Niedźwiecki Reviewed-by: Ben Walker Reviewed-by: Ziye Yang Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- lib/event/subsystems/iscsi/iscsi_rpc.c | 2 +- lib/iscsi/iscsi.h | 12 ++++++------ lib/iscsi/iscsi_subsystem.c | 6 +++--- scripts/rpc.py | 7 +++++-- scripts/rpc/iscsi.py | 16 ++++++++++------ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/lib/event/subsystems/iscsi/iscsi_rpc.c b/lib/event/subsystems/iscsi/iscsi_rpc.c index 64ea2204a..beca64e0a 100644 --- a/lib/event/subsystems/iscsi/iscsi_rpc.c +++ b/lib/event/subsystems/iscsi/iscsi_rpc.c @@ -43,7 +43,7 @@ static const struct spdk_json_object_decoder rpc_set_iscsi_opts_decoders[] = { {"auth_file", offsetof(struct spdk_iscsi_opts, authfile), spdk_json_decode_string, true}, {"node_base", offsetof(struct spdk_iscsi_opts, nodebase), spdk_json_decode_string, true}, - {"timeout", offsetof(struct spdk_iscsi_opts, timeout), spdk_json_decode_int32, true}, + {"nop_timeout", offsetof(struct spdk_iscsi_opts, timeout), spdk_json_decode_int32, true}, {"nop_in_interval", offsetof(struct spdk_iscsi_opts, nopininterval), spdk_json_decode_int32, true}, {"no_discovery_auth", offsetof(struct spdk_iscsi_opts, no_discovery_auth), spdk_json_decode_bool, true}, {"req_discovery_auth", offsetof(struct spdk_iscsi_opts, req_discovery_auth), spdk_json_decode_bool, true}, diff --git a/lib/iscsi/iscsi.h b/lib/iscsi/iscsi.h index beec9e5a3..d06d97662 100644 --- a/lib/iscsi/iscsi.h +++ b/lib/iscsi/iscsi.h @@ -268,12 +268,12 @@ struct spdk_iscsi_poll_group { struct spdk_iscsi_opts { char *authfile; char *nodebase; - int timeout; - int nopininterval; + int32_t timeout; + int32_t nopininterval; bool no_discovery_auth; bool req_discovery_auth; bool req_discovery_auth_mutual; - int discovery_auth_group; + int32_t discovery_auth_group; uint32_t MaxSessions; uint32_t MaxConnectionsPerSession; uint32_t MaxConnections; @@ -295,12 +295,12 @@ struct spdk_iscsi_globals { TAILQ_HEAD(, spdk_iscsi_init_grp) ig_head; TAILQ_HEAD(, spdk_iscsi_tgt_node) target_head; - int timeout; - int nopininterval; + int32_t timeout; + int32_t nopininterval; bool no_discovery_auth; bool req_discovery_auth; bool req_discovery_auth_mutual; - int discovery_auth_group; + int32_t discovery_auth_group; uint32_t MaxSessions; uint32_t MaxConnectionsPerSession; diff --git a/lib/iscsi/iscsi_subsystem.c b/lib/iscsi/iscsi_subsystem.c index 3f19469a1..acc196922 100644 --- a/lib/iscsi/iscsi_subsystem.c +++ b/lib/iscsi/iscsi_subsystem.c @@ -1036,7 +1036,7 @@ spdk_iscsi_opts_info_json(struct spdk_json_write_ctx *w) spdk_json_write_named_uint32(w, "error_recovery_level", g_spdk_iscsi.ErrorRecoveryLevel); - spdk_json_write_named_uint32(w, "timeout", g_spdk_iscsi.timeout); + spdk_json_write_named_int32(w, "nop_timeout", g_spdk_iscsi.timeout); spdk_json_write_named_int32(w, "nop_in_interval", g_spdk_iscsi.nopininterval); spdk_json_write_named_bool(w, "no_discovery_auth", g_spdk_iscsi.no_discovery_auth); @@ -1045,8 +1045,8 @@ spdk_iscsi_opts_info_json(struct spdk_json_write_ctx *w) g_spdk_iscsi.req_discovery_auth_mutual); spdk_json_write_named_int32(w, "discovery_auth_group", g_spdk_iscsi.discovery_auth_group); - spdk_json_write_named_int32(w, "min_connections_per_core", - spdk_iscsi_conn_get_min_per_core()); + spdk_json_write_named_uint32(w, "min_connections_per_core", + spdk_iscsi_conn_get_min_per_core()); spdk_json_write_object_end(w); } diff --git a/scripts/rpc.py b/scripts/rpc.py index 53cbc7c2f..5d406ea02 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -443,6 +443,7 @@ if __name__ == "__main__": p.set_defaults(func=apply_firmware) # iSCSI + @call_cmd def set_iscsi_options(args): rpc.iscsi.set_iscsi_options( args.client, @@ -455,13 +456,14 @@ if __name__ == "__main__": req_discovery_auth_mutual=args.req_discovery_auth_mutual, discovery_auth_group=args.discovery_auth_group, max_sessions=args.max_sessions, + max_queue_depth=args.max_queue_depth, max_connections_per_session=args.max_connections_per_session, default_time2wait=args.default_time2wait, default_time2retain=args.default_time2retain, immediate_data=args.immediate_data, error_recovery_level=args.error_recovery_level, allow_duplicated_isid=args.allow_duplicated_isid, - min_connections_per_session=args.min_connections_per_session) + min_connections_per_core=args.min_connections_per_core) p = subparsers.add_parser('set_iscsi_options', help="""Set options of iSCSI subsystem""") p.add_argument('-f', '--auth-file', help='Path to CHAP shared secret file for discovery session') @@ -476,13 +478,14 @@ if __name__ == "__main__": p.add_argument('-g', '--discovery-auth-group', help="""Authentication group ID for discovery session. *** Authentication group must be precreated ***""", type=int) p.add_argument('-a', '--max-sessions', help='Maximum number of sessions in the host.', type=int) + p.add_argument('-q', '--max-queue-depth', help='Max number of outstanding I/Os per queue.', type=int) p.add_argument('-c', '--max-connections-per-session', help='Negotiated parameter, MaxConnections.', type=int) p.add_argument('-w', '--default-time2wait', help='Negotiated parameter, DefaultTime2Wait.', type=int) p.add_argument('-v', '--default-time2retain', help='Negotiated parameter, DefaultTime2Retain.', type=int) p.add_argument('-i', '--immediate-data', help='Negotiated parameter, ImmediateData.', action='store_true') p.add_argument('-l', '--error-recovery-level', help='Negotiated parameter, ErrorRecoveryLevel', type=int) p.add_argument('-p', '--allow-duplicated-isid', help='Allow duplicated initiator session ID.', action='store_true') - p.add_argument('-u', '--min-connections-per-session', help='Allocation unit of connections per core', type=int) + p.add_argument('-u', '--min-connections-per-core', help='Allocation unit of connections per core', type=int) p.set_defaults(func=set_iscsi_options) @call_cmd diff --git a/scripts/rpc/iscsi.py b/scripts/rpc/iscsi.py index 28c755364..cc01ff2a3 100755 --- a/scripts/rpc/iscsi.py +++ b/scripts/rpc/iscsi.py @@ -11,13 +11,14 @@ def set_iscsi_options( req_discovery_auth_mutual=None, discovery_auth_group=None, max_sessions=None, + max_queue_depth=None, max_connections_per_session=None, default_time2wait=None, default_time2retain=None, immediate_data=None, error_recovery_level=None, allow_duplicated_isid=None, - min_connections_per_session=None): + min_connections_per_core=None): """Set iSCSI target options. Args: @@ -29,14 +30,15 @@ def set_iscsi_options( req_discovery_auth: CHAP for discovery session should be required req_discovery_auth_mutual: CHAP for discovery session should be mutual discovery_auth_group: Authentication group ID for discovery session - max_sessions:Maximum number of sessions in the host - max_connections_per_session:Negotiated parameter, MaxConnections + max_sessions: Maximum number of sessions in the host + max_queue_depth: Maximum number of outstanding I/Os per queue + max_connections_per_session: Negotiated parameter, MaxConnections default_time2wait: Negotiated parameter, DefaultTime2Wait default_time2retain: Negotiated parameter, DefaultTime2Retain immediate_data: Negotiated parameter, ImmediateData error_recovery_level: Negotiated parameter, ErrorRecoveryLevel allow_duplicated_isid: Allow duplicated initiator session ID - min_connections_per_session: Allocation unit of connections per core + min_connections_per_core: Allocation unit of connections per core Returns: True or False @@ -61,6 +63,8 @@ def set_iscsi_options( params['discovery_auth_group'] = discovery_auth_group if max_sessions: params['max_sessions'] = max_sessions + if max_queue_depth: + params['max_queue_depth'] = max_queue_depth if max_connections_per_session: params['max_connections_per_session'] = max_connections_per_session if default_time2wait: @@ -73,8 +77,8 @@ def set_iscsi_options( params['error_recovery_level'] = error_recovery_level if allow_duplicated_isid: params['allow_duplicated_isid'] = allow_duplicated_isid - if min_connections_per_session: - params['min_connections_per_session'] = min_connections_per_session + if min_connections_per_core: + params['min_connections_per_core'] = min_connections_per_core return client.call('set_iscsi_options', params)