SYSCTL: Print binary sysctl warnings (nearly) only once
authorAndi Kleen <ak@linux.intel.com>
Wed, 23 Dec 2009 20:00:20 +0000 (21:00 +0100)
committerAndi Kleen <ak@linux.intel.com>
Wed, 23 Dec 2009 20:00:20 +0000 (21:00 +0100)
commit4440095c8268c1a5e11577097d2be429cec036ca
tree7e1ca48bcd8fd0b947a7cc0edf31c0af9bbc4ec3
parentf42ecb2808db5386f983d593a7c08d3ea3b94a27
SYSCTL: Print binary sysctl warnings (nearly) only once

When printing legacy sysctls print the warning message
for each of them only once.  This way there is a guarantee
the syslog won't be flooded for any sane program.

The original attempt at this made the tables non const and stored
the flag inline.

Linus suggested using a separate hash table for this, this is based on a
code snippet from him.

The hash implies this is not exact and can sometimes not print a
new sysctl due to a hash collision, but in practice this should not
be a problem

I used a FNV32 hash over the binary string with a 32byte bitmap. This
gives relatively little collisions when all the predefined binary sysctls
are hashed:

size 256
bucket
length      number
0:          [25]
1:          [67]
2:          [88]
3:          [47]
4:          [22]
5:          [6]
6:          [1]

The worst case is a single collision of 6 hash values.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
kernel/sysctl_binary.c