The old_bucket's hash value like 0x***010 or 0x***110, the later is in the old_bucket is because we didn't have new_bucket before, so only hash value like 0x***110 needs relocation: hashvalue & (low_mask + 1) != 0
Thanks for explaining, that clarifies things for me.
It may be worthwhile to check if this change has led to any performance improvements.
One thing to note is that in this scenario, there is no safeguard if the hashvalue is 0x111 and new_bucket is 0x110. This means max_bucket is 0x110, but with your change, even 0x111 would meet the condition for relocation to the new bucket, which would be incorrect. Although it’s unlikely that 0x111 would be passed into this check, if it is passed, there is currently no check to prevent it from being relocated to the new bucket. In the current code, however, we do have such a check in place in calc_bucket, specifically: if (bucket > hctl->max_bucket)