On Wed, 03 Dec 2014 15:41:21 +0300 Andrey Ryabinin <a.ryabinin@xxxxxxxxxxx> wrote:What about getting rid of "extra1" and "extra2" as well and replace it with "min" and "max"?
Use the 'unsigned long' type for 'zero' variable to fix this.Yeah, this is ghastly.
Changing type to 'unsigned long' shouldn't affect any other users
of this variable.
Reported-by: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
Fixes: ed4d4902ebdd ("mm, hugetlb: remove hugetlb_zero and hugetlb_infinity")
Signed-off-by: Andrey Ryabinin <a.ryabinin@xxxxxxxxxxx>
---
kernel/sysctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 15f2511..45c45c9 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -120,7 +120,7 @@ static int sixty = 60;
static int __maybe_unused neg_one = -1;
-static int zero;
+static unsigned long zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;
static int __maybe_unused four = 4;
Look at
{
.procname = "numa_balancing",
.data = NULL, /* filled in by handler */
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sysctl_numa_balancing,
.extra1 = &zero,
.extra2 = &one,
},
Now extra1 points at a long and extra2 points at an int.
sysctl_numa_balancing() calls proc_dointvec_minmax() and I think your
patch just broke big-endian 64-bit machines. "sched_autogroup_enabled"
breaks as well.
and change proc_dointvec_minmax() and a million other functions to takeAnother idea: why do we pass "int *" instead of "int"?
`union sysctl_payload *' arguments. But I haven't thought about it much.