[linux] 01/02: IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Wed Feb 17 18:00:39 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch sid
in repository linux.

commit 96504c28700902aa296085e6ccbfa8f18fd22d68
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Wed Feb 17 16:05:10 2016 +0000

    IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
---
 debian/changelog                                   |  1 +
 ...e-fix-for-drivers-not-calling-ether_setup.patch | 41 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 3 files changed, 43 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 5befcf2..c6bf414 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -36,6 +36,7 @@ linux (4.4.1-1) UNRELEASED; urgency=medium
     - [i386/686-pae] mm: Fix types used in pgprot cacheability flags
       translations
     - [i386/686-pae] PCI: Set pci=nobios by default
+  * IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
 
   [ Roger Shimizu ]
   * Enable TTY_PRINTK as module (Closes: #814540).
diff --git a/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch b/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
new file mode 100644
index 0000000..defcd96
--- /dev/null
+++ b/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
@@ -0,0 +1,41 @@
+From: Phil Sutter <phil at nwl.cc>
+Date: Wed, 17 Feb 2016 15:37:43 +0100
+Subject: IFF_NO_QUEUE: Fix for drivers not calling ether_setup()
+Origin: http://mid.gmane.org/1455719863-25730-1-git-send-email-phil@nwl.cc
+
+My implementation around IFF_NO_QUEUE driver flag assumed that leaving
+tx_queue_len untouched (specifically: not setting it to zero) by drivers
+would make it possible to assign a regular qdisc to them without having
+to worry about setting tx_queue_len to a useful value. This was only
+partially true: I overlooked that some drivers don't call ether_setup()
+and therefore not initialize tx_queue_len to the default value of 1000.
+Consequently, removing the workarounds in place for that case in qdisc
+implementations which cared about it (namely, pfifo, bfifo, gred, htb,
+plug and sfb) leads to problems with these specific interface types and
+qdiscs.
+
+Luckily, there's already a sanitization point for drivers setting
+tx_queue_len to zero, which can be reused to assign the fallback value
+most qdisc implementations used, which is 1.
+
+Fixes: 348e3435cbefa ("net: sched: drop all special handling of tx_queue_len == 0")
+Tested-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
+Signed-off-by: Phil Sutter <phil at nwl.cc>
+---
+ net/core/dev.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -7125,8 +7125,10 @@ struct net_device *alloc_netdev_mqs(int
+ 	dev->priv_flags = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM;
+ 	setup(dev);
+ 
+-	if (!dev->tx_queue_len)
++	if (!dev->tx_queue_len) {
+ 		dev->priv_flags |= IFF_NO_QUEUE;
++		dev->tx_queue_len = 1;
++	}
+ 
+ 	dev->num_tx_queues = txqs;
+ 	dev->real_num_tx_queues = txqs;
diff --git a/debian/patches/series b/debian/patches/series
index 646e47c..379f50e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -132,3 +132,4 @@ bugfix/x86/x86-efi-build-our-own-page-table-structures.patch
 bugfix/x86/x86-efi-setup-separate-efi-page-tables-in-kexec-path.patch
 bugfix/x86/x86-mm-fix-types-used-in-pgprot-cacheability-flags-t.patch
 debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
+bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list