diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_sysfs.c')
| -rw-r--r-- | drivers/s390/scsi/zfcp_sysfs.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c index f5f60698dc4..b4561c86e23 100644 --- a/drivers/s390/scsi/zfcp_sysfs.c +++ b/drivers/s390/scsi/zfcp_sysfs.c @@ -275,7 +275,7 @@ static ssize_t zfcp_sysfs_unit_add_store(struct device *dev,  	zfcp_erp_unit_reopen(unit, 0, "syuas_1", NULL);  	zfcp_erp_wait(unit->port->adapter); -	flush_work(&unit->scsi_work); +	zfcp_scsi_scan(unit);  out:  	put_device(&port->dev);  	return retval ? retval : (ssize_t) count; @@ -290,6 +290,7 @@ static ssize_t zfcp_sysfs_unit_remove_store(struct device *dev,  	struct zfcp_unit *unit;  	u64 fcp_lun;  	int retval = -EINVAL; +	struct scsi_device *sdev;  	if (!(port && get_device(&port->dev)))  		return -EBUSY; @@ -303,8 +304,13 @@ static ssize_t zfcp_sysfs_unit_remove_store(struct device *dev,  	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);  |