mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-22 00:42:01 +02:00
RDMA/srp: Rework the srp_add_port() error path
device_register() always calls device_initialize() so calling device_del() is safe even if device_register() fails. Implement the following advice from the comment block above device_register(): "NOTE: _Never_ directly free @dev after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead." Keep the kfree() call in the error path since srp_release_dev() does not free the host. Link: https://lore.kernel.org/r/20220825213900.864587-2-bvanassche@acm.org Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
3d67e7e236
commit
c8e4c23976
|
@ -3909,20 +3909,19 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
|
|||
port);
|
||||
|
||||
if (device_register(&host->dev))
|
||||
goto free_host;
|
||||
goto put_host;
|
||||
if (device_create_file(&host->dev, &dev_attr_add_target))
|
||||
goto err_class;
|
||||
goto put_host;
|
||||
if (device_create_file(&host->dev, &dev_attr_ibdev))
|
||||
goto err_class;
|
||||
goto put_host;
|
||||
if (device_create_file(&host->dev, &dev_attr_port))
|
||||
goto err_class;
|
||||
goto put_host;
|
||||
|
||||
return host;
|
||||
|
||||
err_class:
|
||||
device_unregister(&host->dev);
|
||||
|
||||
free_host:
|
||||
put_host:
|
||||
device_del(&host->dev);
|
||||
put_device(&host->dev);
|
||||
kfree(host);
|
||||
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue
Block a user