History

jhash: Update jhash_[321]words functions to use correct initval

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.

Alexander Duyck committed 11 years ago

Commit 2e7056c1 parent 5c5e0ad1 file · +11 −6Browse files

Unified · Split

include/linux/jhash.h+11−6
@@ -145,11 +145,11 @@ static inline u32 jhash2(const u32 *k, u32 length, u32 initval) · 144 unmodified lines
145}145}
146 146
147 147
148/* jhash_3words - hash exactly 3, 2 or 1 word(s) */148/* __jhash_nwords - hash exactly 3, 2 or 1 word(s) */
149static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)149static inline u32 __jhash_nwords(u32 a, u32 b, u32 c, u32 initval)
150{150{
151 a += JHASH_INITVAL;151 a += initval;
152 b += JHASH_INITVAL;152 b += initval;
153 c += initval;153 c += initval;
154 154
155 __jhash_final(a, b, c);155 __jhash_final(a, b, c);
@@ -157,14 +157,19 @@ static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval) · 1 unmodified line
157 return c;157 return c;
158}158}
159 159
160static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
161{
162 return __jhash_nwords(a, b, c, initval + JHASH_INITVAL + (3 << 2));
163}
164
160static inline u32 jhash_2words(u32 a, u32 b, u32 initval)165static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
161{166{
162 return jhash_3words(a, b, 0, initval);167 return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
163}168}
164 169
165static inline u32 jhash_1word(u32 a, u32 initval)170static inline u32 jhash_1word(u32 a, u32 initval)
166{171{
167 return jhash_3words(a, 0, 0, initval);172 return __jhash_nwords(a, 0, 0, initval + JHASH_INITVAL + (1 << 2));
168}173}
169 174
170#endif /* _LINUX_JHASH_H */175#endif /* _LINUX_JHASH_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t