atm: correct sysfs 'device' link creation and parent relationships
The ATM subsystem was incorrectly creating the 'device' link for ATM nodes in sysfs. This led to incorrect device/parent relationships exposed by sysfs and udev. Instead of rolling the 'device' link by hand in the generic ATM code, pass each ATM driver's bus device down to the sysfs code and let sysfs do this stuff correctly. Signed-off-by: Dan Williams <dcbw@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
fb890ae7d6
commit
d9ca676bcb
@@ -154,7 +154,7 @@ static int __init adummy_init(void)
|
||||
err = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, NULL);
|
||||
atm_dev = atm_dev_register(DEV_LABEL, NULL, &adummy_ops, -1, NULL);
|
||||
if (!atm_dev) {
|
||||
printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
|
||||
err = -ENODEV;
|
||||
|
@@ -2244,7 +2244,8 @@ static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_
|
||||
goto out_reset;
|
||||
}
|
||||
|
||||
dev->atm_dev = atm_dev_register (DEV_LABEL, &amb_ops, -1, NULL);
|
||||
dev->atm_dev = atm_dev_register (DEV_LABEL, &pci_dev->dev, &amb_ops, -1,
|
||||
NULL);
|
||||
if (!dev->atm_dev) {
|
||||
PRINTD (DBG_ERR, "failed to register Madge ATM adapter");
|
||||
err = -EINVAL;
|
||||
|
@@ -366,7 +366,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result)
|
||||
if (!dev_data)
|
||||
return -ENOMEM;
|
||||
|
||||
dev = atm_dev_register(DEV_LABEL,&atmtcp_v_dev_ops,itf,NULL);
|
||||
dev = atm_dev_register(DEV_LABEL,NULL,&atmtcp_v_dev_ops,itf,NULL);
|
||||
if (!dev) {
|
||||
kfree(dev_data);
|
||||
return itf == -1 ? -ENOMEM : -EBUSY;
|
||||
|
@@ -2244,7 +2244,7 @@ static int __devinit eni_init_one(struct pci_dev *pci_dev,
|
||||
&zeroes);
|
||||
if (!cpu_zeroes) goto out1;
|
||||
}
|
||||
dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL);
|
||||
dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
|
||||
if (!dev) goto out2;
|
||||
pci_set_drvdata(pci_dev, dev);
|
||||
eni_dev->pci_dev = pci_dev;
|
||||
|
@@ -1911,7 +1911,7 @@ static int __devinit firestream_init_one (struct pci_dev *pci_dev,
|
||||
fs_dev, sizeof (struct fs_dev));
|
||||
if (!fs_dev)
|
||||
goto err_out;
|
||||
atm_dev = atm_dev_register("fs", &ops, -1, NULL);
|
||||
atm_dev = atm_dev_register("fs", &pci_dev->dev, &ops, -1, NULL);
|
||||
if (!atm_dev)
|
||||
goto err_out_free_fs_dev;
|
||||
|
||||
|
@@ -2567,14 +2567,14 @@ release:
|
||||
|
||||
|
||||
static int __devinit
|
||||
fore200e_register(struct fore200e* fore200e)
|
||||
fore200e_register(struct fore200e* fore200e, struct device *parent)
|
||||
{
|
||||
struct atm_dev* atm_dev;
|
||||
|
||||
DPRINTK(2, "device %s being registered\n", fore200e->name);
|
||||
|
||||
atm_dev = atm_dev_register(fore200e->bus->proc_name, &fore200e_ops, -1,
|
||||
NULL);
|
||||
atm_dev = atm_dev_register(fore200e->bus->proc_name, parent, &fore200e_ops,
|
||||
-1, NULL);
|
||||
if (atm_dev == NULL) {
|
||||
printk(FORE200E "unable to register device %s\n", fore200e->name);
|
||||
return -ENODEV;
|
||||
@@ -2594,9 +2594,9 @@ fore200e_register(struct fore200e* fore200e)
|
||||
|
||||
|
||||
static int __devinit
|
||||
fore200e_init(struct fore200e* fore200e)
|
||||
fore200e_init(struct fore200e* fore200e, struct device *parent)
|
||||
{
|
||||
if (fore200e_register(fore200e) < 0)
|
||||
if (fore200e_register(fore200e, parent) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (fore200e->bus->configure(fore200e) < 0)
|
||||
@@ -2662,7 +2662,7 @@ static int __devinit fore200e_sba_probe(struct platform_device *op,
|
||||
|
||||
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
||||
|
||||
err = fore200e_init(fore200e);
|
||||
err = fore200e_init(fore200e, &op->dev);
|
||||
if (err < 0) {
|
||||
fore200e_shutdown(fore200e);
|
||||
kfree(fore200e);
|
||||
@@ -2740,7 +2740,7 @@ fore200e_pca_detect(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent
|
||||
|
||||
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
||||
|
||||
err = fore200e_init(fore200e);
|
||||
err = fore200e_init(fore200e, &pci_dev->dev);
|
||||
if (err < 0) {
|
||||
fore200e_shutdown(fore200e);
|
||||
goto out_free;
|
||||
|
@@ -366,7 +366,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
|
||||
goto init_one_failure;
|
||||
}
|
||||
|
||||
atm_dev = atm_dev_register(DEV_LABEL, &he_ops, -1, NULL);
|
||||
atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &he_ops, -1, NULL);
|
||||
if (!atm_dev) {
|
||||
err = -ENODEV;
|
||||
goto init_one_failure;
|
||||
|
@@ -2733,7 +2733,8 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_
|
||||
PRINTD(DBG_INFO, "found Madge ATM adapter (hrz) at: IO %x, IRQ %u, MEM %p",
|
||||
iobase, irq, membase);
|
||||
|
||||
dev->atm_dev = atm_dev_register(DEV_LABEL, &hrz_ops, -1, NULL);
|
||||
dev->atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &hrz_ops, -1,
|
||||
NULL);
|
||||
if (!(dev->atm_dev)) {
|
||||
PRINTD(DBG_ERR, "failed to register Madge ATM adapter");
|
||||
err = -EINVAL;
|
||||
|
@@ -3698,7 +3698,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
|
||||
goto err_out_iounmap;
|
||||
}
|
||||
|
||||
dev = atm_dev_register("idt77252", &idt77252_ops, -1, NULL);
|
||||
dev = atm_dev_register("idt77252", &pcidev->dev, &idt77252_ops, -1,
|
||||
NULL);
|
||||
if (!dev) {
|
||||
printk("%s: can't register atm device\n", card->name);
|
||||
err = -EIO;
|
||||
|
@@ -3172,7 +3172,7 @@ static int __devinit ia_init_one(struct pci_dev *pdev,
|
||||
ret = -ENODEV;
|
||||
goto err_out_free_iadev;
|
||||
}
|
||||
dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
||||
dev = atm_dev_register(DEV_LABEL, &pdev->dev, &ops, -1, NULL);
|
||||
if (!dev) {
|
||||
ret = -ENOMEM;
|
||||
goto err_out_disable_dev;
|
||||
|
@@ -2591,7 +2591,7 @@ static int __devinit lanai_init_one(struct pci_dev *pci,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
atmdev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
||||
atmdev = atm_dev_register(DEV_LABEL, &pci->dev, &ops, -1, NULL);
|
||||
if (atmdev == NULL) {
|
||||
printk(KERN_ERR DEV_LABEL
|
||||
": couldn't register atm device!\n");
|
||||
|
@@ -771,7 +771,8 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev)
|
||||
}
|
||||
|
||||
/* Register device */
|
||||
card->atmdev = atm_dev_register("nicstar", &atm_ops, -1, NULL);
|
||||
card->atmdev = atm_dev_register("nicstar", &card->pcidev->dev, &atm_ops,
|
||||
-1, NULL);
|
||||
if (card->atmdev == NULL) {
|
||||
printk("nicstar%d: can't register device.\n", i);
|
||||
error = 17;
|
||||
|
@@ -166,7 +166,7 @@ static irqreturn_t solos_irq(int irq, void *dev_id);
|
||||
static struct atm_vcc* find_vcc(struct atm_dev *dev, short vpi, int vci);
|
||||
static int list_vccs(int vci);
|
||||
static void release_vccs(struct atm_dev *dev);
|
||||
static int atm_init(struct solos_card *);
|
||||
static int atm_init(struct solos_card *, struct device *);
|
||||
static void atm_remove(struct solos_card *);
|
||||
static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
|
||||
static void solos_bh(unsigned long);
|
||||
@@ -1210,7 +1210,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
if (db_firmware_upgrade)
|
||||
flash_upgrade(card, 3);
|
||||
|
||||
err = atm_init(card);
|
||||
err = atm_init(card, &dev->dev);
|
||||
if (err)
|
||||
goto out_free_irq;
|
||||
|
||||
@@ -1233,7 +1233,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int atm_init(struct solos_card *card)
|
||||
static int atm_init(struct solos_card *card, struct device *parent)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1244,7 +1244,7 @@ static int atm_init(struct solos_card *card)
|
||||
skb_queue_head_init(&card->tx_queue[i]);
|
||||
skb_queue_head_init(&card->cli_queue[i]);
|
||||
|
||||
card->atmdev[i] = atm_dev_register("solos-pci", &fpga_ops, -1, NULL);
|
||||
card->atmdev[i] = atm_dev_register("solos-pci", parent, &fpga_ops, -1, NULL);
|
||||
if (!card->atmdev[i]) {
|
||||
dev_err(&card->dev->dev, "Could not register ATM device %d\n", i);
|
||||
atm_remove(card);
|
||||
|
@@ -1597,7 +1597,7 @@ static int __devinit zatm_init_one(struct pci_dev *pci_dev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
||||
dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
|
||||
if (!dev)
|
||||
goto out_free;
|
||||
|
||||
|
Reference in New Issue
Block a user