mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
mlxsw: spectrum_router: Increase scale of IPv6 nexthop groups
Unlike IPv4, the kernel does not consolidate IPv6 nexthop groups. To avoid exhausting the device's adjacency table - where nexthops are stored - the driver does this consolidation instead. Each nexthop group is hashed by XOR-ing the interface indexes of all the member nexthop devices. However, the ifindex itself is not hashed, which can result in identical keys used for different groups and finally an -EBUSY error from rhashtable due to too long objects list. Improve the situation by hashing the ifindex itself. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b06689cc1b
commit
fc25996e6f
@ -2943,7 +2943,7 @@ static u32 mlxsw_sp_nexthop_group_hash_obj(const void *data, u32 len, u32 seed)
|
||||
val = nh_grp->count;
|
||||
for (i = 0; i < nh_grp->count; i++) {
|
||||
nh = &nh_grp->nexthops[i];
|
||||
val ^= nh->ifindex;
|
||||
val ^= jhash(&nh->ifindex, sizeof(nh->ifindex), seed);
|
||||
}
|
||||
return jhash(&val, sizeof(val), seed);
|
||||
default:
|
||||
@ -2961,7 +2961,7 @@ mlxsw_sp_nexthop6_group_hash(struct mlxsw_sp_fib6_entry *fib6_entry, u32 seed)
|
||||
|
||||
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
|
||||
dev = mlxsw_sp_rt6->rt->fib6_nh->fib_nh_dev;
|
||||
val ^= dev->ifindex;
|
||||
val ^= jhash(&dev->ifindex, sizeof(dev->ifindex), seed);
|
||||
}
|
||||
|
||||
return jhash(&val, sizeof(val), seed);
|
||||
|
Loading…
Reference in New Issue
Block a user