[NET]: Avoid atomic xchg() for non-error case
[linux-2.6.git] / net / llc / sysctl_net_llc.c
1 /*
2  * sysctl_net_llc.c: sysctl interface to LLC net subsystem.
3  * 
4  * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
5  */
6
7 #include <linux/config.h>
8 #include <linux/mm.h>
9 #include <linux/init.h>
10 #include <linux/sysctl.h>
11 #include <net/llc.h>
12
13 #ifndef CONFIG_SYSCTL
14 #error This file should not be compiled without CONFIG_SYSCTL defined
15 #endif
16
17 static struct ctl_table llc2_timeout_table[] = {
18         {
19                 .ctl_name       = NET_LLC2_ACK_TIMEOUT,
20                 .procname       = "ack",
21                 .data           = &sysctl_llc2_ack_timeout,
22                 .maxlen         = sizeof(long),
23                 .mode           = 0644,
24                 .proc_handler   = &proc_dointvec_jiffies,
25                 .strategy       = &sysctl_jiffies,
26         },
27         {
28                 .ctl_name       = NET_LLC2_BUSY_TIMEOUT,
29                 .procname       = "busy",
30                 .data           = &sysctl_llc2_busy_timeout,
31                 .maxlen         = sizeof(long),
32                 .mode           = 0644,
33                 .proc_handler   = &proc_dointvec_jiffies,
34                 .strategy       = &sysctl_jiffies,
35         },
36         {
37                 .ctl_name       = NET_LLC2_P_TIMEOUT,
38                 .procname       = "p",
39                 .data           = &sysctl_llc2_p_timeout,
40                 .maxlen         = sizeof(long),
41                 .mode           = 0644,
42                 .proc_handler   = &proc_dointvec_jiffies,
43                 .strategy       = &sysctl_jiffies,
44         },
45         {
46                 .ctl_name       = NET_LLC2_REJ_TIMEOUT,
47                 .procname       = "rej",
48                 .data           = &sysctl_llc2_rej_timeout,
49                 .maxlen         = sizeof(long),
50                 .mode           = 0644,
51                 .proc_handler   = &proc_dointvec_jiffies,
52                 .strategy       = &sysctl_jiffies,
53         },
54         { 0 },
55 };
56
57 static struct ctl_table llc_station_table[] = {
58         {
59                 .ctl_name       = NET_LLC_STATION_ACK_TIMEOUT,
60                 .procname       = "ack_timeout",
61                 .data           = &sysctl_llc_station_ack_timeout,
62                 .maxlen         = sizeof(long),
63                 .mode           = 0644,
64                 .proc_handler   = &proc_dointvec_jiffies,
65                 .strategy       = &sysctl_jiffies,
66         },
67         { 0 },
68 };
69
70 static struct ctl_table llc2_dir_timeout_table[] = {
71         {
72                 .ctl_name       = NET_LLC2,
73                 .procname       = "timeout",
74                 .mode           = 0555,
75                 .child          = llc2_timeout_table,
76         },
77         { 0 },
78 };
79
80 static struct ctl_table llc_table[] = {
81         {
82                 .ctl_name       = NET_LLC2,
83                 .procname       = "llc2",
84                 .mode           = 0555,
85                 .child          = llc2_dir_timeout_table,
86         },
87         {
88                 .ctl_name       = NET_LLC_STATION,
89                 .procname       = "station",
90                 .mode           = 0555,
91                 .child          = llc_station_table,
92         },
93         { 0 },
94 };
95
96 static struct ctl_table llc_dir_table[] = {
97         {
98                 .ctl_name       = NET_LLC,
99                 .procname       = "llc",
100                 .mode           = 0555,
101                 .child          = llc_table,
102         },
103         { 0 },
104 };
105
106 static struct ctl_table llc_root_table[] = {
107         {
108                 .ctl_name       = CTL_NET,
109                 .procname       = "net",
110                 .mode           = 0555,
111                 .child          = llc_dir_table,
112         },
113         { 0 },
114 };
115
116 static struct ctl_table_header *llc_table_header;
117
118 int __init llc_sysctl_init(void)
119 {
120         llc_table_header = register_sysctl_table(llc_root_table, 1);
121
122         return llc_table_header ? 0 : -ENOMEM;
123 }
124
125 void llc_sysctl_exit(void)
126 {
127         if (llc_table_header) {
128                 unregister_sysctl_table(llc_table_header);
129                 llc_table_header = NULL;
130         }
131 }