aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorMenglong Dong <imagedong@tencent.com>2022-03-04 14:00:43 +0800
committerDavid S. Miller <davem@davemloft.net>2022-03-04 12:17:11 +0000
commit44f0bd40803c0e04f1c8cd59df3c7acce783ae9c (patch)
tree3cd93d933de81e188ba8fd4589011b70ad88f891 /net/core/dev.c
parentnet: dev: add skb drop reasons to __dev_xmit_skb() (diff)
downloadlinux-dev-44f0bd40803c0e04f1c8cd59df3c7acce783ae9c.tar.xz
linux-dev-44f0bd40803c0e04f1c8cd59df3c7acce783ae9c.zip
net: dev: use kfree_skb_reason() for enqueue_to_backlog()
Replace kfree_skb() used in enqueue_to_backlog() with kfree_skb_reason(). The skb rop reason SKB_DROP_REASON_CPU_BACKLOG is introduced for the case of failing to enqueue the skb to the per CPU backlog queue. The further reason can be backlog queue full or RPS flow limition, and I think we needn't to make further distinctions. Signed-off-by: Menglong Dong <imagedong@tencent.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index e2c107643ee5..460ac941a631 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4570,10 +4570,12 @@ static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
static int enqueue_to_backlog(struct sk_buff *skb, int cpu,
unsigned int *qtail)
{
+ enum skb_drop_reason reason;
struct softnet_data *sd;
unsigned long flags;
unsigned int qlen;
+ reason = SKB_DROP_REASON_NOT_SPECIFIED;
sd = &per_cpu(softnet_data, cpu);
rps_lock_irqsave(sd, &flags);
@@ -4596,13 +4598,14 @@ enqueue:
napi_schedule_rps(sd);
goto enqueue;
}
+ reason = SKB_DROP_REASON_CPU_BACKLOG;
drop:
sd->dropped++;
rps_unlock_irq_restore(sd, &flags);
atomic_long_inc(&skb->dev->rx_dropped);
- kfree_skb(skb);
+ kfree_skb_reason(skb, reason);
return NET_RX_DROP;
}