[PATCH] PCMCIA: handle sysfs, PCI errors

Handle sysfs and PCI errors correctly.

Signed-off-by: Jeff Garzik <jeff@garzik.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>

authored by

Jeff Garzik and committed by
Dominik Brodowski
4deb7c1e 26aaa3c2

+21 -6
+8 -3
drivers/pcmcia/pcmcia_ioctl.c
··· 128 128 int count, int *eof, void *data) 129 129 { 130 130 char *p = buf; 131 + int rc; 131 132 132 - bus_for_each_drv(&pcmcia_bus_type, NULL, 133 - (void *) &p, proc_read_drivers_callback); 133 + rc = bus_for_each_drv(&pcmcia_bus_type, NULL, 134 + (void *) &p, proc_read_drivers_callback); 135 + if (rc < 0) 136 + return rc; 134 137 135 138 return (p - buf); 136 139 } ··· 272 269 * Prevent this racing with a card insertion. 273 270 */ 274 271 mutex_lock(&s->skt_mutex); 275 - bus_rescan_devices(&pcmcia_bus_type); 272 + ret = bus_rescan_devices(&pcmcia_bus_type); 276 273 mutex_unlock(&s->skt_mutex); 274 + if (ret) 275 + goto err_put_module; 277 276 278 277 /* check whether the driver indeed matched. I don't care if this 279 278 * is racy or not, because it can only happen on cardmgr access
+13 -3
drivers/pcmcia/yenta_socket.c
··· 1197 1197 ret = pcmcia_register_socket(&socket->socket); 1198 1198 if (ret == 0) { 1199 1199 /* Add the yenta register attributes */ 1200 - device_create_file(&dev->dev, &dev_attr_yenta_registers); 1201 - goto out; 1200 + ret = device_create_file(&dev->dev, &dev_attr_yenta_registers); 1201 + if (ret == 0) 1202 + goto out; 1203 + 1204 + /* error path... */ 1205 + pcmcia_unregister_socket(&socket->socket); 1202 1206 } 1203 1207 1204 1208 unmap: ··· 1252 1248 struct yenta_socket *socket = pci_get_drvdata(dev); 1253 1249 1254 1250 if (socket) { 1251 + int rc; 1252 + 1255 1253 pci_set_power_state(dev, 0); 1256 1254 /* FIXME: pci_restore_state needs to have a better interface */ 1257 1255 pci_restore_state(dev); 1258 1256 pci_write_config_dword(dev, 16*4, socket->saved_state[0]); 1259 1257 pci_write_config_dword(dev, 17*4, socket->saved_state[1]); 1260 - pci_enable_device(dev); 1258 + 1259 + rc = pci_enable_device(dev); 1260 + if (rc) 1261 + return rc; 1262 + 1261 1263 pci_set_master(dev); 1262 1264 1263 1265 if (socket->type && socket->type->restore_state)