summary refs log tree commit diff
path: root/net/atm/common.c
diff options
context:
space:
mode:
authorStanislaw Gruszka <stf_xl@wp.pl>2005-11-29 16:16:21 -0800
committerDavid S. Miller <davem@davemloft.net>2005-11-29 16:16:21 -0800
commitaaaaaadbe7a663d110814db50fcbe7d320eb4c32 (patch)
tree316bdbd49e3a6ac7a78cad8797d148f79a343d45 /net/atm/common.c
parent49693280262a149e5430d3401e263e464c88334a (diff)
downloadlinux-aaaaaadbe7a663d110814db50fcbe7d320eb4c32.tar.gz
[ATM]: avoid race conditions related to atm_devs list
Use semaphore to protect atm_devs list, as no one need access to it from
interrupt context.  Avoid race conditions between atm_dev_register(),
atm_dev_lookup() and atm_dev_deregister().  Fix double spin_unlock() bug.

Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/atm/common.c')
-rw-r--r--net/atm/common.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/atm/common.c b/net/atm/common.c
index db9318fc6031..9e016f404e14 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -427,12 +427,12 @@ int vcc_connect(struct socket *sock, int itf, short vpi, int vci)
 		dev = try_then_request_module(atm_dev_lookup(itf), "atm-device-%d", itf);
 	} else {
 		dev = NULL;
-		spin_lock(&atm_dev_lock);
+		down(&atm_dev_mutex);
 		if (!list_empty(&atm_devs)) {
 			dev = list_entry(atm_devs.next, struct atm_dev, dev_list);
 			atm_dev_hold(dev);
 		}
-		spin_unlock(&atm_dev_lock);
+		up(&atm_dev_mutex);
 	}
 	if (!dev)
 		return -ENODEV;