summaryrefslogtreecommitdiff
path: root/drivers/net/xen-netback/netback.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2021-12-22 10:05:25 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2021-12-22 10:05:25 +0100
commit342cab29518f544fafe2d0a2a60398bdbda888b1 (patch)
tree9ffe48fbcd29fed14565a0f104f4cc39b62b327a /drivers/net/xen-netback/netback.c
parentaefe2278483e9ecad335d7349cbfa51d49981d12 (diff)
parent3d70a885819277a1c81c31f200059f35983911d1 (diff)
Merge 4.4.296 into android-4.4-p
Changes in 4.4.296 nfc: fix segfault in nfc_genl_dump_devices_done parisc/agp: Annotate parisc agp init functions with __init i2c: rk3x: Handle a spurious start completion interrupt flag net: netlink: af_netlink: Prevent empty skb by adding a check on len. hwmon: (dell-smm) Fix warning on /proc/i8k creation error mac80211: send ADDBA requests using the tid/queue of the aggregation session recordmcount.pl: look for jgnop instruction as well as bcrl on s390 dm btree remove: fix use after free in rebalance_children() nfsd: fix use-after-free due to delegation race soc/tegra: fuse: Fix bitwise vs. logical OR warning igbvf: fix double free in `igbvf_probe` USB: gadget: bRequestType is a bitfield, not a enum PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error USB: serial: option: add Telit FN990 compositions timekeeping: Really make sure wall_to_monotonic isn't positive net: systemport: Add global locking for descriptor lifecycle net: lan78xx: Avoid unnecessary self assignment ARM: 8805/2: remove unneeded naked function usage Input: touchscreen - avoid bitwise vs logical OR warning xen/blkfront: harden blkfront against event channel storms xen/netfront: harden netfront against event channel storms xen/console: harden hvc_xen against event channel storms xen/netback: don't queue unlimited number of packages Linux 4.4.296 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ic14e24f8aace34bee9cf82757fa4908dc5ac2c43
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r--drivers/net/xen-netback/netback.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 15c73ebe5efc..044478c9adad 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -189,11 +189,15 @@ void xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb)
spin_lock_irqsave(&queue->rx_queue.lock, flags);
- __skb_queue_tail(&queue->rx_queue, skb);
-
- queue->rx_queue_len += skb->len;
- if (queue->rx_queue_len > queue->rx_queue_max)
+ if (queue->rx_queue_len >= queue->rx_queue_max) {
netif_tx_stop_queue(netdev_get_tx_queue(queue->vif->dev, queue->id));
+ kfree_skb(skb);
+ queue->vif->dev->stats.rx_dropped++;
+ } else {
+ __skb_queue_tail(&queue->rx_queue, skb);
+
+ queue->rx_queue_len += skb->len;
+ }
spin_unlock_irqrestore(&queue->rx_queue.lock, flags);
}
@@ -243,6 +247,7 @@ static void xenvif_rx_queue_drop_expired(struct xenvif_queue *queue)
break;
xenvif_rx_dequeue(queue);
kfree_skb(skb);
+ queue->vif->dev->stats.rx_dropped++;
}
}