All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] packet: uses kfree_skb() for drops or errors.
@ 2016-04-06 21:14 Weongyo Jeong
  2016-04-07 16:06 ` Willem de Bruijn
  0 siblings, 1 reply; 3+ messages in thread
From: Weongyo Jeong @ 2016-04-06 21:14 UTC (permalink / raw)
  To: netdev; +Cc: Weongyo Jeong, David S. Miller, Willem de Bruijn

consume_skb() isn't for drop or error cases that  kfree_skb() is more proper
one.  At this patch, it fixed tpacket_rcv() and packet_rcv() to be
consistent for error or non-error cases letting perf trace its event
properly.

Signed-off-by: Weongyo Jeong <weongyo.linux@gmail.com>
---
 net/packet/af_packet.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 1ecfa71..cd100cf 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -2040,7 +2040,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
 	struct sockaddr_ll *sll;
 	struct packet_sock *po;
 	u8 *skb_head = skb->data;
-	int skb_len = skb->len;
+	int err = 0, skb_len = skb->len;
 	unsigned int snaplen, res;
 
 	if (skb->pkt_type == PACKET_LOOPBACK)
@@ -2130,6 +2130,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
 	return 0;
 
 drop_n_acct:
+	err = -1;
 	spin_lock(&sk->sk_receive_queue.lock);
 	po->stats.stats1.tp_drops++;
 	atomic_inc(&sk->sk_drops);
@@ -2141,7 +2142,10 @@ drop_n_restore:
 		skb->len = skb_len;
 	}
 drop:
-	consume_skb(skb);
+	if (!err)
+		consume_skb(skb);
+	else
+		kfree_skb(skb);
 	return 0;
 }
 
@@ -2153,7 +2157,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
 	struct sockaddr_ll *sll;
 	union tpacket_uhdr h;
 	u8 *skb_head = skb->data;
-	int skb_len = skb->len;
+	int err = 0, skb_len = skb->len;
 	unsigned int snaplen, res;
 	unsigned long status = TP_STATUS_USER;
 	unsigned short macoff, netoff, hdrlen;
@@ -2367,10 +2371,14 @@ drop_n_restore:
 		skb->len = skb_len;
 	}
 drop:
-	kfree_skb(skb);
+	if (!err)
+		consume_skb(skb);
+	else
+		kfree_skb(skb);
 	return 0;
 
 drop_n_account:
+	err = -1;
 	po->stats.stats1.tp_drops++;
 	spin_unlock(&sk->sk_receive_queue.lock);
 
-- 
2.1.3

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

* Re: [PATCH v2] packet: uses kfree_skb() for drops or errors.
  2016-04-06 21:14 [PATCH v2] packet: uses kfree_skb() for drops or errors Weongyo Jeong
@ 2016-04-07 16:06 ` Willem de Bruijn
  2016-04-08 16:27   ` Weongyo Jeong
  0 siblings, 1 reply; 3+ messages in thread
From: Willem de Bruijn @ 2016-04-07 16:06 UTC (permalink / raw)
  To: Weongyo Jeong; +Cc: Network Development, David S. Miller, Willem de Bruijn

On Wed, Apr 6, 2016 at 5:14 PM, Weongyo Jeong <weongyo.linux@gmail.com> wrote:
> consume_skb() isn't for drop or error cases

for drop or error -> for error

> that  kfree_skb() is more proper
> one.  At this patch, it fixed tpacket_rcv() and packet_rcv() to be
> consistent for error or non-error cases letting perf trace its event
> properly.
>
> Signed-off-by: Weongyo Jeong <weongyo.linux@gmail.com>

Don't forget to add the target to your subject line: PATCH net-next v3.

> ---
>  net/packet/af_packet.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index 1ecfa71..cd100cf 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -2040,7 +2040,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
>         struct sockaddr_ll *sll;
>         struct packet_sock *po;
>         u8 *skb_head = skb->data;
> -       int skb_len = skb->len;
> +       int err = 0, skb_len = skb->len;

bool

Otherwise looks good.

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

* Re: [PATCH v2] packet: uses kfree_skb() for drops or errors.
  2016-04-07 16:06 ` Willem de Bruijn
@ 2016-04-08 16:27   ` Weongyo Jeong
  0 siblings, 0 replies; 3+ messages in thread
From: Weongyo Jeong @ 2016-04-08 16:27 UTC (permalink / raw)
  To: Willem de Bruijn; +Cc: Network Development, David S. Miller, Willem de Bruijn

On Thu, Apr 07, 2016 at 12:06:12PM -0400, Willem de Bruijn wrote:
> On Wed, Apr 6, 2016 at 5:14 PM, Weongyo Jeong <weongyo.linux@gmail.com> wrote:
> > consume_skb() isn't for drop or error cases
> 
> for drop or error -> for error
> 
> > that  kfree_skb() is more proper
> > one.  At this patch, it fixed tpacket_rcv() and packet_rcv() to be
> > consistent for error or non-error cases letting perf trace its event
> > properly.
> >
> > Signed-off-by: Weongyo Jeong <weongyo.linux@gmail.com>
> 
> Don't forget to add the target to your subject line: PATCH net-next v3.
> 
> > ---
> >  net/packet/af_packet.c | 16 ++++++++++++----
> >  1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> > index 1ecfa71..cd100cf 100644
> > --- a/net/packet/af_packet.c
> > +++ b/net/packet/af_packet.c
> > @@ -2040,7 +2040,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
> >         struct sockaddr_ll *sll;
> >         struct packet_sock *po;
> >         u8 *skb_head = skb->data;
> > -       int skb_len = skb->len;
> > +       int err = 0, skb_len = skb->len;
> 
> bool
> 
> Otherwise looks good.

Thank you for review Willem. I just had submitted v3 version.

Regards,
Weongyo Jeong

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

end of thread, other threads:[~2016-04-08 16:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-06 21:14 [PATCH v2] packet: uses kfree_skb() for drops or errors Weongyo Jeong
2016-04-07 16:06 ` Willem de Bruijn
2016-04-08 16:27   ` Weongyo Jeong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.