linux-provide-sysctl-interface-20020206
authorKris Van Hees <aedil@sinenomine.net>
Thu, 7 Feb 2002 00:06:35 +0000 (00:06 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 7 Feb 2002 00:06:35 +0000 (00:06 +0000)
provide sysctl interface for toggling module state. provide hooks for
all currently known tweakable items

src/afs/LINUX/osi_module.c
src/afs/LINUX/osi_sysctl.c [new file with mode: 0644]
src/libafs/MakefileProto.LINUX.in

index 928e20c..bf7c9bb 100644 (file)
@@ -276,6 +276,8 @@ int init_module(void)
 # endif
 #endif /* AFS_IA64_LINUX20_ENV */
 
+    osi_sysctl_init();
+
     return 0;
 }
 
@@ -287,6 +289,8 @@ void cleanup_module(void)
 {
     struct task_struct *t;
 
+    osi_sysctl_clean();
+
 #if defined(AFS_IA64_LINUX20_ENV)
     sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL ((struct fptr *) sys_setgroupsp)->ip;
     sys_call_table[__NR_afs_syscall - 1024] = afs_ni_syscall;
diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c
new file mode 100644 (file)
index 0000000..af4bef2
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * osi_sysctl.c: Linux sysctl interface to OpenAFS
+ *
+ * $Id$
+ *
+ * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates)
+ */
+
+#include <linux/sysctl.h>
+#include <linux/config.h>
+
+#include <afsconfig.h>
+#include "../afs/param.h"
+
+#include "../afs/sysincludes.h"        /* Standard vendor system headers */
+#include "../afs/afsincludes.h"        /* Afs-based standard headers */
+#include "../afs/afs_stats.h"   /* afs statistics */
+
+/* From afs_analyze.c */
+extern afs_int32 hm_retry_RO;
+extern afs_int32 hm_retry_RW;
+extern afs_int32 hm_retry_int;
+
+#ifdef CONFIG_SYSCTL
+static struct ctl_table_header *afs_sysctl = NULL;
+
+static ctl_table afs_sysctl_table[] = {
+        {1, "hm_retry_RO",
+         &hm_retry_RO, sizeof(afs_int32), 0644, NULL,
+         &proc_dointvec},
+        {2, "hm_retry_RW",
+         &hm_retry_RW, sizeof(afs_int32), 0644, NULL,
+         &proc_dointvec},
+        {3, "hm_retry_int",
+         &hm_retry_int, sizeof(afs_int32), 0644, NULL,
+         &proc_dointvec},
+       {0}
+};
+
+static ctl_table fs_sysctl_table[] = {
+       {1, "afs", NULL, 0, 0555, afs_sysctl_table},
+       {0}
+};
+
+int osi_sysctl_init()
+{
+       afs_sysctl = register_sysctl_table(fs_sysctl_table, 0);
+       if (!afs_sysctl)
+               return -1;
+
+       return 0;
+}
+
+void osi_sysctl_clean()
+{
+       if (afs_sysctl) {
+               unregister_sysctl_table(afs_sysctl);
+               afs_sysctl = NULL;
+       }
+}
+
+#endif /* CONFIG_SYSCTL */
index be1c6ab..27455e2 100644 (file)
@@ -19,6 +19,7 @@ AFS_OS_OBJS = \
        osi_misc.o \
        osi_module.o \
        osi_sleep.o \
+       osi_sysctl.o \
        osi_vfsops.o \
        osi_vm.o \
        osi_vnodeops.o \
@@ -253,6 +254,8 @@ osi_module.o: $(AFS)/osi_module.c
        $(CRULE1)
 osi_sleep.o: $(AFS)/osi_sleep.c
        $(CRULE1)
+osi_sysctl.o: $(AFS)/osi_sysctl.c
+       $(CRULE1)
 osi_vfsops.o: $(AFS)/osi_vfsops.c
        $(CRULE1)
 osi_vm.o: $(AFS)/osi_vm.c