ata: pata_parport: switch to dynamic root device
PATCH 1/1 ata: pata_parport: switch to dynamic root device
Driver core expects devices to be dynamically allocated and will, for example, complain loudly when no release function has been provided.
Use root_device_register() to allocate and register the root device instead of open coding using a static device.
Note that this also fixes a reference leak in the unlikely event that device_register() ever fails.
--- drivers/ata/pata_parport/pata_parport.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-)
drivers/ata/pata_parport/pata_parport.c +7 -14
@@ -459,19 +459,11 @@ static void pata_parport_dev_release(struct device *dev)kfree (pi); } -static void pata_parport_bus_release (struct device *dev) -{ -/* nothing to do here but required to avoid warning on device removal */ -} -static const struct bus_type pata_parport_bus_type = { .name =DRV_NAME , }; -static struct device pata_parport_bus = { - .init_name =DRV_NAME , - .release = pata_parport_bus_release, -}; +static struct device *pata_parport_bus;static const struct scsi_host_template pata_parport_sht = {PATA_PARPORT_SHT ("pata_parport" )
@@ -518,7 +510,7 @@ static struct pi_adapter *pi_init_one(struct parport *parport, }/* set up pi->dev before pi_probe_unit() so it can use dev_printk() */ - pi->dev.parent = &pata_parport_bus; + pi->dev.parent = pata_parport_bus; pi->dev.bus = &pata_parport_bus_type; pi->dev.driver = &pr->driver; pi->dev.release = pata_parport_dev_release;
@@ -780,8 +772,9 @@ static __init int pata_parport_init(void)return error; } - error =device_register (&pata_parport_bus); -if (error) { + pata_parport_bus =root_device_register (DRV_NAME ); +if (IS_ERR (pata_parport_bus)) { + error =PTR_ERR (pata_parport_bus);pr_err ("failed to register pata_parport bus, error: %d\n" , error); goto out_unregister_bus; }
@@ -811,7 +804,7 @@ static __init int pata_parport_init(void) out_remove_new:bus_remove_file (&pata_parport_bus_type, &bus_attr_new_device); out_unregister_dev: -device_unregister (&pata_parport_bus); +root_device_unregister (pata_parport_bus); out_unregister_bus:bus_unregister (&pata_parport_bus_type);return error;
@@ -822,7 +815,7 @@ static __exit void pata_parport_exit(void)parport_unregister_driver (&pata_parport_driver);bus_remove_file (&pata_parport_bus_type, &bus_attr_new_device);bus_remove_file (&pata_parport_bus_type, &bus_attr_delete_device); -device_unregister (&pata_parport_bus); +root_device_unregister (pata_parport_bus);bus_unregister (&pata_parport_bus_type); }
Signature · 1 line
2.53.0
Quoted 10 lines · Johan Hovold
Driver core expects devices to be dynamically allocated and will, for example, complain loudly when no release function has been provided.
Use
root_device_register()to allocate and register the root device instead of open coding using a static device.Note that this also fixes a reference leak in the unlikely event that
device_register()ever fails.Signed-off-by Johan Hovold <[email protected]>
Looks OK to me.
I suspect that this should go in for 7.1, right ?
Signature · 2 lines
Damien Le Moal Western Digital Research
Quoted 10 lines · Damien Le Moal
Quoted 9 lines · Johan Hovold
Driver core expects devices to be dynamically allocated and will, for example, complain loudly when no release function has been provided.
Use
root_device_register()to allocate and register the root device instead of open coding using a static device.Note that this also fixes a reference leak in the unlikely event that
device_register()ever fails.
Quoted 7 lines
Quoted 1 line
Signed-off-by Johan Hovold <[email protected]>Looks OK to me.
Reviewed-by Damien Le Moal <[email protected]>I suspect that this should go in for 7.1, right ?
Yeah, probably, because of the reference leak which someone may try to fix in the meantime.
Johan
Quoted 10 lines · Johan Hovold
Driver core expects devices to be dynamically allocated and will, for example, complain loudly when no release function has been provided.
Use
root_device_register()to allocate and register the root device instead of open coding using a static device.Note that this also fixes a reference leak in the unlikely event that
device_register()ever fails.[...]
Applied to libata/linux.git (for-7.1-fixes), thanks!
[1/1] ata: pata_parport: switch to dynamic root device
https://git.kernel.org/libata/linux/c/163f6494
Kind regards,
Niklas