Message ID | 4C76A856.2040202@candelatech.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index 4256727..5abf0c0 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c @@ -571,9 +571,15 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, rcu_read_lock_bh(); vlan = rcu_dereference(q->vlan); - if (vlan) - macvlan_start_xmit(skb, vlan->dev); - else + if (vlan) { + /* TODO: Deal with BUSY properly by somehow re-queuing + * skb for later transmit and let calling logic know it + * needs to back off for a short time. + */ + if (macvlan_start_xmit(skb, vlan->dev) == NETDEV_TX_BUSY) + goto free_skb; + } else +free_skb: kfree_skb(skb); rcu_read_unlock_bh();