diff options
author | J. R. Okajima <hooanon05@yahoo.co.jp> | 2010-05-25 19:10:14 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-05-25 19:10:14 -0400 |
commit | 563b04671017ea00ba563ebeebdc36bce79b1b60 (patch) | |
tree | 02d6ea1c9a3ae42b10f328aa0b51740677456793 | |
parent | dd7496f217462a23a9a8a15b9925866eaad76e22 (diff) |
proc_dointvec: write a single value
The commit 00b7c3395aec3df43de5bd02a3c5a099ca51169f
"sysctl: refactor integer handling proc code"
modified the behaviour of writing to /proc.
Before the commit, write("1\n") to /proc/sys/kernel/printk succeeded. But
now it returns EINVAL.
This commit supports writing a single value to a multi-valued entry.
Signed-off-by: J. R. Okajima <hooanon05@yahoo.co.jp>
Reviewed-and-tested-by: WANG Cong <amwang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | kernel/sysctl.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b12583047757..f948f20f09cb 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -2253,6 +2253,8 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, | |||
2253 | if (write) { | 2253 | if (write) { |
2254 | left -= proc_skip_spaces(&kbuf); | 2254 | left -= proc_skip_spaces(&kbuf); |
2255 | 2255 | ||
2256 | if (!left) | ||
2257 | break; | ||
2256 | err = proc_get_long(&kbuf, &left, &lval, &neg, | 2258 | err = proc_get_long(&kbuf, &left, &lval, &neg, |
2257 | proc_wspace_sep, | 2259 | proc_wspace_sep, |
2258 | sizeof(proc_wspace_sep), NULL); | 2260 | sizeof(proc_wspace_sep), NULL); |
@@ -2279,7 +2281,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, | |||
2279 | 2281 | ||
2280 | if (!write && !first && left && !err) | 2282 | if (!write && !first && left && !err) |
2281 | err = proc_put_char(&buffer, &left, '\n'); | 2283 | err = proc_put_char(&buffer, &left, '\n'); |
2282 | if (write && !err) | 2284 | if (write && !err && left) |
2283 | left -= proc_skip_spaces(&kbuf); | 2285 | left -= proc_skip_spaces(&kbuf); |
2284 | free: | 2286 | free: |
2285 | if (write) { | 2287 | if (write) { |