Configuring a LUN in zfcp, also creates a SCSI device. For
consistency, it makes sense to remove the SCSI device when the LUN is
deconfigured. Replace the flush_work with the call to
scsi_remove_device: scsi_remove_device also takes the scan_mutex that
synchronizes itself with any long running device discovery.
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>
        struct work_struct     test_link_work;
        struct work_struct     rport_work;
        enum { RPORT_NONE, RPORT_ADD, RPORT_DEL }  rport_task;
+       unsigned int            starget_id;
 };
 
 struct zfcp_unit {
 
        rport->maxframe_size = port->maxframe_size;
        rport->supported_classes = port->supported_classes;
        port->rport = rport;
+       port->starget_id = rport->scsi_target_id;
 
        zfcp_scsi_queue_unit_register(port);
 }
 
        struct zfcp_unit *unit;
        u64 fcp_lun;
        int retval = -EINVAL;
+       struct scsi_device *sdev;
 
        if (!(port && get_device(&port->dev)))
                return -EBUSY;
        else
                retval = 0;
 
-       /* wait for possible timeout during SCSI probe */
-       flush_work(&unit->scsi_work);
+       sdev = scsi_device_lookup(port->adapter->scsi_host, 0,
+                                 port->starget_id,
+                                 scsilun_to_int((struct scsi_lun *)&fcp_lun));
+       if (sdev) {
+               scsi_remove_device(sdev);
+               scsi_device_put(sdev);
+       }
 
        write_lock_irq(&port->unit_list_lock);
        list_del(&unit->list);