OSDN Git Service

net/smc: fix link lookup for new rdma connections
authorKarsten Graul <kgraul@linux.ibm.com>
Sat, 18 Jul 2020 13:06:11 +0000 (15:06 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jul 2020 22:30:22 +0000 (15:30 -0700)
For new rdma connections the SMC server assigns the link and sends the
link data in the clc accept message. To match the correct link use not
only the qp_num but also the gid and the mac of the links. If there are
equal qp_nums for different links the wrong link would be chosen.

Reviewed-by: Ursula Braun <ubraun@linux.ibm.com>
Fixes: 0fb0b02bd6fd ("net/smc: adapt SMC client code to use the LLC flow")
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/af_smc.c

index 9033215..f805915 100644 (file)
@@ -632,7 +632,9 @@ static int smc_connect_rdma(struct smc_sock *smc,
                for (i = 0; i < SMC_LINKS_PER_LGR_MAX; i++) {
                        struct smc_link *l = &smc->conn.lgr->lnk[i];
 
-                       if (l->peer_qpn == ntoh24(aclc->qpn)) {
+                       if (l->peer_qpn == ntoh24(aclc->qpn) &&
+                           !memcmp(l->peer_gid, &aclc->lcl.gid, SMC_GID_SIZE) &&
+                           !memcmp(l->peer_mac, &aclc->lcl.mac, sizeof(l->peer_mac))) {
                                link = l;
                                break;
                        }