@@ -581,39 +581,32 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr,
581
581
582
582
static int smc_clcsock_accept (struct smc_sock * lsmc , struct smc_sock * * new_smc )
583
583
{
584
- struct sock * sk = & lsmc -> sk ;
585
- struct socket * new_clcsock ;
584
+ struct socket * new_clcsock = NULL ;
585
+ struct sock * lsk = & lsmc -> sk ;
586
586
struct sock * new_sk ;
587
587
int rc ;
588
588
589
- release_sock (& lsmc -> sk );
590
- new_sk = smc_sock_alloc (sock_net (sk ), NULL );
589
+ release_sock (lsk );
590
+ new_sk = smc_sock_alloc (sock_net (lsk ), NULL );
591
591
if (!new_sk ) {
592
592
rc = - ENOMEM ;
593
- lsmc -> sk . sk_err = ENOMEM ;
593
+ lsk -> sk_err = ENOMEM ;
594
594
* new_smc = NULL ;
595
- lock_sock (& lsmc -> sk );
595
+ lock_sock (lsk );
596
596
goto out ;
597
597
}
598
598
* new_smc = smc_sk (new_sk );
599
599
600
600
rc = kernel_accept (lsmc -> clcsock , & new_clcsock , 0 );
601
- lock_sock (& lsmc -> sk );
602
- if (rc < 0 ) {
603
- lsmc -> sk .sk_err = - rc ;
604
- new_sk -> sk_state = SMC_CLOSED ;
605
- sock_set_flag (new_sk , SOCK_DEAD );
606
- sk -> sk_prot -> unhash (new_sk );
607
- sock_put (new_sk );
608
- * new_smc = NULL ;
609
- goto out ;
610
- }
611
- if (lsmc -> sk .sk_state == SMC_CLOSED ) {
601
+ lock_sock (lsk );
602
+ if (rc < 0 )
603
+ lsk -> sk_err = - rc ;
604
+ if (rc < 0 || lsk -> sk_state == SMC_CLOSED ) {
612
605
if (new_clcsock )
613
606
sock_release (new_clcsock );
614
607
new_sk -> sk_state = SMC_CLOSED ;
615
608
sock_set_flag (new_sk , SOCK_DEAD );
616
- sk -> sk_prot -> unhash (new_sk );
609
+ new_sk -> sk_prot -> unhash (new_sk );
617
610
sock_put (new_sk );
618
611
* new_smc = NULL ;
619
612
goto out ;
@@ -936,11 +929,12 @@ static void smc_tcp_listen_work(struct work_struct *work)
936
929
{
937
930
struct smc_sock * lsmc = container_of (work , struct smc_sock ,
938
931
tcp_listen_work );
932
+ struct sock * lsk = & lsmc -> sk ;
939
933
struct smc_sock * new_smc ;
940
934
int rc = 0 ;
941
935
942
- lock_sock (& lsmc -> sk );
943
- while (lsmc -> sk . sk_state == SMC_LISTEN ) {
936
+ lock_sock (lsk );
937
+ while (lsk -> sk_state == SMC_LISTEN ) {
944
938
rc = smc_clcsock_accept (lsmc , & new_smc );
945
939
if (rc )
946
940
goto out ;
@@ -949,15 +943,15 @@ static void smc_tcp_listen_work(struct work_struct *work)
949
943
950
944
new_smc -> listen_smc = lsmc ;
951
945
new_smc -> use_fallback = false; /* assume rdma capability first*/
952
- sock_hold (& lsmc -> sk ); /* sock_put in smc_listen_work */
946
+ sock_hold (lsk ); /* sock_put in smc_listen_work */
953
947
INIT_WORK (& new_smc -> smc_listen_work , smc_listen_work );
954
948
smc_copy_sock_settings_to_smc (new_smc );
955
949
schedule_work (& new_smc -> smc_listen_work );
956
950
}
957
951
958
952
out :
959
- release_sock (& lsmc -> sk );
960
- lsmc -> sk . sk_data_ready (& lsmc -> sk ); /* no more listening, wake accept */
953
+ release_sock (lsk );
954
+ lsk -> sk_data_ready (lsk ); /* no more listening, wake accept */
961
955
}
962
956
963
957
static int smc_listen (struct socket * sock , int backlog )
0 commit comments