diff options
Diffstat (limited to 'net/smc')
| -rw-r--r-- | net/smc/af_smc.c | 8 | ||||
| -rw-r--r-- | net/smc/smc_cdc.c | 2 | ||||
| -rw-r--r-- | net/smc/smc_close.c | 25 | ||||
| -rw-r--r-- | net/smc/smc_core.c | 3 | ||||
| -rw-r--r-- | net/smc/smc_llc.c | 2 | 
5 files changed, 10 insertions, 30 deletions
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index da1a5cdefd13..1e0d780855c3 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -978,10 +978,6 @@ out:  		lsmc->clcsock = NULL;  	}  	release_sock(lsk); -	/* no more listening, wake up smc_close_wait_listen_clcsock and -	 * accept -	 */ -	lsk->sk_state_change(lsk);  	sock_put(&lsmc->sk); /* sock_hold in smc_listen */  } @@ -1406,8 +1402,10 @@ static int smc_create(struct net *net, struct socket *sock, int protocol,  	smc->use_fallback = false; /* assume rdma capability first */  	rc = sock_create_kern(net, PF_INET, SOCK_STREAM,  			      IPPROTO_TCP, &smc->clcsock); -	if (rc) +	if (rc) {  		sk_common_release(sk); +		goto out; +	}  	smc->sk.sk_sndbuf = max(smc->clcsock->sk->sk_sndbuf, SMC_BUF_MIN_SIZE);  	smc->sk.sk_rcvbuf = max(smc->clcsock->sk->sk_rcvbuf, SMC_BUF_MIN_SIZE); diff --git a/net/smc/smc_cdc.c b/net/smc/smc_cdc.c index 3cd086e5bd28..b42395d24cba 100644 --- a/net/smc/smc_cdc.c +++ b/net/smc/smc_cdc.c @@ -269,7 +269,7 @@ static void smc_cdc_rx_handler(struct ib_wc *wc, void *buf)  	if (wc->byte_len < offsetof(struct smc_cdc_msg, reserved))  		return; /* short message */ -	if (cdc->len != sizeof(*cdc)) +	if (cdc->len != SMC_WR_TX_SIZE)  		return; /* invalid message */  	smc_cdc_msg_recv(cdc, link, wc->wr_id);  } diff --git a/net/smc/smc_close.c b/net/smc/smc_close.c index e339c0186dcf..fa41d9881741 100644 --- a/net/smc/smc_close.c +++ b/net/smc/smc_close.c @@ -30,27 +30,6 @@ static void smc_close_cleanup_listen(struct sock *parent)  		smc_close_non_accepted(sk);  } -static void smc_close_wait_listen_clcsock(struct smc_sock *smc) -{ -	DEFINE_WAIT_FUNC(wait, woken_wake_function); -	struct sock *sk = &smc->sk; -	signed long timeout; - -	timeout = SMC_CLOSE_WAIT_LISTEN_CLCSOCK_TIME; -	add_wait_queue(sk_sleep(sk), &wait); -	do { -		release_sock(sk); -		if (smc->clcsock) -			timeout = wait_woken(&wait, TASK_UNINTERRUPTIBLE, -					     timeout); -		sched_annotate_sleep(); -		lock_sock(sk); -		if (!smc->clcsock) -			break; -	} while (timeout); -	remove_wait_queue(sk_sleep(sk), &wait); -} -  /* wait for sndbuf data being transmitted */  static void smc_close_stream_wait(struct smc_sock *smc, long timeout)  { @@ -204,9 +183,11 @@ again:  			rc = kernel_sock_shutdown(smc->clcsock, SHUT_RDWR);  			/* wake up kernel_accept of smc_tcp_listen_worker */  			smc->clcsock->sk->sk_data_ready(smc->clcsock->sk); -			smc_close_wait_listen_clcsock(smc);  		}  		smc_close_cleanup_listen(sk); +		release_sock(sk); +		flush_work(&smc->tcp_listen_work); +		lock_sock(sk);  		break;  	case SMC_ACTIVE:  		smc_close_stream_wait(smc, timeout); diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index 2424c7100aaf..645dd226177b 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -177,6 +177,7 @@ static int smc_lgr_create(struct smc_sock *smc, __be32 peer_in_addr,  	lnk = &lgr->lnk[SMC_SINGLE_LINK];  	/* initialize link */ +	lnk->link_id = SMC_SINGLE_LINK;  	lnk->smcibdev = smcibdev;  	lnk->ibport = ibport;  	lnk->path_mtu = smcibdev->pattr[ibport - 1].active_mtu; @@ -465,7 +466,7 @@ create:  		rc = smc_link_determine_gid(conn->lgr);  	}  	conn->local_tx_ctrl.common.type = SMC_CDC_MSG_TYPE; -	conn->local_tx_ctrl.len = sizeof(struct smc_cdc_msg); +	conn->local_tx_ctrl.len = SMC_WR_TX_SIZE;  #ifndef KERNEL_HAS_ATOMIC64  	spin_lock_init(&conn->acurs_lock);  #endif diff --git a/net/smc/smc_llc.c b/net/smc/smc_llc.c index 92fe4cc8c82c..b4aa4fcedb96 100644 --- a/net/smc/smc_llc.c +++ b/net/smc/smc_llc.c @@ -92,7 +92,7 @@ int smc_llc_send_confirm_link(struct smc_link *link, u8 mac[],  	memcpy(confllc->sender_mac, mac, ETH_ALEN);  	memcpy(confllc->sender_gid, gid, SMC_GID_SIZE);  	hton24(confllc->sender_qp_num, link->roce_qp->qp_num); -	/* confllc->link_num = SMC_SINGLE_LINK; already done by memset above */ +	confllc->link_num = link->link_id;  	memcpy(confllc->link_uid, lgr->id, SMC_LGR_ID_SIZE);  	confllc->max_links = SMC_LINKS_PER_LGR_MAX;  	/* send llc message */  | 
