diff options
Diffstat (limited to 'net/sched/sch_api.c')
| -rw-r--r-- | net/sched/sch_api.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 206dc24add3a..d7b93429f0cc 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -960,6 +960,17 @@ static struct Qdisc *qdisc_create(struct net_device *dev,  	sch->handle = handle; +	/* This exist to keep backward compatible with a userspace +	 * loophole, what allowed userspace to get IFF_NO_QUEUE +	 * facility on older kernels by setting tx_queue_len=0 (prior +	 * to qdisc init), and then forgot to reinit tx_queue_len +	 * before again attaching a qdisc. +	 */ +	if ((dev->priv_flags & IFF_NO_QUEUE) && (dev->tx_queue_len == 0)) { +		dev->tx_queue_len = DEFAULT_TX_QUEUE_LEN; +		netdev_info(dev, "Caught tx_queue_len zero misconfig\n"); +	} +  	if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS])) == 0) {  		if (qdisc_is_percpu_stats(sch)) {  			sch->cpu_bstats = @@ -1384,7 +1395,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid,  	if (gnet_stats_copy_basic(qdisc_root_sleeping_running(q),  				  &d, cpu_bstats, &q->bstats) < 0 || -	    gnet_stats_copy_rate_est(&d, &q->bstats, &q->rate_est) < 0 || +	    gnet_stats_copy_rate_est(&d, &q->rate_est) < 0 ||  	    gnet_stats_copy_queue(&d, cpu_qstats, &q->qstats, qlen) < 0)  		goto nla_put_failure;  |