|
@@ -484,9 +484,10 @@ static void __net_exit rds_tcp_exit_net(struct net *net)
|
|
|
* we do need to clean up the listen socket here.
|
|
|
*/
|
|
|
if (rtn->rds_tcp_listen_sock) {
|
|
|
- rds_tcp_listen_stop(rtn->rds_tcp_listen_sock);
|
|
|
+ struct socket *lsock = rtn->rds_tcp_listen_sock;
|
|
|
+
|
|
|
rtn->rds_tcp_listen_sock = NULL;
|
|
|
- flush_work(&rtn->rds_tcp_accept_w);
|
|
|
+ rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -523,10 +524,10 @@ static void rds_tcp_kill_sock(struct net *net)
|
|
|
struct rds_tcp_connection *tc, *_tc;
|
|
|
LIST_HEAD(tmp_list);
|
|
|
struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid);
|
|
|
+ struct socket *lsock = rtn->rds_tcp_listen_sock;
|
|
|
|
|
|
- rds_tcp_listen_stop(rtn->rds_tcp_listen_sock);
|
|
|
rtn->rds_tcp_listen_sock = NULL;
|
|
|
- flush_work(&rtn->rds_tcp_accept_w);
|
|
|
+ rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w);
|
|
|
spin_lock_irq(&rds_tcp_conn_lock);
|
|
|
list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) {
|
|
|
struct net *c_net = tc->t_cpath->cp_conn->c_net;
|
|
@@ -546,8 +547,12 @@ static void rds_tcp_kill_sock(struct net *net)
|
|
|
void *rds_tcp_listen_sock_def_readable(struct net *net)
|
|
|
{
|
|
|
struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid);
|
|
|
+ struct socket *lsock = rtn->rds_tcp_listen_sock;
|
|
|
+
|
|
|
+ if (!lsock)
|
|
|
+ return NULL;
|
|
|
|
|
|
- return rtn->rds_tcp_listen_sock->sk->sk_user_data;
|
|
|
+ return lsock->sk->sk_user_data;
|
|
|
}
|
|
|
|
|
|
static int rds_tcp_dev_event(struct notifier_block *this,
|