This is a bugfix for setkeycode() in /drivers/char/keyboard.c.
If we change a keycode the corresponding bit should be cleared if and
only if this keycode is not defined any longer. I believe that this
also was intended with the original code, but the implementation is
faulty.
First off all the first three changed lines are obviously erroneus:
oldkey == truekey is false or true, you do not need to inclose this in a
for(). I believe the author intended INPUT_KEYCODE(dev,i) == oldkey.
But fixing this alone is not enough.
If somebody wants to interchange the definition of two keys A and B, the
normal way is to use two setkeycode calls:
setkeycode (scancode A, keycode B);
setkeycode (scancode B, keycode A);
The old code does a clearbit(oldkey ..) call even in situations where
two keys have the same definition, and this situation arises commonly in
the situation mentioned above.