add proc_dointvec_bool sysctl handler
PATCH 2/5 add proc_dointvec_bool sysctl handler
Add proc_dointvec_bool sysctl handler for cases value is limited to 0 and 1
Signed-off-by Dave Young <[email protected]>
--- include/linux/sysctl.h | 2 ++ kernel/sysctl.c | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
kernel/sysctl.c +27 -0
@@ -2448,6 +2448,33 @@ int proc_dointvec_minmax(struct ctl_tabl do_proc_dointvec_minmax_conv, ¶m); } +/** +* proc_dointvec_bool - read a vector of integers with 0/1 values +* @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. +* +* This routine will ensure the values are either 0 or 1. +* +* Returns 0 on success. +*/ +int proc_dointvec_bool (struct ctl_table *table,int write, +void __user *buffer,size_t *lenp,loff_t *ppos) +{ +struct do_proc_dointvec_minmax_conv_param param = { + .min = &zero, + .max = &one, + }; +return do_proc_dointvec (table, write, buffer, lenp, ppos, + do_proc_dointvec_minmax_conv, ¶m); +} +EXPORT_SYMBOL (proc_dointvec_bool); + static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos,
include/linux/sysctl.h +2 -0
@@ -970,6 +970,8 @@ extern int proc_dointvec(struct ctl_tabl void __user *, size_t *, loff_t *);extern int proc_dointvec_minmax (struct ctl_table *,int ,void __user *,size_t *,loff_t *); +extern int proc_dointvec_bool (struct ctl_table *,int , +void __user *,size_t *,loff_t *);extern int proc_dointvec_jiffies (struct ctl_table *,int ,void __user *,size_t *,loff_t *); extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int,