netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] netdev: pktgen xmit packet through vlan interface
@ 2014-05-02  7:18 Zhouyi Zhou
  2014-05-02 13:19 ` Jesper Dangaard Brouer
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Zhouyi Zhou @ 2014-05-02  7:18 UTC (permalink / raw)
  To: davem, steffen.klassert, fan.du, dborkman, minipli, tgraf, netdev,
	linux-kernel
  Cc: Zhouyi Zhou, Zhouyi Zhou

As http://www.spinics.net/lists/netdev/msg165015.html
pktgen generates shared packet through vlan interface will cause
oops because of duplicate entering tc queue.

Try to solve this problem by means of packet clone instead of sharing.

Signed-off-by: Zhouyi Zhou <yizhouzhou@ict.ac.cn>
---
 net/core/pktgen.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index 0304f98..ced07fc 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -3297,6 +3297,7 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
 	netdev_tx_t (*xmit)(struct sk_buff *, struct net_device *)
 		= odev->netdev_ops->ndo_start_xmit;
 	struct netdev_queue *txq;
+	struct sk_buff *nskb = NULL;
 	u16 queue_map;
 	int ret;
 
@@ -3347,8 +3348,18 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
 		pkt_dev->last_ok = 0;
 		goto unlock;
 	}
-	atomic_inc(&(pkt_dev->skb->users));
-	ret = (*xmit)(pkt_dev->skb, odev);
+
+	if (pkt_dev->clone_skb && is_vlan_dev(odev)) {
+		nskb = skb_clone(pkt_dev->skb, GFP_ATOMIC);
+		ret = -ENOMEM;
+		if (nskb)
+			ret = (*xmit)(nskb, odev);
+		else
+			nskb = ERR_PTR(ret);
+	} else {
+		atomic_inc(&(pkt_dev->skb->users));
+		ret = (*xmit)(pkt_dev->skb, odev);
+	}
 
 	switch (ret) {
 	case NETDEV_TX_OK:
@@ -3372,7 +3383,10 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
 	case NETDEV_TX_LOCKED:
 	case NETDEV_TX_BUSY:
 		/* Retry it next time */
-		atomic_dec(&(pkt_dev->skb->users));
+		if (nskb && !IS_ERR(nskb))
+			kfree_skb(nskb);
+		else
+			atomic_dec(&(pkt_dev->skb->users));
 		pkt_dev->last_ok = 0;
 	}
 unlock:
-- 
1.7.1

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

end of thread, other threads:[~2014-05-06  1:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-02  7:18 [PATCH] netdev: pktgen xmit packet through vlan interface Zhouyi Zhou
2014-05-02 13:19 ` Jesper Dangaard Brouer
2014-05-02 14:00   ` John Fastabend
2014-05-02 14:55     ` Zhouyi Zhou
2014-05-05 15:12     ` Jesper Dangaard Brouer
2014-05-05 16:24       ` Ben Greear
2014-05-06  1:51         ` Zhouyi Zhou
2014-05-02 16:18 ` Sergei Shtylyov
2014-05-03  0:58   ` Zhouyi Zhou
2014-05-05 15:43 ` Jiri Pirko

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).