void inet_twsk_deschedule_put(struct inet_timewait_sock *tw);
 
-void inet_twsk_purge(struct inet_hashinfo *hashinfo, int family);
-
 static inline
 struct net *twsk_net(const struct inet_timewait_sock *twsk)
 {
 
        inet_ctl_sock_destroy(pn->v4_ctl_sk);
 }
 
-static void __net_exit dccp_v4_exit_batch(struct list_head *net_exit_list)
-{
-       inet_twsk_purge(&dccp_hashinfo, AF_INET);
-}
-
 static struct pernet_operations dccp_v4_ops = {
        .init   = dccp_v4_init_net,
        .exit   = dccp_v4_exit_net,
-       .exit_batch = dccp_v4_exit_batch,
        .id     = &dccp_v4_pernet_id,
        .size   = sizeof(struct dccp_v4_pernet),
 };
 
        inet_ctl_sock_destroy(pn->v6_ctl_sk);
 }
 
-static void __net_exit dccp_v6_exit_batch(struct list_head *net_exit_list)
-{
-       inet_twsk_purge(&dccp_hashinfo, AF_INET6);
-}
-
 static struct pernet_operations dccp_v6_ops = {
        .init   = dccp_v6_init_net,
        .exit   = dccp_v6_exit_net,
-       .exit_batch = dccp_v6_exit_batch,
        .id     = &dccp_v6_pernet_id,
        .size   = sizeof(struct dccp_v6_pernet),
 };
 
        }
 }
 EXPORT_SYMBOL_GPL(__inet_twsk_schedule);
-
-void inet_twsk_purge(struct inet_hashinfo *hashinfo, int family)
-{
-       struct inet_timewait_sock *tw;
-       struct sock *sk;
-       struct hlist_nulls_node *node;
-       unsigned int slot;
-
-       for (slot = 0; slot <= hashinfo->ehash_mask; slot++) {
-               struct inet_ehash_bucket *head = &hashinfo->ehash[slot];
-restart_rcu:
-               cond_resched();
-               rcu_read_lock();
-restart:
-               sk_nulls_for_each_rcu(sk, node, &head->chain) {
-                       if (sk->sk_state != TCP_TIME_WAIT)
-                               continue;
-                       tw = inet_twsk(sk);
-                       if ((tw->tw_family != family) ||
-                               refcount_read(&twsk_net(tw)->ns.count))
-                               continue;
-
-                       if (unlikely(!refcount_inc_not_zero(&tw->tw_refcnt)))
-                               continue;
-
-                       if (unlikely((tw->tw_family != family) ||
-                                    refcount_read(&twsk_net(tw)->ns.count))) {
-                               inet_twsk_put(tw);
-                               goto restart;
-                       }
-
-                       rcu_read_unlock();
-                       local_bh_disable();
-                       inet_twsk_deschedule_put(tw);
-                       local_bh_enable();
-                       goto restart_rcu;
-               }
-               /* If the nulls value we got at the end of this lookup is
-                * not the expected one, we must restart lookup.
-                * We probably met an item that was moved to another chain.
-                */
-               if (get_nulls_value(node) != slot)
-                       goto restart;
-               rcu_read_unlock();
-       }
-}
-EXPORT_SYMBOL_GPL(inet_twsk_purge);
 
 {
        struct net *net;
 
-       inet_twsk_purge(&tcp_hashinfo, AF_INET);
-
        list_for_each_entry(net, net_exit_list, exit_list)
                tcp_fastopen_ctx_destroy(net);
 }
 
        inet_ctl_sock_destroy(net->ipv6.tcp_sk);
 }
 
-static void __net_exit tcpv6_net_exit_batch(struct list_head *net_exit_list)
-{
-       inet_twsk_purge(&tcp_hashinfo, AF_INET6);
-}
-
 static struct pernet_operations tcpv6_net_ops = {
        .init       = tcpv6_net_init,
        .exit       = tcpv6_net_exit,
-       .exit_batch = tcpv6_net_exit_batch,
 };
 
 int __init tcpv6_init(void)