firewire: fw-sbp2: don't add scsi_device twice
When a reconnect failed but re-login succeeded, __scsi_add_device was called again. In those cases, __scsi_add_device succeeded and returned the pointer to the existing scsi_device. fw-sbp2 then continued orderly, except that it missed to call sbp2_cancel_orbs. SCSI core would call fw-sbp2's eh_abort_handler eventually if there had been an outstanding command. This patch avoids the needless lookups and temporary allocations in SCSI core and I/O stall and timeout until eh_abort_handler hits. Also, __scsi_add_device tolerating calls for devices which already exist is undocumented behavior on which we shouldn't rely. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Jarod Wilson <jwilson@redhat.com>
This commit is contained in:
parent
48f18c761c
commit
0fa6dfdb0a
1 changed files with 6 additions and 0 deletions
|
@ -741,6 +741,12 @@ static void sbp2_login(struct work_struct *work)
|
|||
PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
|
||||
sbp2_agent_reset(lu);
|
||||
|
||||
/* This was a re-login. */
|
||||
if (lu->sdev) {
|
||||
sbp2_cancel_orbs(lu);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
|
||||
ssleep(SBP2_INQUIRY_DELAY);
|
||||
|
||||
|
|
Loading…
Reference in a new issue