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