| .. | .. |
|---|
| 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); |
|---|