memcpy(l_new->key + round_up(key_size, 8), value, map->value_size);
 
        l_new->hash = htab_map_hash(l_new->key, key_size);
+       head = select_bucket(htab, l_new->hash);
 
        /* bpf_map_update_elem() can be called in_irq() */
        raw_spin_lock_irqsave(&htab->lock, flags);
 
-       head = select_bucket(htab, l_new->hash);
-
        l_old = lookup_elem_raw(head, l_new->hash, key, key_size);
 
        if (!l_old && unlikely(atomic_read(&htab->count) >= map->max_entries)) {
        key_size = map->key_size;
 
        hash = htab_map_hash(key, key_size);
+       head = select_bucket(htab, hash);
 
        raw_spin_lock_irqsave(&htab->lock, flags);
 
-       head = select_bucket(htab, hash);
-
        l = lookup_elem_raw(head, hash, key, key_size);
 
        if (l) {