diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_scsi.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 99db02062c3b..16e2d64658af 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_SCSI | 22 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_SCSI |
23 | 23 | ||
24 | #include "zfcp_ext.h" | 24 | #include "zfcp_ext.h" |
25 | #include <asm/atomic.h> | ||
25 | 26 | ||
26 | static void zfcp_scsi_slave_destroy(struct scsi_device *sdp); | 27 | static void zfcp_scsi_slave_destroy(struct scsi_device *sdp); |
27 | static int zfcp_scsi_slave_alloc(struct scsi_device *sdp); | 28 | static int zfcp_scsi_slave_alloc(struct scsi_device *sdp); |
@@ -179,6 +180,10 @@ static void zfcp_scsi_slave_destroy(struct scsi_device *sdpnt) | |||
179 | struct zfcp_unit *unit = (struct zfcp_unit *) sdpnt->hostdata; | 180 | struct zfcp_unit *unit = (struct zfcp_unit *) sdpnt->hostdata; |
180 | 181 | ||
181 | if (unit) { | 182 | if (unit) { |
183 | zfcp_erp_wait(unit->port->adapter); | ||
184 | wait_event(unit->scsi_scan_wq, | ||
185 | atomic_test_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, | ||
186 | &unit->status) == 0); | ||
182 | atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); | 187 | atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); |
183 | sdpnt->hostdata = NULL; | 188 | sdpnt->hostdata = NULL; |
184 | unit->device = NULL; | 189 | unit->device = NULL; |
@@ -402,8 +407,8 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
402 | 407 | ||
403 | /* Check whether corresponding fsf_req is still pending */ | 408 | /* Check whether corresponding fsf_req is still pending */ |
404 | spin_lock(&adapter->req_list_lock); | 409 | spin_lock(&adapter->req_list_lock); |
405 | fsf_req = zfcp_reqlist_ismember(adapter, (unsigned long) | 410 | fsf_req = zfcp_reqlist_find(adapter, |
406 | scpnt->host_scribble); | 411 | (unsigned long) scpnt->host_scribble); |
407 | spin_unlock(&adapter->req_list_lock); | 412 | spin_unlock(&adapter->req_list_lock); |
408 | if (!fsf_req) { | 413 | if (!fsf_req) { |
409 | write_unlock_irqrestore(&adapter->abort_lock, flags); | 414 | write_unlock_irqrestore(&adapter->abort_lock, flags); |