sctp: Move the percpu sockets counter out of sctp_proc_init
authorEric W. Biederman <ebiederm@xmission.com>
Mon, 6 Aug 2012 08:44:24 +0000 (08:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Aug 2012 06:17:26 +0000 (23:17 -0700)
The percpu sctp socket counter has nothing at all to do with the sctp
proc files, and having it in the wrong initialization is confusing,
and makes network namespace support a pain.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/protocol.c

index f20bd708e89cc1003e1e82a0bd4175a99f4ffbf4..48a5989c98ce748d1427711d61248540d3d3834b 100644 (file)
@@ -93,8 +93,6 @@ int sysctl_sctp_wmem[3];
 /* Set up the proc fs entry for the SCTP protocol. */
 static __init int sctp_proc_init(void)
 {
-       if (percpu_counter_init(&sctp_sockets_allocated, 0))
-               goto out_nomem;
 #ifdef CONFIG_PROC_FS
        if (!proc_net_sctp) {
                proc_net_sctp = proc_mkdir("sctp", init_net.proc_net);
@@ -125,12 +123,9 @@ out_snmp_proc_init:
                remove_proc_entry("sctp", init_net.proc_net);
        }
 out_free_percpu:
-       percpu_counter_destroy(&sctp_sockets_allocated);
 #else
        return 0;
 #endif /* CONFIG_PROC_FS */
-
-out_nomem:
        return -ENOMEM;
 }
 
@@ -151,7 +146,6 @@ static void sctp_proc_exit(void)
                remove_proc_entry("sctp", init_net.proc_net);
        }
 #endif
-       percpu_counter_destroy(&sctp_sockets_allocated);
 }
 
 /* Private helper to extract ipv4 address and stash them in
@@ -1261,6 +1255,10 @@ SCTP_STATIC __init int sctp_init(void)
        if (status)
                goto err_init_mibs;
 
+       status = percpu_counter_init(&sctp_sockets_allocated, 0);
+       if (status)
+               goto err_percpu_counter_init;
+
        /* Initialize proc fs directory.  */
        status = sctp_proc_init();
        if (status)
@@ -1481,6 +1479,8 @@ err_ahash_alloc:
        sctp_dbg_objcnt_exit();
        sctp_proc_exit();
 err_init_proc:
+       percpu_counter_destroy(&sctp_sockets_allocated);
+err_percpu_counter_init:
        cleanup_sctp_mibs();
 err_init_mibs:
        kmem_cache_destroy(sctp_chunk_cachep);
@@ -1521,6 +1521,7 @@ SCTP_STATIC __exit void sctp_exit(void)
                             sizeof(struct sctp_bind_hashbucket)));
 
        sctp_dbg_objcnt_exit();
+       percpu_counter_destroy(&sctp_sockets_allocated);
        sctp_proc_exit();
        cleanup_sctp_mibs();