From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753787AbcLKR4z (ORCPT ); Sun, 11 Dec 2016 12:56:55 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:54533 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753572AbcLKR4y (ORCPT ); Sun, 11 Dec 2016 12:56:54 -0500 Subject: Re: [PATCH v2 0/1] lockd: Change nsm_use_hostnames from bool to u32 To: Jia He , linux-nfs@vger.kernel.org References: <1481470609-31488-1-git-send-email-hejianet@gmail.com> Cc: "J. Bruce Fields" , Jeff Layton , Trond Myklebust , Anna Schumaker , linux-kernel@vger.kernel.org From: Pan Xinhui Date: Mon, 12 Dec 2016 01:56:46 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1481470609-31488-1-git-send-email-hejianet@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16121117-0012-0000-0000-0000037A57FB X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16121117-0013-0000-0000-00001A6F171A Message-Id: <4757a896-6eb8-9d9a-fde0-bb9caa6e541e@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-12-11_13:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1612110282 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2016/12/11 23:36, Jia He 写道: > 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. hi, Jia not only in BE system. :) Current code is just touching a wrong pointer. some tests based on yours u8 __read_mostly nsm_use_hostnames[4]={1,2,3,4}; // an arrary of u8, and [0] passed to ctl_table as data static struct ctl_table my_sysctl[] = { { .procname = "nsm_use_hostnames", .data = &nsm_use_hostnames[0],//u8, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, {} }; then run your tests and result will be root@ltcalpine2-lp13:~/linux/bench# cat /proc/sys/mysysctl/nsm_use_hostnames 67305985( This is 0x4030201, expected be 0x1) So your fix patch work around it. But I suggest we can support u8/u16, not only int/double int. thanks xinhui > > This patch changes the type definition of nsm_use_hostnames. > > The test case I used: > /***************************************************************/ > #include > #include > #include > > 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 +- > include/linux/lockd/lockd.h | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) >