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

Commit ef0002b5 authored by Krishna Kumar's avatar Krishna Kumar Committed by David S. Miller
Browse files

macvtap: Fix macvtap_get_queue to use rxhash first



It was reported that the macvtap device selects a
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 89efea25
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -175,6 +175,14 @@ static struct macvtap_queue *macvtap_get_queue(struct net_device *dev,
	if (!numvtaps)
	if (!numvtaps)
		goto out;
		goto out;


	/* Check if we can use flow to select a queue */
	rxq = skb_get_rxhash(skb);
	if (rxq) {
		tap = rcu_dereference(vlan->taps[rxq % numvtaps]);
		if (tap)
			goto out;
	}

	if (likely(skb_rx_queue_recorded(skb))) {
	if (likely(skb_rx_queue_recorded(skb))) {
		rxq = skb_get_rx_queue(skb);
		rxq = skb_get_rx_queue(skb);


@@ -186,14 +194,6 @@ static struct macvtap_queue *macvtap_get_queue(struct net_device *dev,
			goto out;
			goto out;
	}
	}


	/* Check if we can use flow to select a queue */
	rxq = skb_get_rxhash(skb);
	if (rxq) {
		tap = rcu_dereference(vlan->taps[rxq % numvtaps]);
		if (tap)
			goto out;
	}

	/* Everything failed - find first available queue */
	/* Everything failed - find first available queue */
	for (rxq = 0; rxq < MAX_MACVTAP_QUEUES; rxq++) {
	for (rxq = 0; rxq < MAX_MACVTAP_QUEUES; rxq++) {
		tap = rcu_dereference(vlan->taps[rxq]);
		tap = rcu_dereference(vlan->taps[rxq]);