| .. | .. | 
|---|
| 113 | 113 | struct com20020_dev *info; | 
|---|
| 114 | 114 | struct net_device *dev; | 
|---|
| 115 | 115 | struct arcnet_local *lp; | 
|---|
|  | 116 | +	int ret = -ENOMEM; | 
|---|
| 116 | 117 |  | 
|---|
| 117 | 118 | dev_dbg(&p_dev->dev, "com20020_attach()\n"); | 
|---|
| 118 | 119 |  | 
|---|
| .. | .. | 
|---|
| 142 | 143 | info->dev = dev; | 
|---|
| 143 | 144 | p_dev->priv = info; | 
|---|
| 144 | 145 |  | 
|---|
| 145 |  | -	return com20020_config(p_dev); | 
|---|
|  | 146 | +	ret = com20020_config(p_dev); | 
|---|
|  | 147 | +	if (ret) | 
|---|
|  | 148 | +		goto fail_config; | 
|---|
| 146 | 149 |  | 
|---|
|  | 150 | +	return 0; | 
|---|
|  | 151 | + | 
|---|
|  | 152 | +fail_config: | 
|---|
|  | 153 | +	free_arcdev(dev); | 
|---|
| 147 | 154 | fail_alloc_dev: | 
|---|
| 148 | 155 | kfree(info); | 
|---|
| 149 | 156 | fail_alloc_info: | 
|---|
| 150 |  | -	return -ENOMEM; | 
|---|
|  | 157 | +	return ret; | 
|---|
| 151 | 158 | } /* com20020_attach */ | 
|---|
| 152 | 159 |  | 
|---|
| 153 | 160 | static void com20020_detach(struct pcmcia_device *link) | 
|---|
| .. | .. | 
|---|
| 177 | 184 | dev = info->dev; | 
|---|
| 178 | 185 | if (dev) { | 
|---|
| 179 | 186 | dev_dbg(&link->dev, "kfree...\n"); | 
|---|
| 180 |  | -			free_netdev(dev); | 
|---|
|  | 187 | +			free_arcdev(dev); | 
|---|
| 181 | 188 | } | 
|---|
| 182 | 189 | dev_dbg(&link->dev, "kfree2...\n"); | 
|---|
| 183 | 190 | kfree(info); | 
|---|