aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/proto.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/dccp/proto.c')
-rw-r--r--net/dccp/proto.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index ed0bf58c8ae0..be0669242069 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -503,12 +503,16 @@ static int __init dccp_ctl_sock_init(void)
503 return rc; 503 return rc;
504} 504}
505 505
506static void __exit dccp_ctl_sock_exit(void) 506#ifdef CONFIG_IP_DCCP_UNLOAD_HACK
507void dccp_ctl_sock_exit(void)
507{ 508{
508 if (dccp_ctl_socket != NULL) 509 if (dccp_ctl_socket != NULL)
509 sock_release(dccp_ctl_socket); 510 sock_release(dccp_ctl_socket);
510} 511}
511 512
513EXPORT_SYMBOL_GPL(dccp_ctl_sock_exit);
514#endif
515
512static int __init init_dccp_v4_mibs(void) 516static int __init init_dccp_v4_mibs(void)
513{ 517{
514 int rc = -ENOMEM; 518 int rc = -ENOMEM;
@@ -655,19 +659,21 @@ static const char dccp_del_proto_err_msg[] __exitdata =
655 659
656static void __exit dccp_fini(void) 660static void __exit dccp_fini(void)
657{ 661{
658 dccp_ctl_sock_exit();
659
660 inet_unregister_protosw(&dccp_v4_protosw); 662 inet_unregister_protosw(&dccp_v4_protosw);
661 663
662 if (inet_del_protocol(&dccp_protocol, IPPROTO_DCCP) < 0) 664 if (inet_del_protocol(&dccp_protocol, IPPROTO_DCCP) < 0)
663 printk(dccp_del_proto_err_msg); 665 printk(dccp_del_proto_err_msg);
664 666
665 /* Free the control endpoint. */ 667 free_percpu(dccp_statistics[0]);
666 sock_release(dccp_ctl_socket); 668 free_percpu(dccp_statistics[1]);
667 669 free_pages((unsigned long)dccp_hashinfo.bhash,
668 proto_unregister(&dccp_v4_prot); 670 get_order(dccp_hashinfo.bhash_size *
669 671 sizeof(struct inet_bind_hashbucket)));
672 free_pages((unsigned long)dccp_hashinfo.ehash,
673 get_order(dccp_hashinfo.ehash_size *
674 sizeof(struct inet_ehash_bucket)));
670 kmem_cache_destroy(dccp_hashinfo.bind_bucket_cachep); 675 kmem_cache_destroy(dccp_hashinfo.bind_bucket_cachep);
676 proto_unregister(&dccp_v4_prot);
671} 677}
672 678
673module_init(dccp_init); 679module_init(dccp_init);