Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc25996e authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller
Browse files

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: default avatarIdo Schimmel <idosch@mellanox.com>
Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b06689cc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);