Messages in this thread | | | Date | Tue, 22 Sep 2015 00:25:38 +0200 | From | Thomas Graf <> | Subject | Re: [PATCH] lib: fix data race in rhashtable_rehash_one |
| |
On 09/21/15 at 07:51am, Eric Dumazet wrote: > The important part here is that we rehash an item, so we need to make > sure to maintain consistent ->next field, and need to prevent compiler > from using ->next as a temporary variable. > > ptr->next = 1UL | ((base + offset) << 1); > > Is dangerous because compiler could issue : > > ptr->next = (base + offset); > > ptr->next <<= 1; > > ptr->next += 1UL; > > Frankly, all this looks like an oversight in this code. > > Not sure why the NULLS value is even recomputed.
The hash of the chain is part of the NULLS value. Since the entry might have been moved to a different chain, the NULLS value must be recalculated to contain the proper hash.
However, nobody is using the hash today as far as I can see so we could as well just remove it and use the base value only for the nulls marker.
| |