Re: [BISECTED] Linux 3.2: Networking out of LAN does not work
From: Rune Magnussen <hidden>
Date: 2012-01-26 07:14:59
Eric Dumazet [off-list ref] Sendt af: netdev-owner@vger.kernel.org 25-01-2012 12:06 58efa841-5316-9749-1633-85629e363385 Til Rune Magnussen [off-list ref], David Miller [off-list ref] cc netdev@vger.kernel.org, Mihai Maruseac [off-list ref] Emne Re: [BISECTED] Linux 3.2: Networking out of LAN does not work
OK please test the following patch.
[PATCH] net: use index hash for /proc/net/dev
Commit f04565ddf52e (dev: use name hash for dev_seq_ops) added a regression for legacy apps expecting to find devices in a particular order.
Instead of using name hash, we can use dev_index_head hash, based on device index, to not change device ordering.
Name hash order is not particularly useful, while index ordering is meaningful on machines where no more than 256 devices are ever created.
"cat /proc/net/dev" and "ip link" will output devices in same order.
quoted hunk ↗ jump to hunk
Reported-by: Rune Magnussen <redacted> Bisected-by: Rune Magnussen [off-list ref] Cc: Mihai Maruseac <redacted> Signed-off-by: Eric Dumazet <redacted> --- net/core/dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)diff --git a/net/core/dev.c b/net/core/dev.c index 115dee1..c58dba3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c@@ -4052,9 +4052,9 @@ static inline struct net_device
*dev_from_same_bucket(struct seq_file *seq)
bucket = get_bucket(state->pos);
offset = get_offset(state->pos);
- h = &net->dev_name_head[bucket];
+ h = dev_index_hash(net, bucket);
count = 0;
- hlist_for_each_entry_rcu(dev, p, h, name_hlist) {
+ hlist_for_each_entry_rcu(dev, p, h, index_hlist) {
if (count++ == offset) {
state->pos = set_bucket_offset(bucket, count);
return dev;
The patch works for me. I applied it on top of v3.2.1 and it fixed my problem. I have not tested it on other computers yet. Greetings Rune