All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@osdl.org>
To: Ranjit Manomohan <ranjitm@google.com>
Cc: "David S. Miller" <davem@davemloft.net>,
	ranjitm@google.com, akpm@osdl.org, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org
Subject: Re: [PATCH] tcpdump may trace some outbound packets twice.
Date: Mon, 15 May 2006 16:41:01 -0700	[thread overview]
Message-ID: <20060515164101.054afa29@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.56.0605151602330.29636@ranjit.corp.google.com>

On Mon, 15 May 2006 16:11:05 -0700 (PDT)
Ranjit Manomohan <ranjitm@google.com> wrote:

> On Mon, 15 May 2006, David S. Miller wrote:
> 
> > From: Ranjit Manomohan <ranjitm@google.com>
> > Date: Mon, 15 May 2006 14:19:06 -0700 (PDT)
> > 
> > > Heres a new version which does a copy instead of the clone to avoid
> > > the double cloning issue.
> > 
> > I still very much dislike this patch because it is creating
> > 1 more clone per packet than is actually necessary and that
> > is very expensive.
> > 
> > dev_queue_xmit_nit() is going to clone whatever SKB you send into
> > there, so better to just bump the reference count (with skb_get())
> > instead of cloning or copying.
> > 
> 
> I was a bit apprehensive about just incrementing the refcnt but that works 
> too. Attached is the modified version.
> 
> -Thanks,
> Ranjit
> 
> --- linux-2.6/net/sched/sch_generic.c	2006-05-10 12:34:52.000000000 -0700
> +++ linux/net/sched/sch_generic.c	2006-05-15 15:48:03.000000000 -0700
> @@ -136,8 +136,12 @@
>  
>  			if (!netif_queue_stopped(dev)) {
>  				int ret;
> +				struct sk_buff *skbc = NULL;
> +				/* Increment the reference count on the skb so
> +				 * that we can use it after a successful xmit.
> +				 */
>  				if (netdev_nit)
> -					dev_queue_xmit_nit(skb, dev);
> +					skbc = skb_get(skb);

				skbc = netdev_nit ? skb_get(skb) : NULL;
>  
>  				ret = dev->hard_start_xmit(skb, dev);
>  				if (ret == NETDEV_TX_OK) { 
> @@ -145,9 +149,20 @@
>  						dev->xmit_lock_owner = -1;
>  						spin_unlock(&dev->xmit_lock);
>  					}
> +					if (skbc) {
> +						/* transmit succeeded, 
> +						 * trace the buffer. */
> +						dev_queue_xmit_nit(skbc,dev);
> +						kfree_skb(skbc);
> +					}
>  					spin_lock(&dev->queue_lock);
>  					return -1;
>  				}
> +
> +				/* Call free in case we incremented refcnt */
> +				if (skbc)
> +					kfree_skb(skbc);

kfree_skb(NULL) is legal so the conditional here is unneeded.

But the increased calls to kfree_skb(NULL) would probably bring the
"unlikely()" hordes descending on kfree_skb, so maybe:

				if (unlikely(netdev_nit))
					kfree_skb(skbc);



  reply	other threads:[~2006-05-15 23:41 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-10 20:17 [PATCH] tcpdump may trace some outbound packets twice Ranjit Manomohan
2006-05-14 10:10 ` Andrew Morton
2006-05-14 15:58   ` Ranjit Manomohan
2006-05-14 20:42   ` David S. Miller
2006-05-15 21:19     ` Ranjit Manomohan
2006-05-15 21:26       ` David S. Miller
2006-05-15 21:41         ` Patrick McHardy
2006-05-15 23:11         ` Ranjit Manomohan
2006-05-15 23:41           ` Stephen Hemminger [this message]
2006-05-16  0:08             ` David S. Miller
2006-05-16  0:21               ` Patrick McHardy
2006-05-16  0:48                 ` Tom Young
2006-05-16  0:37               ` Herbert Xu
2006-05-16  1:17                 ` Patrick McHardy
2006-05-16  1:20                   ` Herbert Xu
2006-05-16  1:22                   ` Patrick McHardy
2006-05-16  4:18                     ` David S. Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060515164101.054afa29@localhost.localdomain \
    --to=shemminger@osdl.org \
    --cc=akpm@osdl.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=ranjitm@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.