@@ -1635,37 +1635,38 @@ static int __htab_map_lookup_and_delete_elem(struct bpf_map *map, void *key,
1635
1635
l = lookup_elem_raw (head , hash , key , key_size );
1636
1636
if (!l ) {
1637
1637
ret = - ENOENT ;
1638
- } else {
1639
- if (is_percpu ) {
1640
- u32 roundup_value_size = round_up (map -> value_size , 8 );
1641
- void __percpu * pptr ;
1642
- int off = 0 , cpu ;
1638
+ goto out_unlock ;
1639
+ }
1643
1640
1644
- pptr = htab_elem_get_ptr (l , key_size );
1645
- for_each_possible_cpu (cpu ) {
1646
- copy_map_value_long (& htab -> map , value + off , per_cpu_ptr (pptr , cpu ));
1647
- check_and_init_map_value (& htab -> map , value + off );
1648
- off += roundup_value_size ;
1649
- }
1650
- } else {
1651
- u32 roundup_key_size = round_up (map -> key_size , 8 );
1641
+ if (is_percpu ) {
1642
+ u32 roundup_value_size = round_up (map -> value_size , 8 );
1643
+ void __percpu * pptr ;
1644
+ int off = 0 , cpu ;
1652
1645
1653
- if (flags & BPF_F_LOCK )
1654
- copy_map_value_locked (map , value , l -> key +
1655
- roundup_key_size ,
1656
- true);
1657
- else
1658
- copy_map_value (map , value , l -> key +
1659
- roundup_key_size );
1660
- /* Zeroing special fields in the temp buffer */
1661
- check_and_init_map_value (map , value );
1646
+ pptr = htab_elem_get_ptr (l , key_size );
1647
+ for_each_possible_cpu (cpu ) {
1648
+ copy_map_value_long (& htab -> map , value + off , per_cpu_ptr (pptr , cpu ));
1649
+ check_and_init_map_value (& htab -> map , value + off );
1650
+ off += roundup_value_size ;
1662
1651
}
1652
+ } else {
1653
+ u32 roundup_key_size = round_up (map -> key_size , 8 );
1663
1654
1664
- hlist_nulls_del_rcu (& l -> hash_node );
1665
- if (!is_lru_map )
1666
- free_htab_elem (htab , l );
1655
+ if (flags & BPF_F_LOCK )
1656
+ copy_map_value_locked (map , value , l -> key +
1657
+ roundup_key_size ,
1658
+ true);
1659
+ else
1660
+ copy_map_value (map , value , l -> key +
1661
+ roundup_key_size );
1662
+ /* Zeroing special fields in the temp buffer */
1663
+ check_and_init_map_value (map , value );
1667
1664
}
1665
+ hlist_nulls_del_rcu (& l -> hash_node );
1666
+ if (!is_lru_map )
1667
+ free_htab_elem (htab , l );
1668
1668
1669
+ out_unlock :
1669
1670
htab_unlock_bucket (htab , b , hash , bflags );
1670
1671
1671
1672
if (is_lru_map && l )
0 commit comments