linux-2626-updates-20080612
[openafs.git] / src / afs / LINUX / osi_sysctl.c
1 /*
2  * osi_sysctl.c: Linux sysctl interface to OpenAFS
3  *
4  * $Id$
5  *
6  * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates)
7  */
8
9 #include <afsconfig.h>
10 #include "afs/param.h"
11
12 #include "afs/sysincludes.h"    /* Standard vendor system headers */
13 #include "afsincludes.h"        /* Afs-based standard headers */
14 #include "afs/afs_stats.h"      /* afs statistics */
15
16 #include <linux/sysctl.h>
17 #ifdef CONFIG_H_EXISTS
18 #include <linux/config.h>
19 #endif
20
21 /* From afs_util.c */
22 extern afs_int32 afs_new_inum;
23
24 /* From afs_analyze.c */
25 extern afs_int32 hm_retry_RO;
26 extern afs_int32 hm_retry_RW;
27 extern afs_int32 hm_retry_int;
28 extern afs_int32 afs_blocksUsed_0;
29 extern afs_int32 afs_blocksUsed_1;
30 extern afs_int32 afs_blocksUsed_2;
31 extern afs_int32 afs_pct1;
32 extern afs_int32 afs_pct2;
33
34 #ifdef CONFIG_SYSCTL
35 static struct ctl_table_header *afs_sysctl = NULL;
36
37 static ctl_table afs_sysctl_table[] = {
38     {
39 #if defined(SYSCTL_TABLE_CHECKING)
40         .ctl_name       = CTL_UNNUMBERED, 
41 #else
42         .ctl_name       = 1, 
43 #endif
44         .procname       = "hm_retry_RO",
45         .data           = &hm_retry_RO, 
46         .maxlen         = sizeof(afs_int32), 
47         .mode           = 0644,
48         .proc_handler   = &proc_dointvec
49     },
50     {
51 #if defined(SYSCTL_TABLE_CHECKING)
52         .ctl_name       = CTL_UNNUMBERED, 
53 #else
54         .ctl_name       = 2, 
55 #endif
56         .procname       = "hm_retry_RW",
57         .data           = &hm_retry_RW,
58         .maxlen         = sizeof(afs_int32), 
59         .mode           = 0644,
60         .proc_handler   = &proc_dointvec
61     },
62     {
63 #if defined(SYSCTL_TABLE_CHECKING)
64         .ctl_name       = CTL_UNNUMBERED, 
65 #else
66         .ctl_name       = 3, 
67 #endif
68         .procname       = "hm_retry_int",
69         .data           = &hm_retry_int, 
70         .maxlen         = sizeof(afs_int32), 
71         .mode           = 0644,
72         .proc_handler   = &proc_dointvec
73     },
74     {
75 #if defined(SYSCTL_TABLE_CHECKING)
76         .ctl_name       = CTL_UNNUMBERED, 
77 #else
78         .ctl_name       = 4, 
79 #endif
80         .procname       = "GCPAGs",
81         .data           = &afs_gcpags, 
82         .maxlen         = sizeof(afs_int32), 
83         .mode           = 0644,
84         .proc_handler   = &proc_dointvec
85     },
86     {
87 #if defined(SYSCTL_TABLE_CHECKING)
88         .ctl_name       = CTL_UNNUMBERED, 
89 #else
90         .ctl_name       = 5, 
91 #endif
92         .procname       = "rx_deadtime",
93         .data           = &afs_rx_deadtime, 
94         .maxlen         = sizeof(afs_int32), 
95         .mode           = 0644,
96         .proc_handler   = &proc_dointvec
97     },
98     {
99 #if defined(SYSCTL_TABLE_CHECKING)
100         .ctl_name       = CTL_UNNUMBERED, 
101 #else
102         .ctl_name       = 6, 
103 #endif
104         .procname       = "bkVolPref",
105         .data           = &afs_bkvolpref, 
106         .maxlen         = sizeof(afs_int32), 
107         .mode           = 0644,
108         .proc_handler   = &proc_dointvec
109     },
110     {
111 #if defined(SYSCTL_TABLE_CHECKING)
112         .ctl_name       = CTL_UNNUMBERED, 
113 #else
114         .ctl_name       = 7, 
115 #endif
116         .procname       = "afs_blocksUsed",
117         .data           = &afs_blocksUsed,
118         .maxlen         = sizeof(afs_int32), 
119         .mode           = 0444,
120         .proc_handler   = &proc_dointvec
121     },
122     {
123 #if defined(SYSCTL_TABLE_CHECKING)
124         .ctl_name       = CTL_UNNUMBERED, 
125 #else
126         .ctl_name       = 8, 
127 #endif
128         .procname       = "afs_blocksUsed_0",
129         .data           = &afs_blocksUsed_0,
130         .maxlen         = sizeof(afs_int32),
131         .mode           = 0644,
132         .proc_handler   = &proc_dointvec
133     },
134     {
135 #if defined(SYSCTL_TABLE_CHECKING)
136         .ctl_name       = CTL_UNNUMBERED, 
137 #else
138         .ctl_name       = 9, 
139 #endif
140         .procname       = "afs_blocksUsed_1",
141         .data           = &afs_blocksUsed_1, 
142         .maxlen         = sizeof(afs_int32),
143         .mode           = 0644,
144         .proc_handler   = &proc_dointvec
145     },
146     {
147 #if defined(SYSCTL_TABLE_CHECKING)
148         .ctl_name       = CTL_UNNUMBERED, 
149 #else
150         .ctl_name       = 10, 
151 #endif
152         .procname       = "afs_blocksUsed_2",
153         .data           = &afs_blocksUsed_2, 
154         .maxlen         = sizeof(afs_int32), 
155         .mode           = 0644,
156         .proc_handler   = &proc_dointvec
157     },
158     {
159 #if defined(SYSCTL_TABLE_CHECKING)
160         .ctl_name       = CTL_UNNUMBERED, 
161 #else
162         .ctl_name       = 11, 
163 #endif
164         .procname       = "afs_pct1",
165         .data           = &afs_pct1, 
166         .maxlen         = sizeof(afs_int32),
167         .mode           = 0644,
168         .proc_handler   = &proc_dointvec
169     },
170     {
171 #if defined(SYSCTL_TABLE_CHECKING)
172         .ctl_name       = CTL_UNNUMBERED, 
173 #else
174         .ctl_name       = 12, 
175 #endif
176         .procname       = "afs_pct2",
177         .data           = &afs_pct2, 
178         .maxlen         = sizeof(afs_int32),
179         .mode           = 0644,
180         .proc_handler   = &proc_dointvec
181     },
182     {
183 #if defined(SYSCTL_TABLE_CHECKING)
184         .ctl_name       = CTL_UNNUMBERED, 
185 #else
186         .ctl_name       = 13,
187 #endif
188         .procname       = "afs_cacheBlocks",
189         .data           = &afs_cacheBlocks,
190         .maxlen         = sizeof(afs_int32),
191         .mode           = 0644,
192         .proc_handler   = &proc_dointvec
193     },
194     {
195 #if defined(SYSCTL_TABLE_CHECKING)
196         .ctl_name       = CTL_UNNUMBERED, 
197 #else
198         .ctl_name       = 14, 
199 #endif
200         .procname       = "md5inum",
201         .data           = &afs_new_inum, 
202         .maxlen         = sizeof(afs_int32),
203         .mode           = 0644,
204         .proc_handler   = &proc_dointvec
205     },
206     {0}
207 };
208
209 static ctl_table fs_sysctl_table[] = {
210     {
211 #if defined(SYSCTL_TABLE_CHECKING)
212         .ctl_name       = CTL_UNNUMBERED, 
213 #else
214         .ctl_name       = 1, 
215 #endif
216         .procname       = "afs", 
217         .mode           = 0555, 
218         .child          = afs_sysctl_table
219     },
220     {0}
221 };
222
223 int
224 osi_sysctl_init()
225 {
226 #if defined(REGISTER_SYSCTL_TABLE_NOFLAG)
227     afs_sysctl = register_sysctl_table(fs_sysctl_table);
228 #else
229     afs_sysctl = register_sysctl_table(fs_sysctl_table, 0);
230 #endif
231     if (!afs_sysctl)
232         return -1;
233
234     return 0;
235 }
236
237 void
238 osi_sysctl_clean()
239 {
240     if (afs_sysctl) {
241         unregister_sysctl_table(afs_sysctl);
242         afs_sysctl = NULL;
243     }
244 }
245
246 #endif /* CONFIG_SYSCTL */