X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=net%2Funix%2Fsysctl_net_unix.c;h=77513d7e35f2522251452754deaa4c1b949a2ed3;hb=1730554f253deb65fe5112c54b2f898d5318a328;hp=690ffa5d5bfbf5bd5e01e0bf0fa61ca263f68b10;hpb=1d6ae775d7a948c9575658eb41184fd2e506c0df;p=linux-2.6 diff --git a/net/unix/sysctl_net_unix.c b/net/unix/sysctl_net_unix.c index 690ffa5d5b..77513d7e35 100644 --- a/net/unix/sysctl_net_unix.c +++ b/net/unix/sysctl_net_unix.c @@ -18,7 +18,7 @@ static ctl_table unix_table[] = { { .ctl_name = NET_UNIX_MAX_DGRAM_QLEN, .procname = "max_dgram_qlen", - .data = &sysctl_unix_max_dgram_qlen, + .data = &init_net.unx.sysctl_max_dgram_qlen, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec @@ -26,35 +26,39 @@ static ctl_table unix_table[] = { { .ctl_name = 0 } }; -static ctl_table unix_net_table[] = { - { - .ctl_name = NET_UNIX, - .procname = "unix", - .mode = 0555, - .child = unix_table - }, - { .ctl_name = 0 } +static struct ctl_path unix_path[] = { + { .procname = "net", .ctl_name = CTL_NET, }, + { .procname = "unix", .ctl_name = NET_UNIX, }, + { }, }; -static ctl_table unix_root_table[] = { - { - .ctl_name = CTL_NET, - .procname = "net", - .mode = 0555, - .child = unix_net_table - }, - { .ctl_name = 0 } -}; +int unix_sysctl_register(struct net *net) +{ + struct ctl_table *table; -static struct ctl_table_header * unix_sysctl_header; + table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL); + if (table == NULL) + goto err_alloc; -void unix_sysctl_register(void) -{ - unix_sysctl_header = register_sysctl_table(unix_root_table, 0); + table[0].data = &net->unx.sysctl_max_dgram_qlen; + net->unx.ctl = register_net_sysctl_table(net, unix_path, table); + if (net->unx.ctl == NULL) + goto err_reg; + + return 0; + +err_reg: + kfree(table); +err_alloc: + return -ENOMEM; } -void unix_sysctl_unregister(void) +void unix_sysctl_unregister(struct net *net) { - unregister_sysctl_table(unix_sysctl_header); + struct ctl_table *table; + + table = net->unx.ctl->ctl_table_arg; + unregister_sysctl_table(net->unx.ctl); + kfree(table); }