mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-17 22:05:08 +00:00
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>
This commit is contained in:
parent
7faef0547f
commit
44f0bd4080
@ -399,6 +399,12 @@ enum skb_drop_reason {
|
||||
* outputting (failed to enqueue to
|
||||
* current qdisc)
|
||||
*/
|
||||
SKB_DROP_REASON_CPU_BACKLOG, /* failed to enqueue the skb to
|
||||
* the per CPU backlog queue. This
|
||||
* can be caused by backlog queue
|
||||
* full (see netdev_max_backlog in
|
||||
* net.rst) or RPS flow limit
|
||||
*/
|
||||
SKB_DROP_REASON_MAX,
|
||||
};
|
||||
|
||||
|
@ -47,6 +47,7 @@
|
||||
EM(SKB_DROP_REASON_NEIGH_DEAD, NEIGH_DEAD) \
|
||||
EM(SKB_DROP_REASON_TC_EGRESS, TC_EGRESS) \
|
||||
EM(SKB_DROP_REASON_QDISC_DROP, QDISC_DROP) \
|
||||
EM(SKB_DROP_REASON_CPU_BACKLOG, CPU_BACKLOG) \
|
||||
EMe(SKB_DROP_REASON_MAX, MAX)
|
||||
|
||||
#undef EM
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user