From: Eric Dumazet <dada1@cosmosbay.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Subject: [PATCH] sch_teql: Use net_device internal stats
Date: Tue, 19 May 2009 07:43:09 +0200 [thread overview]
Message-ID: <4A1246ED.3080203@cosmosbay.com> (raw)
In-Reply-To: <20090518.193438.158960584.davem@davemloft.net>
David Miller a écrit :
> From: Eric Dumazet <dada1@cosmosbay.com>
> Date: Tue, 19 May 2009 03:34:03 +0200
>
>> Looking again at teql_master_xmit(), I wonder if there is another
>> problem in it.
>>
>> int subq = skb_get_queue_mapping(skb);
>>
>> But as a matter of fact, following code assumes subq is 0
>>
>> struct netdev_queue *slave_txq = netdev_get_tx_queue(slave, 0);
>> ...
>> if (__netif_subqueue_stopped(slave, subq) ||
>> ...
>>
>> Either we should set subq to 0, or call dev_pick_tx() to better
>> take into account multi queue slaves ?
>>
>> (As teqlN has one queue, I assume original dev_queue_xmit() will
>> set skb queue_mapping to 0 before entering teql_master_xmit(), but
>> maybe other paths could call teql_master_xmit() not through dev_queue_xmit() ?
>>
>> Oh well, time for sleeping a bit...
>
> I was admittedly very hasty with the multiqueue conversion here.
> I'll take a closer look at this.
Thanks David
In the meantime, I did the master->stats removal for teqlN devices, for net-next-2.6,
if you dont mind :)
[PATCH] sch_teql: Use net_device internal stats
We can slightly reduce size of teqlN structure, not duplicating stats structure
in teql_master but using stats field from net_device.stats for tx_errors and from
netdev_queue for tx_bytes/tx_packets/tx_dropped values.
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
---
net/sched/sch_teql.c | 17 +++++------------
1 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c
index 3b64182..428a5ef 100644
--- a/net/sched/sch_teql.c
+++ b/net/sched/sch_teql.c
@@ -58,7 +58,6 @@ struct teql_master
struct net_device *dev;
struct Qdisc *slaves;
struct list_head master_list;
- struct net_device_stats stats;
};
struct teql_sched_data
@@ -272,6 +271,7 @@ static inline int teql_resolve(struct sk_buff *skb,
static int teql_master_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct teql_master *master = netdev_priv(dev);
+ struct netdev_queue *txq = netdev_get_tx_queue(dev, 0);
struct Qdisc *start, *q;
int busy;
int nores;
@@ -311,8 +311,8 @@ restart:
__netif_tx_unlock(slave_txq);
master->slaves = NEXT_SLAVE(q);
netif_wake_queue(dev);
- master->stats.tx_packets++;
- master->stats.tx_bytes += length;
+ txq->tx_packets++;
+ txq->tx_bytes += length;
return 0;
}
__netif_tx_unlock(slave_txq);
@@ -339,10 +339,10 @@ restart:
netif_stop_queue(dev);
return 1;
}
- master->stats.tx_errors++;
+ dev->stats.tx_errors++;
drop:
- master->stats.tx_dropped++;
+ txq->tx_dropped++;
dev_kfree_skb(skb);
return 0;
}
@@ -395,12 +395,6 @@ static int teql_master_close(struct net_device *dev)
return 0;
}
-static struct net_device_stats *teql_master_stats(struct net_device *dev)
-{
- struct teql_master *m = netdev_priv(dev);
- return &m->stats;
-}
-
static int teql_master_mtu(struct net_device *dev, int new_mtu)
{
struct teql_master *m = netdev_priv(dev);
@@ -425,7 +419,6 @@ static const struct net_device_ops teql_netdev_ops = {
.ndo_open = teql_master_open,
.ndo_stop = teql_master_close,
.ndo_start_xmit = teql_master_xmit,
- .ndo_get_stats = teql_master_stats,
.ndo_change_mtu = teql_master_mtu,
};
next prev parent reply other threads:[~2009-05-19 5:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-18 10:31 [PATCH] sch_teql: should not dereference skb after ndo_start_xmit Eric Dumazet
2009-05-18 22:12 ` David Miller
2009-05-19 1:34 ` Eric Dumazet
2009-05-19 2:34 ` David Miller
2009-05-19 5:43 ` Eric Dumazet [this message]
2009-05-19 22:16 ` [PATCH] sch_teql: Use net_device internal stats David Miller
2009-08-03 1:59 ` [PATCH] sch_teql: should not dereference skb after ndo_start_xmit David 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=4A1246ED.3080203@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=davem@davemloft.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.