[SCSI] zfcp: Call get_device on port before calling put_device
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Tue, 5 Oct 2010 15:12:54 +0000 (17:12 +0200)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 25 Oct 2010 14:42:37 +0000 (09:42 -0500)
zfcp_unit_release calls put_device on the port. Ensure that get_device
has been called before possibly triggering the release function
through put_device or device_unregister.

Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/s390/scsi/zfcp_unit.c

index 1119c535a667318381409eee3626bc2dcb85f1fa..20796ebc33cec3435cb5b2a2de297580e534fb8c 100644 (file)
@@ -142,6 +142,8 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
                return -ENOMEM;
        }
 
+       get_device(&port->dev);
+
        if (device_register(&unit->dev)) {
                put_device(&unit->dev);
                return -ENOMEM;
@@ -152,8 +154,6 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
                return -EINVAL;
        }
 
-       get_device(&port->dev);
-
        write_lock_irq(&port->unit_list_lock);
        list_add_tail(&unit->list, &port->unit_list);
        write_unlock_irq(&port->unit_list_lock);