diff options
author | Stanislaw Gruszka <stf_xl@wp.pl> | 2005-11-29 16:16:21 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-11-29 16:16:21 -0800 |
commit | aaaaaadbe7a663d110814db50fcbe7d320eb4c32 (patch) | |
tree | 316bdbd49e3a6ac7a78cad8797d148f79a343d45 /net/atm/common.c | |
parent | 49693280262a149e5430d3401e263e464c88334a (diff) | |
download | op-kernel-dev-aaaaaadbe7a663d110814db50fcbe7d320eb4c32.zip op-kernel-dev-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.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/atm/common.c b/net/atm/common.c index db9318f..9e016f4 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; |