diff options
Diffstat (limited to 'drivers/net/xtsonic.c')
| -rw-r--r-- | drivers/net/xtsonic.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/xtsonic.c b/drivers/net/xtsonic.c index fdba9cb3a59..9f12026d98e 100644 --- a/drivers/net/xtsonic.c +++ b/drivers/net/xtsonic.c @@ -93,12 +93,20 @@ static unsigned short known_revisions[] =  static int xtsonic_open(struct net_device *dev)  { -	if (request_irq(dev->irq,sonic_interrupt,IRQF_DISABLED,"sonic",dev)) { +	int retval; + +	retval = request_irq(dev->irq, sonic_interrupt, IRQF_DISABLED, +				"sonic", dev); +	if (retval) {  		printk(KERN_ERR "%s: unable to get IRQ %d.\n",  		       dev->name, dev->irq);  		return -EAGAIN;  	} -	return sonic_open(dev); + +	retval = sonic_open(dev); +	if (retval) +		free_irq(dev->irq, dev); +	return retval;  }  static int xtsonic_close(struct net_device *dev)  |