netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c
@ 2022-03-04  6:00 menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 1/7] net: dev: use kfree_skb_reason() for sch_handle_egress() menglong8.dong
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

In the commit c504e5c2f964 ("net: skb: introduce kfree_skb_reason()"),
we added the support of reporting the reasons of skb drops to kfree_skb
tracepoint. And in this series patches, reasons for skb drops are added
to the link layer, which means that 'net/core/dev.c' is our target.

Following functions are processed:

sch_handle_egress()
__dev_xmit_skb()
enqueue_to_backlog()
do_xdp_generic()
sch_handle_ingress()
__netif_receive_skb_core()

and following new drop reasons are added (what they mean can be see in
the document of them):

SKB_DROP_REASON_TC_EGRESS
SKB_DROP_REASON_QDISC_DROP
SKB_DROP_REASON_CPU_BACKLOG
SKB_DROP_REASON_XDP
SKB_DROP_REASON_TC_INGRESS
SKB_DROP_REASON_PTYPE_ABSENT

In order to add skb drop reasons to kfree_skb_list(), the function
kfree_skb_list_reason() is introduced in the 2th patch, which will be
used in __dev_xmit_skb() in the 3th patch.

Changes since v1:
- rename SKB_DROP_REASON_QDISC_EGRESS to SKB_DROP_REASON_TC_EGRESS in the
  1th patch
- remove the 'else' in the 4th patch
- rename SKB_DROP_REASON_QDISC_INGRESS to SKB_DROP_REASON_TC_INGRESS in
  the 6th patch

Menglong Dong (7):
  net: dev: use kfree_skb_reason() for sch_handle_egress()
  net: skb: introduce the function kfree_skb_list_reason()
  net: dev: add skb drop reasons to __dev_xmit_skb()
  net: dev: use kfree_skb_reason() for enqueue_to_backlog()
  net: dev: use kfree_skb_reason() for do_xdp_generic()
  net: dev: use kfree_skb_reason() for sch_handle_ingress()
  net: dev: use kfree_skb_reason() for __netif_receive_skb_core()

 include/linux/skbuff.h     | 26 +++++++++++++++++++++++++-
 include/trace/events/skb.h |  6 ++++++
 net/core/dev.c             | 24 +++++++++++++++---------
 net/core/skbuff.c          |  7 ++++---
 4 files changed, 50 insertions(+), 13 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 1/7] net: dev: use kfree_skb_reason() for sch_handle_egress()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 2/7] net: skb: introduce the function kfree_skb_list_reason() menglong8.dong
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

Replace kfree_skb() used in sch_handle_egress() with kfree_skb_reason().
The drop reason SKB_DROP_REASON_TC_EGRESS is introduced. Considering
the code path of tc egerss, we make it distinct with the drop reason
of SKB_DROP_REASON_QDISC_DROP in the next commit.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
v2:
- rename SKB_DROP_REASON_QDISC_EGRESS to SKB_DROP_REASON_TC_EGRESS
---
 include/linux/skbuff.h     | 1 +
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index d67941f78b92..4328dfc3281c 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -394,6 +394,7 @@ enum skb_drop_reason {
 						 * entry is full
 						 */
 	SKB_DROP_REASON_NEIGH_DEAD,	/* neigh entry is dead */
+	SKB_DROP_REASON_TC_EGRESS,	/* dropped in TC egress HOOK */
 	SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 1977f301260d..53755e8191a1 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -45,6 +45,7 @@
 	EM(SKB_DROP_REASON_NEIGH_FAILED, NEIGH_FAILED)		\
 	EM(SKB_DROP_REASON_NEIGH_QUEUEFULL, NEIGH_QUEUEFULL)	\
 	EM(SKB_DROP_REASON_NEIGH_DEAD, NEIGH_DEAD)		\
+	EM(SKB_DROP_REASON_TC_EGRESS, TC_EGRESS)		\
 	EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/core/dev.c b/net/core/dev.c
index 2d6771075720..353322e72a61 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3860,7 +3860,7 @@ sch_handle_egress(struct sk_buff *skb, int *ret, struct net_device *dev)
 	case TC_ACT_SHOT:
 		mini_qdisc_qstats_cpu_drop(miniq);
 		*ret = NET_XMIT_DROP;
-		kfree_skb(skb);
+		kfree_skb_reason(skb, SKB_DROP_REASON_TC_EGRESS);
 		return NULL;
 	case TC_ACT_STOLEN:
 	case TC_ACT_QUEUED:
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 2/7] net: skb: introduce the function kfree_skb_list_reason()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 1/7] net: dev: use kfree_skb_reason() for sch_handle_egress() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 3/7] net: dev: add skb drop reasons to __dev_xmit_skb() menglong8.dong
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

To report reasons of skb drops, introduce the function
kfree_skb_list_reason() and make kfree_skb_list() an inline call to
it. This function will be used in the next commit in
__dev_xmit_skb().

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
 include/linux/skbuff.h | 8 +++++++-
 net/core/skbuff.c      | 7 ++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 4328dfc3281c..9d219e266dc7 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1191,10 +1191,16 @@ static inline void kfree_skb(struct sk_buff *skb)
 }
 
 void skb_release_head_state(struct sk_buff *skb);
-void kfree_skb_list(struct sk_buff *segs);
+void kfree_skb_list_reason(struct sk_buff *segs,
+			   enum skb_drop_reason reason);
 void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt);
 void skb_tx_error(struct sk_buff *skb);
 
+static inline void kfree_skb_list(struct sk_buff *segs)
+{
+	kfree_skb_list_reason(segs, SKB_DROP_REASON_NOT_SPECIFIED);
+}
+
 #ifdef CONFIG_TRACEPOINTS
 void consume_skb(struct sk_buff *skb);
 #else
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index b32c5d782fe1..46d7dea78011 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -777,16 +777,17 @@ void kfree_skb_reason(struct sk_buff *skb, enum skb_drop_reason reason)
 }
 EXPORT_SYMBOL(kfree_skb_reason);
 
-void kfree_skb_list(struct sk_buff *segs)
+void kfree_skb_list_reason(struct sk_buff *segs,
+			   enum skb_drop_reason reason)
 {
 	while (segs) {
 		struct sk_buff *next = segs->next;
 
-		kfree_skb(segs);
+		kfree_skb_reason(segs, reason);
 		segs = next;
 	}
 }
-EXPORT_SYMBOL(kfree_skb_list);
+EXPORT_SYMBOL(kfree_skb_list_reason);
 
 /* Dump skb information and contents.
  *
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 3/7] net: dev: add skb drop reasons to __dev_xmit_skb()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 1/7] net: dev: use kfree_skb_reason() for sch_handle_egress() menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 2/7] net: skb: introduce the function kfree_skb_list_reason() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 4/7] net: dev: use kfree_skb_reason() for enqueue_to_backlog() menglong8.dong
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

Add reasons for skb drops to __dev_xmit_skb() by replacing
kfree_skb_list() with kfree_skb_list_reason(). The drop reason of
SKB_DROP_REASON_QDISC_DROP is introduced for qdisc enqueue fails.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
 include/linux/skbuff.h     | 4 ++++
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 5 +++--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 9d219e266dc7..a3d65e749ea3 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -395,6 +395,10 @@ enum skb_drop_reason {
 						 */
 	SKB_DROP_REASON_NEIGH_DEAD,	/* neigh entry is dead */
 	SKB_DROP_REASON_TC_EGRESS,	/* dropped in TC egress HOOK */
+	SKB_DROP_REASON_QDISC_DROP,	/* dropped by qdisc when packet
+					 * outputting (failed to enqueue to
+					 * current qdisc)
+					 */
 	SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 53755e8191a1..dbf3e2e3c1b4 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -46,6 +46,7 @@
 	EM(SKB_DROP_REASON_NEIGH_QUEUEFULL, NEIGH_QUEUEFULL)	\
 	EM(SKB_DROP_REASON_NEIGH_DEAD, NEIGH_DEAD)		\
 	EM(SKB_DROP_REASON_TC_EGRESS, TC_EGRESS)		\
+	EM(SKB_DROP_REASON_QDISC_DROP, QDISC_DROP)		\
 	EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/core/dev.c b/net/core/dev.c
index 353322e72a61..2ba331b5b775 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3730,7 +3730,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
 
 no_lock_out:
 		if (unlikely(to_free))
-			kfree_skb_list(to_free);
+			kfree_skb_list_reason(to_free,
+					      SKB_DROP_REASON_QDISC_DROP);
 		return rc;
 	}
 
@@ -3785,7 +3786,7 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
 	}
 	spin_unlock(root_lock);
 	if (unlikely(to_free))
-		kfree_skb_list(to_free);
+		kfree_skb_list_reason(to_free, SKB_DROP_REASON_QDISC_DROP);
 	if (unlikely(contended))
 		spin_unlock(&q->busylock);
 	return rc;
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 4/7] net: dev: use kfree_skb_reason() for enqueue_to_backlog()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
                   ` (2 preceding siblings ...)
  2022-03-04  6:00 ` [PATCH net-next v2 3/7] net: dev: add skb drop reasons to __dev_xmit_skb() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 5/7] net: dev: use kfree_skb_reason() for do_xdp_generic() menglong8.dong
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

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>
---
 include/linux/skbuff.h     | 6 ++++++
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 5 ++++-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index a3d65e749ea3..cf168f353338 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -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,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index dbf3e2e3c1b4..3bb90ca893ae 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -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
diff --git a/net/core/dev.c b/net/core/dev.c
index 2ba331b5b775..0d097d0e710f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4541,10 +4541,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);
@@ -4567,13 +4569,14 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu,
 			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;
 }
 
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 5/7] net: dev: use kfree_skb_reason() for do_xdp_generic()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
                   ` (3 preceding siblings ...)
  2022-03-04  6:00 ` [PATCH net-next v2 4/7] net: dev: use kfree_skb_reason() for enqueue_to_backlog() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 6/7] net: dev: use kfree_skb_reason() for sch_handle_ingress() menglong8.dong
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

Replace kfree_skb() used in do_xdp_generic() with kfree_skb_reason().
The drop reason SKB_DROP_REASON_XDP is introduced for this case.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
 include/linux/skbuff.h     | 1 +
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index cf168f353338..e13ef6ca5470 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -405,6 +405,7 @@ enum skb_drop_reason {
 					 * full (see netdev_max_backlog in
 					 * net.rst) or RPS flow limit
 					 */
+	SKB_DROP_REASON_XDP,		/* dropped by XDP in input path */
 	SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 3bb90ca893ae..8c4c343c830f 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -48,6 +48,7 @@
 	EM(SKB_DROP_REASON_TC_EGRESS, TC_EGRESS)		\
 	EM(SKB_DROP_REASON_QDISC_DROP, QDISC_DROP)		\
 	EM(SKB_DROP_REASON_CPU_BACKLOG, CPU_BACKLOG)		\
+	EM(SKB_DROP_REASON_XDP, XDP)				\
 	EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/core/dev.c b/net/core/dev.c
index 0d097d0e710f..5ad74a46452b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4796,7 +4796,7 @@ int do_xdp_generic(struct bpf_prog *xdp_prog, struct sk_buff *skb)
 	}
 	return XDP_PASS;
 out_redir:
-	kfree_skb(skb);
+	kfree_skb_reason(skb, SKB_DROP_REASON_XDP);
 	return XDP_DROP;
 }
 EXPORT_SYMBOL_GPL(do_xdp_generic);
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 6/7] net: dev: use kfree_skb_reason() for sch_handle_ingress()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
                   ` (4 preceding siblings ...)
  2022-03-04  6:00 ` [PATCH net-next v2 5/7] net: dev: use kfree_skb_reason() for do_xdp_generic() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04  6:00 ` [PATCH net-next v2 7/7] net: dev: use kfree_skb_reason() for __netif_receive_skb_core() menglong8.dong
  2022-03-04 12:30 ` [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c patchwork-bot+netdevbpf
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

Replace kfree_skb() used in sch_handle_ingress() with
kfree_skb_reason(). Following drop reasons are introduced:

SKB_DROP_REASON_TC_INGRESS

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
v2:
- rename SKB_DROP_REASON_QDISC_INGRESS to SKB_DROP_REASON_TC_INGRESS
---
 include/linux/skbuff.h     | 1 +
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index e13ef6ca5470..d0a10fa477be 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -406,6 +406,7 @@ enum skb_drop_reason {
 					 * net.rst) or RPS flow limit
 					 */
 	SKB_DROP_REASON_XDP,		/* dropped by XDP in input path */
+	SKB_DROP_REASON_TC_INGRESS,	/* dropped in TC ingress HOOK */
 	SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 8c4c343c830f..514dd2de8776 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -49,6 +49,7 @@
 	EM(SKB_DROP_REASON_QDISC_DROP, QDISC_DROP)		\
 	EM(SKB_DROP_REASON_CPU_BACKLOG, CPU_BACKLOG)		\
 	EM(SKB_DROP_REASON_XDP, XDP)				\
+	EM(SKB_DROP_REASON_TC_INGRESS, TC_INGRESS)		\
 	EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/core/dev.c b/net/core/dev.c
index 5ad74a46452b..7eb293684871 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5012,7 +5012,7 @@ sch_handle_ingress(struct sk_buff *skb, struct packet_type **pt_prev, int *ret,
 		break;
 	case TC_ACT_SHOT:
 		mini_qdisc_qstats_cpu_drop(miniq);
-		kfree_skb(skb);
+		kfree_skb_reason(skb, SKB_DROP_REASON_TC_INGRESS);
 		return NULL;
 	case TC_ACT_STOLEN:
 	case TC_ACT_QUEUED:
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 7/7] net: dev: use kfree_skb_reason() for __netif_receive_skb_core()
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
                   ` (5 preceding siblings ...)
  2022-03-04  6:00 ` [PATCH net-next v2 6/7] net: dev: use kfree_skb_reason() for sch_handle_ingress() menglong8.dong
@ 2022-03-04  6:00 ` menglong8.dong
  2022-03-04 12:30 ` [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c patchwork-bot+netdevbpf
  7 siblings, 0 replies; 9+ messages in thread
From: menglong8.dong @ 2022-03-04  6:00 UTC (permalink / raw)
  To: dsahern, kuba
  Cc: rostedt, mingo, davem, ast, daniel, hawk, john.fastabend,
	imagedong, edumazet, talalahmad, keescook, ilias.apalodimas,
	alobakin, flyingpeng, mengensun, atenart, bigeasy, memxor, arnd,
	pabeni, willemb, vvs, cong.wang, linux-kernel, netdev, bpf

From: Menglong Dong <imagedong@tencent.com>

Add reason for skb drops to __netif_receive_skb_core() when packet_type
not found to handle the skb. For this purpose, the drop reason
SKB_DROP_REASON_PTYPE_ABSENT is introduced. Take ether packets for
example, this case mainly happens when L3 protocol is not supported.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
---
 include/linux/skbuff.h     | 5 +++++
 include/trace/events/skb.h | 1 +
 net/core/dev.c             | 8 +++++---
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index d0a10fa477be..070111aecfd3 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -407,6 +407,11 @@ enum skb_drop_reason {
 					 */
 	SKB_DROP_REASON_XDP,		/* dropped by XDP in input path */
 	SKB_DROP_REASON_TC_INGRESS,	/* dropped in TC ingress HOOK */
+	SKB_DROP_REASON_PTYPE_ABSENT,	/* not packet_type found to handle
+					 * the skb. For an etner packet,
+					 * this means that L3 protocol is
+					 * not supported
+					 */
 	SKB_DROP_REASON_MAX,
 };
 
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 514dd2de8776..c0769d943f8e 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -50,6 +50,7 @@
 	EM(SKB_DROP_REASON_CPU_BACKLOG, CPU_BACKLOG)		\
 	EM(SKB_DROP_REASON_XDP, XDP)				\
 	EM(SKB_DROP_REASON_TC_INGRESS, TC_INGRESS)		\
+	EM(SKB_DROP_REASON_PTYPE_ABSENT, PTYPE_ABSENT)		\
 	EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/core/dev.c b/net/core/dev.c
index 7eb293684871..c690c0f7b18c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5329,11 +5329,13 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc,
 		*ppt_prev = pt_prev;
 	} else {
 drop:
-		if (!deliver_exact)
+		if (!deliver_exact) {
 			atomic_long_inc(&skb->dev->rx_dropped);
-		else
+			kfree_skb_reason(skb, SKB_DROP_REASON_PTYPE_ABSENT);
+		} else {
 			atomic_long_inc(&skb->dev->rx_nohandler);
-		kfree_skb(skb);
+			kfree_skb(skb);
+		}
 		/* Jamal, now you will not able to escape explaining
 		 * me how you were going to use this. :-)
 		 */
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c
  2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
                   ` (6 preceding siblings ...)
  2022-03-04  6:00 ` [PATCH net-next v2 7/7] net: dev: use kfree_skb_reason() for __netif_receive_skb_core() menglong8.dong
@ 2022-03-04 12:30 ` patchwork-bot+netdevbpf
  7 siblings, 0 replies; 9+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-04 12:30 UTC (permalink / raw)
  To: Menglong Dong
  Cc: dsahern, kuba, rostedt, mingo, davem, ast, daniel, hawk,
	john.fastabend, imagedong, edumazet, talalahmad, keescook,
	ilias.apalodimas, alobakin, flyingpeng, mengensun, atenart,
	bigeasy, memxor, arnd, pabeni, willemb, vvs, cong.wang,
	linux-kernel, netdev, bpf

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Fri,  4 Mar 2022 14:00:39 +0800 you wrote:
> From: Menglong Dong <imagedong@tencent.com>
> 
> In the commit c504e5c2f964 ("net: skb: introduce kfree_skb_reason()"),
> we added the support of reporting the reasons of skb drops to kfree_skb
> tracepoint. And in this series patches, reasons for skb drops are added
> to the link layer, which means that 'net/core/dev.c' is our target.
> 
> [...]

Here is the summary with links:
  - [net-next,v2,1/7] net: dev: use kfree_skb_reason() for sch_handle_egress()
    https://git.kernel.org/netdev/net-next/c/98b4d7a4e737
  - [net-next,v2,2/7] net: skb: introduce the function kfree_skb_list_reason()
    https://git.kernel.org/netdev/net-next/c/215b0f1963d4
  - [net-next,v2,3/7] net: dev: add skb drop reasons to __dev_xmit_skb()
    https://git.kernel.org/netdev/net-next/c/7faef0547f4c
  - [net-next,v2,4/7] net: dev: use kfree_skb_reason() for enqueue_to_backlog()
    https://git.kernel.org/netdev/net-next/c/44f0bd40803c
  - [net-next,v2,5/7] net: dev: use kfree_skb_reason() for do_xdp_generic()
    https://git.kernel.org/netdev/net-next/c/7e726ed81e1d
  - [net-next,v2,6/7] net: dev: use kfree_skb_reason() for sch_handle_ingress()
    https://git.kernel.org/netdev/net-next/c/a568aff26ac0
  - [net-next,v2,7/7] net: dev: use kfree_skb_reason() for __netif_receive_skb_core()
    https://git.kernel.org/netdev/net-next/c/6c2728b7c141

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-03-04 12:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-04  6:00 [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 1/7] net: dev: use kfree_skb_reason() for sch_handle_egress() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 2/7] net: skb: introduce the function kfree_skb_list_reason() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 3/7] net: dev: add skb drop reasons to __dev_xmit_skb() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 4/7] net: dev: use kfree_skb_reason() for enqueue_to_backlog() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 5/7] net: dev: use kfree_skb_reason() for do_xdp_generic() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 6/7] net: dev: use kfree_skb_reason() for sch_handle_ingress() menglong8.dong
2022-03-04  6:00 ` [PATCH net-next v2 7/7] net: dev: use kfree_skb_reason() for __netif_receive_skb_core() menglong8.dong
2022-03-04 12:30 ` [PATCH net-next v2 0/7] net: dev: add skb drop reasons to net/core/dev.c patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).