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

Commit 9a2a537a authored by David Ahern's avatar David Ahern Committed by David S. Miller
Browse files

net/ipv6: Make rt6_multipath_hash similar to fib_multipath_hash



Make rt6_multipath_hash more of a direct parallel to fib_multipath_hash
and reduce stack and overhead in the process: get_hash_from_flowi6 is
just a wrapper around __get_hash_from_flowi6 with another stack
allocation for flow_keys. Move setting the addresses, protocol and
label into rt6_multipath_hash and allow it to make the call to
flow_hash_from_keys.

Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
Reviewed-by: default avatarIdo Schimmel <idosch@mellanox.com>
Reviewed-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ec7127a5
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1833,15 +1833,21 @@ u32 rt6_multipath_hash(const struct flowi6 *fl6, const struct sk_buff *skb,
		       struct flow_keys *flkeys)
{
	struct flow_keys hash_keys;
	u32 mhash;

	if (skb) {
	memset(&hash_keys, 0, sizeof(hash_keys));
	hash_keys.control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
	if (skb) {
		ip6_multipath_l3_keys(skb, &hash_keys, flkeys);
		return flow_hash_from_keys(&hash_keys) >> 1;
	} else {
		hash_keys.addrs.v6addrs.src = fl6->saddr;
		hash_keys.addrs.v6addrs.dst = fl6->daddr;
		hash_keys.tags.flow_label = (__force u32)fl6->flowlabel;
		hash_keys.basic.ip_proto = fl6->flowi6_proto;
	}
	mhash = flow_hash_from_keys(&hash_keys);

	return get_hash_from_flowi6(fl6) >> 1;
	return mhash >> 1;
}

void ip6_route_input(struct sk_buff *skb)