]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
jhash: Update jhash_[321]words functions to use correct initval
authorAlexander Duyck <alexander.h.duyck@redhat.com>
Tue, 31 Mar 2015 21:19:10 +0000 (14:19 -0700)
committerZefan Li <lizefan@huawei.com>
Fri, 18 Sep 2015 01:20:27 +0000 (09:20 +0800)
commitae3668ffeb437e04d7f085ad8f97ce383852ab7c
tree72e138ab0ae59fdcdc4cdd67df38bb043a57456a
parent90b3fc7daf325f7d5b10301562ac2708839cacc7
jhash: Update jhash_[321]words functions to use correct initval

commit 2e7056c433216f406b90a003aa0ba42e19d3bdcf upstream.

Looking over the implementation for jhash2 and comparing it to jhash_3words
I realized that the two hashes were in fact very different.  Doing a bit of
digging led me to "The new jhash implementation" in which lookup2 was
supposed to have been replaced with lookup3.

In reviewing the patch I noticed that jhash2 had originally initialized a
and b to JHASH_GOLDENRATIO and c to initval, but after the patch a, b, and
c were initialized to initval + (length << 2) + JHASH_INITVAL.  However the
changes in jhash_3words simply replaced the initialization of a and b with
JHASH_INITVAL.

This change corrects what I believe was an oversight so that a, b, and c in
jhash_3words all have the same value added consisting of initval + (length
<< 2) + JHASH_INITVAL so that jhash2 and jhash_3words will now produce the
same hash result given the same inputs.

Fixes: 60d509c823cca ("The new jhash implementation")
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Zefan Li <lizefan@huawei.com>
include/linux/jhash.h