Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1541660 > unrolled thread

[RESEND PATCH v4 0/2] change the proc handler for nsm_use_hostnames

Started byJia He <hejianet@gmail.com>
First post2016-12-14 03:50 +0100
Last post2016-12-14 10:20 +0100
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [RESEND PATCH v4 0/2] change the proc handler for nsm_use_hostnames Jia He <hejianet@gmail.com> - 2016-12-14 03:50 +0100
    [RESEND PATCH v4 2/2] lockd: change the proc_handler for nsm_use_hostnames Jia He <hejianet@gmail.com> - 2016-12-14 03:50 +0100
    [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool Jia He <hejianet@gmail.com> - 2016-12-14 04:00 +0100
      Re: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler  proc_dobool kbuild test robot <lkp@intel.com> - 2016-12-14 07:20 +0100
        Re: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler  proc_dobool hejianet <hejianet@gmail.com> - 2016-12-14 10:20 +0100

#1541660 — [RESEND PATCH v4 0/2] change the proc handler for nsm_use_hostnames

FromJia He <hejianet@gmail.com>
Date2016-12-14 03:50 +0100
Subject[RESEND PATCH v4 0/2] change the proc handler for nsm_use_hostnames
Message-ID<sO7NL-J9-9@gated-at.bofh.it>
Resend the v4 since I didn't add --to=linux-kernel@vger.kernel.org,sorry about
it

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 introduces a new proc handler proc_dobool for nsm_use_hostnames.

Changes:
v4: Change (u8 *) to (bool *)
v3: Introduce a new proc handler proc_dou8vec(suggested by Xinhui Pan)
v2: Change extern type in lockd.h

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 proc_dointvec to new handler proc_dou8vec with the
patch:
[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.
Already tested v4 in both of big and little endian(ppc64 and ppc64le)

Jia He (2):
  sysctl: introduce new proc handler proc_dobool
  lockd: change the proc_handler for nsm_use_hostnames

 fs/lockd/svc.c         |  2 +-
 include/linux/sysctl.h |  2 ++
 kernel/sysctl.c        | 35 +++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+), 1 deletion(-)

-- 
2.5.5

[toc] | [next] | [standalone]


#1541661 — [RESEND PATCH v4 2/2] lockd: change the proc_handler for nsm_use_hostnames

FromJia He <hejianet@gmail.com>
Date2016-12-14 03:50 +0100
Subject[RESEND PATCH v4 2/2] lockd: change the proc_handler for nsm_use_hostnames
Message-ID<sO7NL-J9-7@gated-at.bofh.it>
In reply to#1541660
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 use a new proc_handler proc_dobool.

Signed-off-by: Jia He <hejianet@gmail.com>
---
 fs/lockd/svc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index fc4084e..bd6fcf9 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -561,7 +561,7 @@ static struct ctl_table nlm_sysctls[] = {
 		.data		= &nsm_use_hostnames,
 		.maxlen		= sizeof(int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec,
+		.proc_handler	= proc_dobool,
 	},
 	{
 		.procname	= "nsm_local_state",
-- 
2.5.5

[toc] | [prev] | [next] | [standalone]


#1541663 — [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool

FromJia He <hejianet@gmail.com>
Date2016-12-14 04:00 +0100
Subject[RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool
Message-ID<sO7Xr-Mm-5@gated-at.bofh.it>
In reply to#1541660
This is to let bool variable could be correctly displayed in
big/little endian sysctl procfs.
sizeof(bool) is arch dependent, proc_dobool should work in all
arches.

Suggested-by: Pan Xinhui <xinhui@linux.vnet.ibm.com>
Signed-off-by: Jia He <hejianet@gmail.com>
---
 include/linux/sysctl.h |  2 ++
 kernel/sysctl.c        | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index adf4e51..255a9c7 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -41,6 +41,8 @@ typedef int proc_handler (struct ctl_table *ctl, int write,
 
 extern int proc_dostring(struct ctl_table *, int,
 			 void __user *, size_t *, loff_t *);
+extern int proc_dobool(struct ctl_table *, int,
+			void __user *, size_t *, loff_t *);
 extern int proc_dointvec(struct ctl_table *, int,
 			 void __user *, size_t *, loff_t *);
 extern int proc_douintvec(struct ctl_table *, int,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 706309f..69f93cd 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2112,6 +2112,20 @@ static int proc_put_char(void __user **buf, size_t *size, char c)
 	return 0;
 }
 
+static int do_proc_dobool_conv(bool *negp, unsigned long *lvalp,
+				int *valp,
+				int write, void *data)
+{
+	if (write)
+		*(bool *)valp = *lvalp;
+	else {
+		int val = *(bool *)valp;
+
+		*lvalp = (unsigned long)val;
+	}
+	return 0;
+}
+
 static int do_proc_dointvec_conv(bool *negp, unsigned long *lvalp,
 				 int *valp,
 				 int write, void *data)
@@ -2258,6 +2272,26 @@ static int do_proc_dointvec(struct ctl_table *table, int write,
 }
 
 /**
+ * proc_dobool - read/write a bool
+ * @table: the sysctl table
+ * @write: %TRUE if this is a write to the sysctl file
+ * @buffer: the user buffer
+ * @lenp: the size of the user buffer
+ * @ppos: file position
+ *
+ * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
+ * values from/to the user buffer, treated as an ASCII string.
+ *
+ * Returns 0 on success.
+ */
+int proc_dobool(struct ctl_table *table, int write,
+		void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+	return do_proc_dointvec(table, write, buffer, lenp, ppos,
+				do_proc_dobool_conv, NULL);
+}
+
+/**
  * proc_dointvec - read a vector of integers
  * @table: the sysctl table
  * @write: %TRUE if this is a write to the sysctl file
@@ -2941,6 +2975,7 @@ int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
  * No sense putting this after each symbol definition, twice,
  * exception granted :-)
  */
+EXPORT_SYMBOL(proc_dobool);
 EXPORT_SYMBOL(proc_dointvec);
 EXPORT_SYMBOL(proc_douintvec);
 EXPORT_SYMBOL(proc_dointvec_jiffies);
-- 
2.5.5

[toc] | [prev] | [next] | [standalone]


#1541715 — Re: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool

Fromkbuild test robot <lkp@intel.com>
Date2016-12-14 07:20 +0100
SubjectRe: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool
Message-ID<sOb50-2Zj-13@gated-at.bofh.it>
In reply to#1541663

[Multipart message — attachments visible in raw view] — view raw

Hi Jia,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.9 next-20161214]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Jia-He/sysctl-introduce-new-proc-handler-proc_dobool/20161214-112656
config: x86_64-randconfig-n0-12141159 (attached as .config)
compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

>> kernel/built-in.o:(___ksymtab+proc_dobool+0x0): undefined reference to `proc_dobool'

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[toc] | [prev] | [next] | [standalone]


#1541779 — Re: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool

Fromhejianet <hejianet@gmail.com>
Date2016-12-14 10:20 +0100
SubjectRe: [RESEND PATCH v4 1/2] sysctl: introduce new proc handler proc_dobool
Message-ID<sOdTc-4EN-13@gated-at.bofh.it>
In reply to#1541715
Thanks, this error is caused by

# CONFIG_PROC_SYSCTL is not set

Will fixed in next version

Jia

B.R.


On 12/14/16 2:13 PM, kbuild test robot wrote:
> Hi Jia,
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.9 next-20161214]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url:    https://github.com/0day-ci/linux/commits/Jia-He/sysctl-introduce-new-proc-handler-proc_dobool/20161214-112656
> config: x86_64-randconfig-n0-12141159 (attached as .config)
> compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
> reproduce:
>          # save the attached .config to linux build tree
>          make ARCH=x86_64
>
> All errors (new ones prefixed by >>):
>
>>> kernel/built-in.o:(___ksymtab+proc_dobool+0x0): undefined reference to `proc_dobool'
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web