diff options
Diffstat (limited to 'drivers/parport/share.c')
| -rw-r--r-- | drivers/parport/share.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/parport/share.c b/drivers/parport/share.c index 8067f54ce050..5ce5ef211bdb 100644 --- a/drivers/parport/share.c +++ b/drivers/parport/share.c @@ -891,8 +891,10 @@ parport_register_dev_model(struct parport *port, const char *name,  	par_dev->dev.release = free_pardevice;  	par_dev->devmodel = true;  	ret = device_register(&par_dev->dev); -	if (ret) -		goto err_put_dev; +	if (ret) { +		put_device(&par_dev->dev); +		goto err_put_port; +	}  	/* Chain this onto the list */  	par_dev->prev = NULL; @@ -907,7 +909,8 @@ parport_register_dev_model(struct parport *port, const char *name,  			spin_unlock(&port->physport->pardevice_lock);  			pr_debug("%s: cannot grant exclusive access for device %s\n",  				 port->name, name); -			goto err_put_dev; +			device_unregister(&par_dev->dev); +			goto err_put_port;  		}  		port->flags |= PARPORT_FLAG_EXCL;  	} @@ -938,8 +941,6 @@ parport_register_dev_model(struct parport *port, const char *name,  	return par_dev; -err_put_dev: -	put_device(&par_dev->dev);  err_free_devname:  	kfree(devname);  err_free_par_dev:  |