Whamcloud - gitweb
2b677440c56248272a358f4bdf34278970ef2b89
[fs/lustre-release.git] / lustre / obdclass / sysctl.c
1 #include <linux/sched.h>
2 #include <linux/mm.h>
3 #include <linux/sysctl.h>
4 #include <linux/swapctl.h>
5 #include <linux/proc_fs.h>
6 #include <linux/malloc.h>
7 #include <linux/stat.h>
8 #include <linux/ctype.h>
9 #include <asm/bitops.h>
10 #include <asm/segment.h>
11 #include <asm/uaccess.h>
12 #include <linux/utsname.h>
13
14 #include <linux/obd_support.h>
15
16 struct ctl_table_header *obd_table_header = NULL;
17
18 static int vars[2];
19 static int index = 0;
20
21 static int obd_sctl_vars( ctl_table * table, int write, struct file *
22                           filp, void * buffer, size_t * lenp );
23 static int obd_sctl_reset( ctl_table * table, int write, struct file
24                            * filp, void * buffer, size_t * lenp );
25
26
27
28 #define OBD_SYSCTL 1
29
30 #define OBD_DEBUG           1       /* control debugging */
31 #define OBD_ENTRY           2       /* control enter/leave pattern */
32 #define OBD_TIMEOUT         3       /* timeout on upcalls to become intrble */
33 #define OBD_HARD            4       /* mount type "hard" or "soft" */
34 #define OBD_VARS            5       
35 #define OBD_INDEX           6
36 #define OBD_RESET           7
37
38 #define OBD_VARS_SLOT       2
39
40 static ctl_table obd_table[] = {
41         {OBD_DEBUG, "debug", &obd_debug_level, sizeof(int), 0644, NULL, &proc_dointvec},
42         {OBD_ENTRY, "trace", &obd_print_entry, sizeof(int), 0644, NULL, &proc_dointvec},
43         {OBD_VARS, "vars", &vars[0], sizeof(int), 0644, NULL, &proc_dointvec},
44         {OBD_INDEX, "index", &index, sizeof(int), 0644, NULL, &obd_sctl_vars},
45         {OBD_RESET, "reset", NULL, 0, 0644, NULL, &obd_sctl_reset},
46         { 0 }
47 };
48
49 #if 0
50 static ctl_table jukebox_table[] = {
51        {OBD_SYSCTL, "obd",    NULL, 0, 0555, obd_table},
52        {0}
53 };
54
55 #endif
56 void obd_sysctl_init (void)
57 {
58 #ifdef CONFIG_SYSCTL
59         if ( !obd_table_header )
60                 obd_table_header = register_sysctl_table(jukebox_table, 0); 
61 #endif
62 }
63
64 void obd_sysctl_clean (void)
65 {
66 #ifdef CONFIG_SYSCTL
67         if ( obd_table_header )
68                 unregister_sysctl_table(obd_table_header);
69         obd_table_header = NULL;
70 #endif
71 }
72
73 int obd_sctl_reset (ctl_table * table, int write, 
74                     struct file * filp, void * buffer, 
75                     size_t * lenp)
76 {
77         if ( write ) {
78                 /* do something here */
79                 vars[0]=0;
80                 vars[1]=0;
81         }
82
83         *lenp = 0;
84         return 0;
85 }
86
87 int obd_sctl_vars (ctl_table * table, int write, 
88                    struct file * filp, void * buffer, 
89                    size_t * lenp)
90 {
91         int rc;
92
93         rc = proc_dointvec(table, write, filp, buffer, lenp);
94
95         if ( rc ) 
96                 return rc;
97
98         if ( index < 0 || index > 1 ) {
99                 printk("Index illegal!\n");
100                 index = 0;
101         } else {
102                 obd_table[OBD_VARS_SLOT].data = &vars[index];
103         }
104
105         return rc; 
106 }