iser-target: Parallelize CM connection establishment
authorSagi Grimberg <sagig@mellanox.com>
Tue, 2 Dec 2014 14:57:21 +0000 (16:57 +0200)
committerJiri Slaby <jslaby@suse.cz>
Thu, 29 Jan 2015 14:44:50 +0000 (15:44 +0100)
commita64969e4418b1c13286b50bf912b5dab584aac1f
tree90c6fc04ea142fa4bf6a12fbb2d52beebeced515
parent3ebffafc28ea4ff4599429f02bdf1f1dfbb50c67
iser-target: Parallelize CM connection establishment

commit 2371e5da8cfe91443339b54444dec6254fdd6dfc upstream.

There is no point in accepting a new CM request only
when we are completely done with the last iscsi login.
Instead we accept immediately, this will also cause the
CM connection to reach connected state and the initiator
is allowed to send the first login. We mark that we got
the initial login and let iscsi layer pick it up when it
gets there.

This reduces the parallel login sequence by a factor of
more then 4 (and more for multi-login) and also prevents
the initiator (who does all logins in parallel) from
giving up on login timeout expiration.

In order to support multiple login requests sequence (CHAP)
we call isert_rx_login_req from isert_rx_completion insead
of letting isert_get_login_rx call it.

Squashed:

iser-target: Use kref_get_unless_zero in connected_handler
iser-target: Acquire conn_mutex when changing connection state
iser-target: Reject connect request in failure path

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/infiniband/ulp/isert/ib_isert.c
drivers/infiniband/ulp/isert/ib_isert.h