Spdk/lib/iscsi
Shuhei Matsumoto 7bcb08c02b iscsi: Load balancing of iSCSI target is not working
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>
2017-11-15 13:25:06 -05:00
..
acceptor.c iscsi: login poller per portal and portal cache 2017-10-06 17:00:45 -04:00
acceptor.h iscsi: login poller per portal and portal cache 2017-10-06 17:00:45 -04:00
conn.c iscsi: Load balancing of iSCSI target is not working 2017-11-15 13:25:06 -05:00
conn.h iscsi: login poller per portal and portal cache 2017-10-06 17:00:45 -04:00
init_grp.c iscsi: turn <add/delete name&mask of IG> into functions 2017-11-03 14:08:47 -04:00
init_grp.h iscsi: delete spdk_iscsi_init_grp_destroy_by_tag() 2017-11-03 14:08:47 -04:00
iscsi_rpc.c iscsi: turn <add/delete name&mask of IG> into functions 2017-11-03 14:08:47 -04:00
iscsi_subsystem.c iscsi: cleanup iscsi_subsystem.c 2017-11-13 14:58:34 -05:00
iscsi.c iscsi: change the return value of ACL func to bool 2017-11-14 15:44:40 -05:00
iscsi.h iscsi: shutdown iscsi library as part of subsystem fini path 2017-11-13 14:57:49 -05:00
Makefile util: add CRC32 utility functions 2017-08-02 19:47:35 -04:00
md5.c include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
md5.h include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
param.c iscsi: remove global data members for non-configurable parameters 2017-11-03 12:18:02 -04:00
param.h include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
portal_grp.c net&iscsi: force overwrite "*" and "[*]" by wildcard 2017-11-14 15:44:40 -05:00
portal_grp.h iscsi: login poller per portal and portal cache 2017-10-06 17:00:45 -04:00
task.c scsi: Remove cb_event. It is no longer necessary. 2017-06-22 10:47:31 -04:00
task.h iscsi: change iscsi_bhs_scsi_req variable names. 2017-07-18 13:14:16 -04:00
tgt_node.c iscsi: change the return value of ACL func to bool 2017-11-14 15:44:40 -05:00
tgt_node.h iscsi: change the return value of ACL func to bool 2017-11-14 15:44:40 -05:00