aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/rtnetlink.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2009-09-04 02:41:18 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-06 05:07:03 -0400
commitaf356afa010f3cd2c8b8fcc3bce90f7a7b7ec02a (patch)
tree302d938363bbaec3e69a58e36dbf8a304b24144c /net/core/rtnetlink.c
parent5b9a9ccfad8553dbf7a9b17ba78bad70215ed0e2 (diff)
net_sched: reintroduce dev->qdisc for use by sch_api
Currently the multiqueue integration with the qdisc API suffers from a few problems: - with multiple queues, all root qdiscs use the same handle. This means they can't be exposed to userspace in a backwards compatible fashion. - all API operations always refer to queue number 0. Newly created qdiscs are automatically shared between all queues, its not possible to address individual queues or restore multiqueue behaviour once a shared qdisc has been attached. - Dumps only contain the root qdisc of queue 0, in case of non-shared qdiscs this means the statistics are incomplete. This patch reintroduces dev->qdisc, which points to the (single) root qdisc from userspace's point of view. Currently it either points to the first (non-shared) default qdisc, or a qdisc shared between all queues. The following patches will introduce a classful dummy qdisc, which will be used as root qdisc and contain the per-queue qdiscs as children. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/rtnetlink.c')
-rw-r--r--net/core/rtnetlink.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index bbcba2a41018..eb42873f2a3a 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -606,7 +606,6 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
606 int type, u32 pid, u32 seq, u32 change, 606 int type, u32 pid, u32 seq, u32 change,
607 unsigned int flags) 607 unsigned int flags)
608{ 608{
609 struct netdev_queue *txq;
610 struct ifinfomsg *ifm; 609 struct ifinfomsg *ifm;
611 struct nlmsghdr *nlh; 610 struct nlmsghdr *nlh;
612 const struct net_device_stats *stats; 611 const struct net_device_stats *stats;
@@ -637,9 +636,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
637 if (dev->master) 636 if (dev->master)
638 NLA_PUT_U32(skb, IFLA_MASTER, dev->master->ifindex); 637 NLA_PUT_U32(skb, IFLA_MASTER, dev->master->ifindex);
639 638
640 txq = netdev_get_tx_queue(dev, 0); 639 if (dev->qdisc)
641 if (txq->qdisc_sleeping) 640 NLA_PUT_STRING(skb, IFLA_QDISC, dev->qdisc->ops->id);
642 NLA_PUT_STRING(skb, IFLA_QDISC, txq->qdisc_sleeping->ops->id);
643 641
644 if (dev->ifalias) 642 if (dev->ifalias)
645 NLA_PUT_STRING(skb, IFLA_IFALIAS, dev->ifalias); 643 NLA_PUT_STRING(skb, IFLA_IFALIAS, dev->ifalias);