aboutsummaryrefslogtreecommitdiffstats
path: root/net/rds/tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rds/tcp.c')
-rw-r--r--net/rds/tcp.c25
1 files changed, 1 insertions, 24 deletions
diff --git a/net/rds/tcp.c b/net/rds/tcp.c
index 6b7ee71f40c6..222cc530e5b5 100644
--- a/net/rds/tcp.c
+++ b/net/rds/tcp.c
@@ -495,27 +495,6 @@ static struct pernet_operations rds_tcp_net_ops = {
495 .size = sizeof(struct rds_tcp_net), 495 .size = sizeof(struct rds_tcp_net),
496}; 496};
497 497
498/* explicitly send a RST on each socket, thereby releasing any socket refcnts
499 * that may otherwise hold up netns deletion.
500 */
501static void rds_tcp_conn_paths_destroy(struct rds_connection *conn)
502{
503 struct rds_conn_path *cp;
504 struct rds_tcp_connection *tc;
505 int i;
506 struct sock *sk;
507
508 for (i = 0; i < RDS_MPATH_WORKERS; i++) {
509 cp = &conn->c_path[i];
510 tc = cp->cp_transport_data;
511 if (!tc->t_sock)
512 continue;
513 sk = tc->t_sock->sk;
514 sk->sk_prot->disconnect(sk, 0);
515 tcp_done(sk);
516 }
517}
518
519static void rds_tcp_kill_sock(struct net *net) 498static void rds_tcp_kill_sock(struct net *net)
520{ 499{
521 struct rds_tcp_connection *tc, *_tc; 500 struct rds_tcp_connection *tc, *_tc;
@@ -535,10 +514,8 @@ static void rds_tcp_kill_sock(struct net *net)
535 list_move_tail(&tc->t_tcp_node, &tmp_list); 514 list_move_tail(&tc->t_tcp_node, &tmp_list);
536 } 515 }
537 spin_unlock_irq(&rds_tcp_conn_lock); 516 spin_unlock_irq(&rds_tcp_conn_lock);
538 list_for_each_entry_safe(tc, _tc, &tmp_list, t_tcp_node) { 517 list_for_each_entry_safe(tc, _tc, &tmp_list, t_tcp_node)
539 rds_tcp_conn_paths_destroy(tc->t_cpath->cp_conn);
540 rds_conn_destroy(tc->t_cpath->cp_conn); 518 rds_conn_destroy(tc->t_cpath->cp_conn);
541 }
542} 519}
543 520
544void *rds_tcp_listen_sock_def_readable(struct net *net) 521void *rds_tcp_listen_sock_def_readable(struct net *net)