mirror of https://gitee.com/openkylin/linux.git
[PATCH] PNP: handle sysfs errors
Signed-off-by: Jeff Garzik <jeff@garzik.org> Cc: Adam Belay <ambx1@neo.rr.com> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3889b26beb
commit
bfc7ee2070
|
@ -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,16 +314,20 @@ struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char
|
|||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue