mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
[ATM]: always return the first interface for ATM_ITF_ANY
From: Mitchell Blank Jr <mitch@sfgoth.com> Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
18955cfcb2
commit
c9933d0856
@ -423,33 +423,23 @@ int vcc_connect(struct socket *sock, int itf, short vpi, int vci)
|
||||
if (vcc->qos.txtp.traffic_class == ATM_ANYCLASS ||
|
||||
vcc->qos.rxtp.traffic_class == ATM_ANYCLASS)
|
||||
return -EINVAL;
|
||||
if (itf != ATM_ITF_ANY) {
|
||||
if (likely(itf != ATM_ITF_ANY)) {
|
||||
dev = atm_dev_lookup(itf);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
error = __vcc_connect(vcc, dev, vpi, vci);
|
||||
if (error) {
|
||||
atm_dev_put(dev);
|
||||
return error;
|
||||
}
|
||||
} else {
|
||||
struct list_head *p, *next;
|
||||
|
||||
dev = NULL;
|
||||
spin_lock(&atm_dev_lock);
|
||||
list_for_each_safe(p, next, &atm_devs) {
|
||||
dev = list_entry(p, struct atm_dev, dev_list);
|
||||
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);
|
||||
if (!__vcc_connect(vcc, dev, vpi, vci))
|
||||
break;
|
||||
atm_dev_put(dev);
|
||||
dev = NULL;
|
||||
spin_lock(&atm_dev_lock);
|
||||
}
|
||||
spin_unlock(&atm_dev_lock);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
error = __vcc_connect(vcc, dev, vpi, vci);
|
||||
if (error) {
|
||||
atm_dev_put(dev);
|
||||
return error;
|
||||
}
|
||||
if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC)
|
||||
set_bit(ATM_VF_PARTIAL,&vcc->flags);
|
||||
|
Loading…
Reference in New Issue
Block a user