Braindead as I am, I forgot to tell my text editor to write the file
before diffing it. This way an unused variable made it into the patch,
revised version:
Makes ATM qdisc use gnet_stats for class statistic counters and
adds dumping bits to actually dump those. Althought the counters
were updated they never got dumped to userspace.
Signed-off-by: Thomas Graf <tgraf@xxxxxxx>
--- linux-2.6.9-bk6.orig/net/sched/sch_atm.c 2004-10-21 17:30:11.000000000
+0200
+++ linux-2.6.9-bk6/net/sched/sch_atm.c 2004-10-21 17:29:28.000000000 +0200
@@ -69,7 +69,8 @@
struct socket *sock; /* for closing */
u32 classid; /* x:y type ID */
int ref; /* reference count */
- struct tc_stats stats;
+ struct gnet_stats_basic bstats;
+ struct gnet_stats_queue qstats;
spinlock_t *stats_lock;
struct atm_flow_data *next;
struct atm_flow_data *excess; /* flow for excess traffic;
@@ -450,13 +451,13 @@
#endif
(ret = flow->q->enqueue(skb,flow->q)) != 0) {
sch->qstats.drops++;
- if (flow) flow->stats.drops++;
+ if (flow) flow->qstats.drops++;
return ret;
}
sch->bstats.bytes += skb->len;
sch->bstats.packets++;
- flow->stats.bytes += skb->len;
- flow->stats.packets++;
+ flow->bstats.bytes += skb->len;
+ flow->bstats.packets++;
/*
* Okay, this may seem weird. We pretend we've dropped the packet if
* it goes via ATM. The reason for this is that the outer qdisc
@@ -550,7 +551,7 @@
sch->qstats.requeues++;
} else {
sch->qstats.drops++;
- p->link.stats.drops++;
+ p->link.qstats.drops++;
}
return ret;
}
@@ -666,6 +667,20 @@
skb_trim(skb,b-skb->data);
return -1;
}
+static int
+atm_tc_dump_class_stats(struct Qdisc *sch, unsigned long arg,
+ struct gnet_dump *d)
+{
+ struct atm_flow_data *flow = (struct atm_flow_data *) arg;
+
+ flow->qstats.qlen = flow->q->q.qlen;
+
+ if (gnet_stats_copy_basic(d, &flow->bstats) < 0 ||
+ gnet_stats_copy_queue(d, &flow->qstats) < 0)
+ return -1;
+
+ return 0;
+}
static int atm_tc_dump(struct Qdisc *sch, struct sk_buff *skb)
{
@@ -684,6 +699,7 @@
.bind_tcf = atm_tc_bind_filter,
.unbind_tcf = atm_tc_put,
.dump = atm_tc_dump_class,
+ .dump_stats = atm_tc_dump_class_stats,
};
static struct Qdisc_ops atm_qdisc_ops = {
|