OSDN Git Service

IB/srp: Disallow duplicate RDMA/CM connections
authorBart Van Assche <bart.vanassche@wdc.com>
Fri, 16 Mar 2018 17:55:57 +0000 (10:55 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 19 Mar 2018 19:54:50 +0000 (13:54 -0600)
commitb470c154c600e427592df5237596ce0f33ce7d9f
tree33a92d11789f031dc8b7b8c406f1e857a7dc7033
parent61147f391a8b3bdde4c0a631dd132d85d00b90a0
IB/srp: Disallow duplicate RDMA/CM connections

According to the SRP standard the INITIATOR and TARGET PORT IDENTIFIER
fields from the login request specify the I_T nexus. Whether or not an
SRP target closes an existing connection for an I_T nexus when a login
request is received depends on the value of the MULTICHANNEL field in
the login request. The SRP initiator derives the value of the
INITIATOR and TARGET PORT IDENTIFIER fields from the .id_ext,
.ioc_guid, .initiator_ext .sgid members of the srp_target_port
structure. This means that the .rdma_cm.dst check must be removed from
srp_conn_unique(). This patch avoids that for target ports that have
multiple addresses, e.g. an IPv4 and an IPv6 address, and if a
connection is established to both target port addresses, that the
initiator logs in alternatingly every 10 seconds to the other target
port address. An SRP target must namely terminate all but one
connections for a given I_T nexus if the MULTICHANNEL field has not
been set in the login request.

Fixes: 19f313438c77 ("IB/srp: Add RDMA/CM support")
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/ulp/srp/ib_srp.c