All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarek Poplawski <jarkao2@gmail.com>
To: Patrick McHardy <kaber@trash.net>
Cc: netdev@vger.kernel.org
Subject: Re: [RFC net 02/03]: allow to propagate errors through ->ndo_hard_start_xmit()
Date: Tue, 16 Jun 2009 09:25:31 +0000	[thread overview]
Message-ID: <20090616092531.GA6106@ff.dom.local> (raw)
In-Reply-To: <20090609161700.6730.4204.sendpatchset@x2.localnet>

On 09-06-2009 18:17, Patrick McHardy wrote:
> commit c2104095c3a1023b4f4809c90092145dff093c88
> Author: Patrick McHardy <kaber@trash.net>
> Date:   Tue Jun 9 17:55:34 2009 +0200
> 
>     net: allow to propagate errors through ->ndo_hard_start_xmit()
>     
...
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 11560e3..b2e9953 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -1731,6 +1731,8 @@ gso:
>  		nskb->next = NULL;
>  		rc = ops->ndo_start_xmit(nskb, dev);
>  		if (unlikely(rc)) {
> +			if (rc & ~NETDEV_TX_MASK)
> +				return rc;

This is probably not enough: what about the rest of the skb
(qdisc_restart() would skip requeuing)?

Jarek P.

>  			nskb->next = skb->next;
>  			skb->next = nskb;
>  			return rc;
> @@ -1895,8 +1897,9 @@ gso:
>  			HARD_TX_LOCK(dev, txq, cpu);
>  
>  			if (!netif_tx_queue_stopped(txq)) {
> -				rc = 0;
> -				if (!dev_hard_start_xmit(skb, dev, txq)) {
> +				rc = dev_hard_start_xmit(skb, dev, txq);
> +				if (rc == NETDEV_TX_OK || rc < 0 ||
> +				    rc & NET_XMIT_MASK) {
>  					HARD_TX_UNLOCK(dev, txq);
>  					goto out;
>  				}
> diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
> index 27d0381..7e3e514 100644
> --- a/net/sched/sch_generic.c
> +++ b/net/sched/sch_generic.c
> @@ -143,8 +143,16 @@ static inline int qdisc_restart(struct Qdisc *q)
>  
>  	HARD_TX_LOCK(dev, txq, smp_processor_id());
>  	if (!netif_tx_queue_stopped(txq) &&
> -	    !netif_tx_queue_frozen(txq))
> +	    !netif_tx_queue_frozen(txq)) {
>  		ret = dev_hard_start_xmit(skb, dev, txq);
> +
> +		/* an error implies that the skb was consumed */
> +		if (ret < 0)
> +			ret = NETDEV_TX_OK;
> +
> +		/* all NET_XMIT codes map to NETDEV_TX_OK */
> +		ret &= ~NET_XMIT_MASK;
> +	}
>  	HARD_TX_UNLOCK(dev, txq);
>  
>  	spin_lock(root_lock);
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 




  reply	other threads:[~2009-06-16  9:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-09 16:16 [RFC net 00/03]: dev_queue_xmit error propagation Patrick McHardy
2009-06-09 16:17 ` [RFC net-sched 01/03]: use symbolic NET_XMIT constants in qdiscs Patrick McHardy
2009-06-09 16:17 ` [RFC net 02/03]: allow to propagate errors through ->ndo_hard_start_xmit() Patrick McHardy
2009-06-16  9:25   ` Jarek Poplawski [this message]
2009-06-19 12:23     ` Patrick McHardy
2009-06-09 16:17 ` [RFC vlan 03/03]: propagate transmission state Patrick McHardy
2009-06-09 16:34   ` Eric Dumazet
2009-06-09 16:37     ` Patrick McHardy
2009-06-11 10:18 ` [RFC net 00/03]: dev_queue_xmit error propagation David Miller
2009-06-11 16:33   ` Patrick McHardy
2009-06-12  0:05     ` David Miller
2009-06-12  0:10       ` Patrick McHardy

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=20090616092531.GA6106@ff.dom.local \
    --to=jarkao2@gmail.com \
    --cc=kaber@trash.net \
    --cc=netdev@vger.kernel.org \
    /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.