diff options
Diffstat (limited to 'net/smc/af_smc.c')
-rw-r--r-- | net/smc/af_smc.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 80e2119f1c70..5fbaf1901571 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c | |||
@@ -127,6 +127,8 @@ static int smc_release(struct socket *sock) | |||
127 | smc = smc_sk(sk); | 127 | smc = smc_sk(sk); |
128 | 128 | ||
129 | /* cleanup for a dangling non-blocking connect */ | 129 | /* cleanup for a dangling non-blocking connect */ |
130 | if (smc->connect_info && sk->sk_state == SMC_INIT) | ||
131 | tcp_abort(smc->clcsock->sk, ECONNABORTED); | ||
130 | flush_work(&smc->connect_work); | 132 | flush_work(&smc->connect_work); |
131 | kfree(smc->connect_info); | 133 | kfree(smc->connect_info); |
132 | smc->connect_info = NULL; | 134 | smc->connect_info = NULL; |
@@ -547,7 +549,8 @@ static int smc_connect_rdma(struct smc_sock *smc, | |||
547 | 549 | ||
548 | mutex_lock(&smc_create_lgr_pending); | 550 | mutex_lock(&smc_create_lgr_pending); |
549 | local_contact = smc_conn_create(smc, false, aclc->hdr.flag, ibdev, | 551 | local_contact = smc_conn_create(smc, false, aclc->hdr.flag, ibdev, |
550 | ibport, &aclc->lcl, NULL, 0); | 552 | ibport, ntoh24(aclc->qpn), &aclc->lcl, |
553 | NULL, 0); | ||
551 | if (local_contact < 0) { | 554 | if (local_contact < 0) { |
552 | if (local_contact == -ENOMEM) | 555 | if (local_contact == -ENOMEM) |
553 | reason_code = SMC_CLC_DECL_MEM;/* insufficient memory*/ | 556 | reason_code = SMC_CLC_DECL_MEM;/* insufficient memory*/ |
@@ -618,7 +621,7 @@ static int smc_connect_ism(struct smc_sock *smc, | |||
618 | int rc = 0; | 621 | int rc = 0; |
619 | 622 | ||
620 | mutex_lock(&smc_create_lgr_pending); | 623 | mutex_lock(&smc_create_lgr_pending); |
621 | local_contact = smc_conn_create(smc, true, aclc->hdr.flag, NULL, 0, | 624 | local_contact = smc_conn_create(smc, true, aclc->hdr.flag, NULL, 0, 0, |
622 | NULL, ismdev, aclc->gid); | 625 | NULL, ismdev, aclc->gid); |
623 | if (local_contact < 0) | 626 | if (local_contact < 0) |
624 | return smc_connect_abort(smc, SMC_CLC_DECL_MEM, 0); | 627 | return smc_connect_abort(smc, SMC_CLC_DECL_MEM, 0); |
@@ -1083,7 +1086,7 @@ static int smc_listen_rdma_init(struct smc_sock *new_smc, | |||
1083 | int *local_contact) | 1086 | int *local_contact) |
1084 | { | 1087 | { |
1085 | /* allocate connection / link group */ | 1088 | /* allocate connection / link group */ |
1086 | *local_contact = smc_conn_create(new_smc, false, 0, ibdev, ibport, | 1089 | *local_contact = smc_conn_create(new_smc, false, 0, ibdev, ibport, 0, |
1087 | &pclc->lcl, NULL, 0); | 1090 | &pclc->lcl, NULL, 0); |
1088 | if (*local_contact < 0) { | 1091 | if (*local_contact < 0) { |
1089 | if (*local_contact == -ENOMEM) | 1092 | if (*local_contact == -ENOMEM) |
@@ -1107,7 +1110,7 @@ static int smc_listen_ism_init(struct smc_sock *new_smc, | |||
1107 | struct smc_clc_msg_smcd *pclc_smcd; | 1110 | struct smc_clc_msg_smcd *pclc_smcd; |
1108 | 1111 | ||
1109 | pclc_smcd = smc_get_clc_msg_smcd(pclc); | 1112 | pclc_smcd = smc_get_clc_msg_smcd(pclc); |
1110 | *local_contact = smc_conn_create(new_smc, true, 0, NULL, 0, NULL, | 1113 | *local_contact = smc_conn_create(new_smc, true, 0, NULL, 0, 0, NULL, |
1111 | ismdev, pclc_smcd->gid); | 1114 | ismdev, pclc_smcd->gid); |
1112 | if (*local_contact < 0) { | 1115 | if (*local_contact < 0) { |
1113 | if (*local_contact == -ENOMEM) | 1116 | if (*local_contact == -ENOMEM) |