Commit 1de1b43b5f0bb536126e31f07ec833e01969ed1c
Committed by
James Bottomley
1 parent
e39c8877a4
Exists in
master
and in
7 other branches
[SCSI] zfcp: Fix deadlock when adding invalid LUN
When adding an invalid LUN, there is a deadlock between the add via scsi_scan_target and the slave_destroy handler: The handler waits for the scan to complete, but for an invalid unit, scsi_scan_target directly calls the slave_destroy handler. Fix the deadlock by removing the wait in the slave_destroy handler, it was not necessary anyway. Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Showing 4 changed files with 0 additions and 10 deletions Side-by-side Diff
drivers/s390/scsi/zfcp_aux.c
... | ... | @@ -844,8 +844,6 @@ |
844 | 844 | unit->sysfs_device.release = zfcp_sysfs_unit_release; |
845 | 845 | dev_set_drvdata(&unit->sysfs_device, unit); |
846 | 846 | |
847 | - init_waitqueue_head(&unit->scsi_scan_wq); | |
848 | - | |
849 | 847 | /* mark unit unusable as long as sysfs registration is not complete */ |
850 | 848 | atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &unit->status); |
851 | 849 |
drivers/s390/scsi/zfcp_def.h
... | ... | @@ -983,10 +983,6 @@ |
983 | 983 | struct scsi_device *device; /* scsi device struct pointer */ |
984 | 984 | struct zfcp_erp_action erp_action; /* pending error recovery */ |
985 | 985 | atomic_t erp_counter; |
986 | - wait_queue_head_t scsi_scan_wq; /* can be used to wait until | |
987 | - all scsi_scan_target | |
988 | - requests have been | |
989 | - completed. */ | |
990 | 986 | }; |
991 | 987 | |
992 | 988 | /* FSF request */ |
drivers/s390/scsi/zfcp_erp.c
... | ... | @@ -1609,7 +1609,6 @@ |
1609 | 1609 | scsi_scan_target(&rport->dev, 0, rport->scsi_target_id, |
1610 | 1610 | unit->scsi_lun, 0); |
1611 | 1611 | atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status); |
1612 | - wake_up(&unit->scsi_scan_wq); | |
1613 | 1612 | zfcp_unit_put(unit); |
1614 | 1613 | kfree(p); |
1615 | 1614 | } |
drivers/s390/scsi/zfcp_scsi.c
... | ... | @@ -180,9 +180,6 @@ |
180 | 180 | |
181 | 181 | if (unit) { |
182 | 182 | zfcp_erp_wait(unit->port->adapter); |
183 | - wait_event(unit->scsi_scan_wq, | |
184 | - atomic_test_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, | |
185 | - &unit->status) == 0); | |
186 | 183 | atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); |
187 | 184 | sdpnt->hostdata = NULL; |
188 | 185 | unit->device = NULL; |