[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>

authored by Mitchell Blank Jr and committed by David S. Miller c9933d08 18955cfc

+10 -20
+10 -20
net/atm/common.c
··· 423 423 if (vcc->qos.txtp.traffic_class == ATM_ANYCLASS || 424 424 vcc->qos.rxtp.traffic_class == ATM_ANYCLASS) 425 425 return -EINVAL; 426 - if (itf != ATM_ITF_ANY) { 426 + if (likely(itf != ATM_ITF_ANY)) { 427 427 dev = atm_dev_lookup(itf); 428 - if (!dev) 429 - return -ENODEV; 430 - error = __vcc_connect(vcc, dev, vpi, vci); 431 - if (error) { 432 - atm_dev_put(dev); 433 - return error; 434 - } 435 428 } else { 436 - struct list_head *p, *next; 437 - 438 429 dev = NULL; 439 430 spin_lock(&atm_dev_lock); 440 - list_for_each_safe(p, next, &atm_devs) { 441 - dev = list_entry(p, struct atm_dev, dev_list); 431 + if (!list_empty(&atm_devs)) { 432 + dev = list_entry(atm_devs.next, struct atm_dev, dev_list); 442 433 atm_dev_hold(dev); 443 - spin_unlock(&atm_dev_lock); 444 - if (!__vcc_connect(vcc, dev, vpi, vci)) 445 - break; 446 - atm_dev_put(dev); 447 - dev = NULL; 448 - spin_lock(&atm_dev_lock); 449 434 } 450 435 spin_unlock(&atm_dev_lock); 451 - if (!dev) 452 - return -ENODEV; 436 + } 437 + if (!dev) 438 + return -ENODEV; 439 + error = __vcc_connect(vcc, dev, vpi, vci); 440 + if (error) { 441 + atm_dev_put(dev); 442 + return error; 453 443 } 454 444 if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC) 455 445 set_bit(ATM_VF_PARTIAL,&vcc->flags);