- for (walk = &dev->local; *walk; walk = &(*walk)->next)
- if (identical(&(*walk)->addr,addr)) break;
- if (!*walk) {
- spin_unlock_irqrestore(&dev->lock, flags);
- return -ENOENT;
+ if (atype == ATM_ADDR_LECS)
+ head = &dev->lecs;
+ else
+ head = &dev->local;
+ list_for_each_entry(this, head, entry) {
+ if (identical(&this->addr, addr)) {
+ list_del(&this->entry);
+ spin_unlock_irqrestore(&dev->lock, flags);
+ kfree(this);
+ if (head == &dev->local)
+ notify_sigd(dev);
+ return 0;
+ }