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) |
