Messages in this thread | | | From | Jia He <> | Subject | [PATCH 0/1] lockd: Change nsm_use_hostnames from bool to u32 | Date | Sun, 11 Dec 2016 22:49:11 +0800 |
| |
nsm_use_hostnames is a module parameter and it will be exported to sysctl procfs. This is to let user sometimes change it from userspace. But the minimal unit for sysctl procfs read/write it sizeof(int). In big endian system, the converting from/to bool to/from int will cause error for proc items.
This patch changes the type definition of nsm_use_hostnames.
The test case I used: /***************************************************************/ #include <linux/kernel.h> #include <linux/module.h> #include <linux/sysctl.h>
bool __read_mostly nsm_use_hostnames; module_param(nsm_use_hostnames, bool, 0644);
static struct ctl_table my_sysctl[] = { { .procname = "nsm_use_hostnames", .data = &nsm_use_hostnames, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, {} };
static struct ctl_table my_root[] = { { .procname = "mysysctl", .mode = 0555, .child = my_sysctl, }, {} };
static struct ctl_table_header * my_ctl_header;
static int __init sysctl_exam_init(void) { my_ctl_header = register_sysctl_table(&my_root); if (my_ctl_header == NULL) printk("error regiester sysctl");
return 0; }
static void __exit sysctl_exam_exit(void) { unregister_sysctl_table(my_ctl_header); }
module_init(sysctl_exam_init); module_exit(sysctl_exam_exit); MODULE_LICENSE("GPL"); /****************************************************************/
[root@bigendian my]# insmod -f /root/my/hello.ko nsm_use_hostnames=1 [root@bigendian my]# cat /proc/sys/mysysctl/nsm_use_hostnames 16777216
After I change the bool to int: [root@bigendian my]# insmod -f /root/my/hello.ko nsm_use_hostnames=1 [root@bigendian my]# cat /proc/sys/mysysctl/nsm_use_hostnames 1
In little endian system, there is no such issue.
Jia He (1): lockd: Change nsm_use_hostnames from bool to u32
fs/lockd/mon.c | 2 +- fs/lockd/svc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
-- 2.5.5
| |