+0
−2
Loading
When an iSCSI connection is closed, spdk_iscsi_conn_stop_poller() is called in spdk_iscsi_conn_destruct() or spdk_iscsi_conn_check_shutdown(). However, through both paths, g_num_connections[] is decremented twice: (1) in spdk_iscsi_conn_stop_poller() (2) in spdk_iscsi_conn_free() This behavior makes g_num_connections[] negative unexpectedly and for some cases load balancing does not work and the same CPU is always selected. How to fix: spdk_iscsi_conn_stop_poller() is called in the following functions: - spdk_iscsi_conn_check_shutdown() - spdk_iscsi_conn_destruct() - spdk_iscsi_conn_handle_idle(). [Idea 1] Remove the code to decrement g_num_connections[] from spdk_iscsi_conn_free(). [Idea 2] Remove the code to decrement g_num_connections[] from spdk_iscsi_conn_stop_poller(). Add the code to decrement g_num_connections[] to __add_idle_conn(). [Idea 1] is simple because just only one line is deleted. [Idea 2] may be more symmetric than [Idea 1] but to find the right place to add the code in __add_idle_conn() is not clear and difficult. Hence [Idea 1] is proposed. [Idea 1] may not be the optimal one and more refactoring may be done. Change-Id: I81050f4a0e7b3ddd40896f46ab2eb8de14bbcb3a Signed-off-by:Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/384026 Reviewed-by:
Cunyin Chang <cunyin.chang@intel.com> Reviewed-by:
Ben Walker <benjamin.walker@intel.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com> Tested-by:
SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by:
Daniel Verkamp <daniel.verkamp@intel.com>