• Johannes Berg's avatar
    rhashtable: don't attempt to grow when at max_size · 1d8dc3d3
    Johannes Berg authored
    The conversion of mac80211's station table to rhashtable had a bug
    that I found by accident in code review, that hadn't been found as
    rhashtable apparently managed to have a maximum hash chain length
    of one (!) in all our testing.
    
    In order to test the bug and verify the fix I set my rhashtable's
    max_size very low (4) in order to force getting hash collisions.
    
    At that point, rhashtable WARNed in rhashtable_insert_rehash() but
    didn't actually reject the hash table insertion. This caused it to
    lose insertions - my master list of stations would have 9 entries,
    but the rhashtable only had 5. This may warrant a deeper look, but
    that WARN_ON() just shouldn't happen.
    
    Fix this by not returning true from rht_grow_above_100() when the
    rhashtable's max_size has been reached - in this case the user is
    explicitly configuring it to be at most that big, so even if it's
    now above 100% it shouldn't attempt to resize.
    
    This fixes the "lost insertion" issue and consequently allows my
    code to display its error (and verify my fix for it.)
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Acked-by: default avatarThomas Graf <tgraf@suug.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1d8dc3d3
rhashtable.h 24.3 KB