diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 26 | 
1 files changed, 12 insertions, 14 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a9a77216310..71edb8b3634 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -605,8 +605,11 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,  			    int type, u32 pid, u32 seq, u32 change,  			    unsigned int flags)  { +	struct netdev_queue *txq;  	struct ifinfomsg *ifm;  	struct nlmsghdr *nlh; +	struct net_device_stats *stats; +	struct nlattr *attr;  	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);  	if (nlh == NULL) @@ -633,8 +636,9 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,  	if (dev->master)  		NLA_PUT_U32(skb, IFLA_MASTER, dev->master->ifindex); -	if (dev->qdisc_sleeping) -		NLA_PUT_STRING(skb, IFLA_QDISC, dev->qdisc_sleeping->ops->id); +	txq = netdev_get_tx_queue(dev, 0); +	if (txq->qdisc_sleeping) +		NLA_PUT_STRING(skb, IFLA_QDISC, txq->qdisc_sleeping->ops->id);  	if (1) {  		struct rtnl_link_ifmap map = { @@ -653,19 +657,13 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,  		NLA_PUT(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast);  	} -	if (dev->get_stats) { -		struct net_device_stats *stats = dev->get_stats(dev); -		if (stats) { -			struct nlattr *attr; +	attr = nla_reserve(skb, IFLA_STATS, +			sizeof(struct rtnl_link_stats)); +	if (attr == NULL) +		goto nla_put_failure; -			attr = nla_reserve(skb, IFLA_STATS, -					   sizeof(struct rtnl_link_stats)); -			if (attr == NULL) -				goto nla_put_failure; - -			copy_rtnl_link_stats(nla_data(attr), stats); -		} -	} +	stats = dev->get_stats(dev); +	copy_rtnl_link_stats(nla_data(attr), stats);  	if (dev->rtnl_link_ops) {  		if (rtnl_link_fill(skb, dev) < 0)  |