Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfc7ee20 authored by Jeff Garzik's avatar Jeff Garzik Committed by Linus Torvalds
Browse files

[PATCH] PNP: handle sysfs errors



Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
Cc: Adam Belay <ambx1@neo.rr.com>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3889b26b
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -164,9 +164,17 @@ static DEVICE_ATTR(card_id,S_IRUGO,pnp_show_card_ids,NULL);

static int pnp_interface_attach_card(struct pnp_card *card)
{
	device_create_file(&card->dev,&dev_attr_name);
	device_create_file(&card->dev,&dev_attr_card_id);
	int rc = device_create_file(&card->dev,&dev_attr_name);
	if (rc) return rc;

	rc = device_create_file(&card->dev,&dev_attr_card_id);
	if (rc) goto err_name;

	return 0;

err_name:
	device_remove_file(&card->dev,&dev_attr_name);
	return rc;
}

/**
@@ -306,17 +314,21 @@ found:
	down_write(&dev->dev.bus->subsys.rwsem);
	dev->card_link = clink;
	dev->dev.driver = &drv->link.driver;
	if (pnp_bus_type.probe(&dev->dev)) {
	if (pnp_bus_type.probe(&dev->dev))
		goto err_out;
	if (device_bind_driver(&dev->dev))
		goto err_out;

	up_write(&dev->dev.bus->subsys.rwsem);

	return dev;

err_out:
	dev->dev.driver = NULL;
	dev->card_link = NULL;
	up_write(&dev->dev.bus->subsys.rwsem);
	return NULL;
}
	device_bind_driver(&dev->dev);
	up_write(&dev->dev.bus->subsys.rwsem);

	return dev;
}

/**
 * pnp_release_card_device - call this when the driver no longer needs the device
+14 −3
Original line number Diff line number Diff line
@@ -461,8 +461,19 @@ static DEVICE_ATTR(id,S_IRUGO,pnp_show_current_ids,NULL);

int pnp_interface_attach_device(struct pnp_dev *dev)
{
	device_create_file(&dev->dev,&dev_attr_options);
	device_create_file(&dev->dev,&dev_attr_resources);
	device_create_file(&dev->dev,&dev_attr_id);
	int rc = device_create_file(&dev->dev,&dev_attr_options);
	if (rc) goto err;
	rc = device_create_file(&dev->dev,&dev_attr_resources);
	if (rc) goto err_opt;
	rc = device_create_file(&dev->dev,&dev_attr_id);
	if (rc) goto err_res;

	return 0;

err_res:
	device_remove_file(&dev->dev,&dev_attr_resources);
err_opt:
	device_remove_file(&dev->dev,&dev_attr_options);
err:
	return rc;
}