[PATCH] knfsd: export nsm_local_state to user space via sysctl
authorOlaf Kirch <okir@suse.de>
Wed, 4 Oct 2006 09:16:03 +0000 (02:16 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 4 Oct 2006 14:55:18 +0000 (07:55 -0700)
Every NLM call includes the client's NSM state.  Currently, the Linux client
always reports 0 - which seems not to cause any problems, but is not what the
protocol says.

This patch exposes the kernel's internal variable to user space via a sysctl,
which can be set at system boot time by statd.

Signed-off-by: Olaf Kirch <okir@suse.de>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/lockd/mon.c
fs/lockd/svc.c
include/linux/lockd/sm_inter.h

index 709cf7c..e0179f8 100644 (file)
@@ -24,7 +24,7 @@ static struct rpc_program     nsm_program;
 /*
  * Local NSM state
  */
-u32                            nsm_local_state;
+int                            nsm_local_state;
 
 /*
  * Common procedure for SM_MON/SM_UNMON calls
index a3b7602..6341392 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/sunrpc/svcsock.h>
 #include <net/ip.h>
 #include <linux/lockd/lockd.h>
+#include <linux/lockd/sm_inter.h>
 #include <linux/nfs.h>
 
 #define NLMDBG_FACILITY                NLMDBG_SVC
@@ -404,6 +405,14 @@ static ctl_table nlm_sysctls[] = {
                .mode           = 0644,
                .proc_handler   = &proc_dointvec,
        },
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "nsm_local_state",
+               .data           = &nsm_local_state,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec,
+       },
        { .ctl_name = 0 }
 };
 
index daef509..fc61d40 100644 (file)
@@ -42,6 +42,6 @@ struct nsm_res {
 
 int            nsm_monitor(struct nlm_host *);
 int            nsm_unmonitor(struct nlm_host *);
-extern u32     nsm_local_state;
+extern int     nsm_local_state;
 
 #endif /* LINUX_LOCKD_SM_INTER_H */