|
@@ -7,7 +7,6 @@
|
|
* applicable with RoCE-cards only
|
|
* applicable with RoCE-cards only
|
|
*
|
|
*
|
|
* Initial restrictions:
|
|
* Initial restrictions:
|
|
- * - non-blocking connect postponed
|
|
|
|
* - IPv6 support postponed
|
|
* - IPv6 support postponed
|
|
* - support for alternate links postponed
|
|
* - support for alternate links postponed
|
|
* - partial support for non-blocking sockets only
|
|
* - partial support for non-blocking sockets only
|
|
@@ -345,7 +344,6 @@ static void smc_lgr_forget(struct smc_link_group *lgr)
|
|
/* setup for RDMA connection of client */
|
|
/* setup for RDMA connection of client */
|
|
static int smc_connect_rdma(struct smc_sock *smc)
|
|
static int smc_connect_rdma(struct smc_sock *smc)
|
|
{
|
|
{
|
|
- struct sockaddr_in *inaddr = (struct sockaddr_in *)smc->addr;
|
|
|
|
struct smc_clc_msg_accept_confirm aclc;
|
|
struct smc_clc_msg_accept_confirm aclc;
|
|
int local_contact = SMC_FIRST_CONTACT;
|
|
int local_contact = SMC_FIRST_CONTACT;
|
|
struct smc_ib_device *smcibdev;
|
|
struct smc_ib_device *smcibdev;
|
|
@@ -399,8 +397,8 @@ static int smc_connect_rdma(struct smc_sock *smc)
|
|
|
|
|
|
srv_first_contact = aclc.hdr.flag;
|
|
srv_first_contact = aclc.hdr.flag;
|
|
mutex_lock(&smc_create_lgr_pending);
|
|
mutex_lock(&smc_create_lgr_pending);
|
|
- local_contact = smc_conn_create(smc, inaddr->sin_addr.s_addr, smcibdev,
|
|
|
|
- ibport, &aclc.lcl, srv_first_contact);
|
|
|
|
|
|
+ local_contact = smc_conn_create(smc, smcibdev, ibport, &aclc.lcl,
|
|
|
|
+ srv_first_contact);
|
|
if (local_contact < 0) {
|
|
if (local_contact < 0) {
|
|
rc = local_contact;
|
|
rc = local_contact;
|
|
if (rc == -ENOMEM)
|
|
if (rc == -ENOMEM)
|
|
@@ -518,7 +516,6 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr,
|
|
goto out_err;
|
|
goto out_err;
|
|
if (addr->sa_family != AF_INET)
|
|
if (addr->sa_family != AF_INET)
|
|
goto out_err;
|
|
goto out_err;
|
|
- smc->addr = addr; /* needed for nonblocking connect */
|
|
|
|
|
|
|
|
lock_sock(sk);
|
|
lock_sock(sk);
|
|
switch (sk->sk_state) {
|
|
switch (sk->sk_state) {
|
|
@@ -726,7 +723,6 @@ static void smc_listen_work(struct work_struct *work)
|
|
struct sock *newsmcsk = &new_smc->sk;
|
|
struct sock *newsmcsk = &new_smc->sk;
|
|
struct smc_clc_msg_proposal *pclc;
|
|
struct smc_clc_msg_proposal *pclc;
|
|
struct smc_ib_device *smcibdev;
|
|
struct smc_ib_device *smcibdev;
|
|
- struct sockaddr_in peeraddr;
|
|
|
|
u8 buf[SMC_CLC_MAX_LEN];
|
|
u8 buf[SMC_CLC_MAX_LEN];
|
|
struct smc_link *link;
|
|
struct smc_link *link;
|
|
int reason_code = 0;
|
|
int reason_code = 0;
|
|
@@ -782,13 +778,10 @@ static void smc_listen_work(struct work_struct *work)
|
|
goto decline_rdma;
|
|
goto decline_rdma;
|
|
}
|
|
}
|
|
|
|
|
|
- /* get address of the peer connected to the internal TCP socket */
|
|
|
|
- kernel_getpeername(newclcsock, (struct sockaddr *)&peeraddr);
|
|
|
|
-
|
|
|
|
/* allocate connection / link group */
|
|
/* allocate connection / link group */
|
|
mutex_lock(&smc_create_lgr_pending);
|
|
mutex_lock(&smc_create_lgr_pending);
|
|
- local_contact = smc_conn_create(new_smc, peeraddr.sin_addr.s_addr,
|
|
|
|
- smcibdev, ibport, &pclc->lcl, 0);
|
|
|
|
|
|
+ local_contact = smc_conn_create(new_smc, smcibdev, ibport, &pclc->lcl,
|
|
|
|
+ 0);
|
|
if (local_contact < 0) {
|
|
if (local_contact < 0) {
|
|
rc = local_contact;
|
|
rc = local_contact;
|
|
if (rc == -ENOMEM)
|
|
if (rc == -ENOMEM)
|