summaryrefslogtreecommitdiffstats
path: root/patches/ipv4/0001-IPV4-unlock-rtnl_mutex-before-waiting-for-carrier-on.patch
blob: 955bfa8956a54bacd128d82b34bb1f116328033d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 1828e68d8f0b99dbe388de4b6703afd90fdd7493 Mon Sep 17 00:00:00 2001
From: Dragos Motrea <Dragos.Motrea@enea.com>
Date: Thu, 16 Mar 2017 14:04:17 +0100
Subject: [PATCH] IPV4: unlock rtnl_mutex before waiting for carrier on

There is a race condition between ip auto configuration and the ethernet
driver. The ip configuration is taking the rtnl_mutex in the ic_open_devs()
function and then is waiting 120 seconds for a carrier on at least
one network device. The driver is locked in the mutex and the carrier on
is not sent. After 120 seconds, the mutex is unlocked and the driver is
continuing its task execution.

The mutex should be unlocked in the ip auto configuration before waiting the
carrier on from the ethernet driver.

Upstream-Status: Pending

Signed-off-by: Dragos Motrea <Dragos.Motrea@enea.com>
Signed-off-by: Adrian Calianu <adrian.calianu@enea.com>
---
 net/ipv4/ipconfig.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 3cd13e1bc6a7..2841417d8ab1 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -263,6 +263,7 @@ static int __init ic_open_devs(void)
 				 dev->name, able, d->xid);
 		}
 	}
+    rtnl_unlock();
 
 	/* no point in waiting if we could not bring up at least one device */
 	if (!ic_first_dev)
@@ -290,8 +291,6 @@ static int __init ic_open_devs(void)
 		next_msg = jiffies + msecs_to_jiffies(20000);
 	}
 have_carrier:
-	rtnl_unlock();
-
 	*last = NULL;
 
 	if (!ic_first_dev) {
-- 
2.29.2