linux/drivers/firewire
Stefan Richter 14dc992aa7 firewire: fw-sbp2: try to increase reconnect_hold (speed up reconnection)
Ask the target to grant 4 seconds instead of the standard and minimum of
1 second window after bus reset for reconnection.  This accelerates
reconnection if there are more than one targets on the bus:  If a login
and inquiry to one target blocks the fw-sbp2 workqueue for more than 1s
after bus reset, we now still can reconnect to the other target.

Before that, fw-sbp2's reconnect attempts would be rejected with "error
status: 0:9" (function rejected), and fw-sbp2 would finally re-login.
All those futile reconnect attemps cost extra time until the target
which needs re-login is ready for I/O again.

The reconnect timeout field in the login ORB doesn't have to be honored
by the target though.  I found that we could get up to
  - allegedly 32768s from an old OXFW911 firmware
  - 256s from LSI bridges
  - 4s from OXUF922 and OXFW912 bridges,
  - 2s from TI bridges,
  - only the standard 1s from Initio and Prolific bridges and from
    Apple OpenFirmware in target mode.

We just try to get 4 seconds which already covers the case of a few
HDDs on the same bus quite nicely.

A minor drawback occurs in the following (rare and impractical) border
case:
  - two initiators are there, initiator 1 holds an exclusive login to
    a target,
  - initiator 1 goes off the bus,
  - target refuses login attempts from initiator 2 until reconnect_hold
    seconds after bus reset.

An alternative approach to the issue at hand would be to parallelize
fw-sbp2's reconnect and login work.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Acked-by: Jarod Wilson <jwilson@redhat.com>
2008-01-30 22:22:26 +01:00
..
Kconfig firewire: point to migration document 2007-10-07 13:48:41 +02:00
Makefile firewire: prefix modules with firewire- instead of fw- 2007-05-27 23:21:01 +02:00
fw-card.c firewire: fix unloading of fw-ohci while devices are attached 2007-08-25 18:00:27 +02:00
fw-cdev.c firewire: fw-cdev: reorder wakeup vs. spinlock 2007-10-17 00:00:10 +02:00
fw-device.c Driver core: change add_uevent_var to use a struct 2007-10-12 14:51:01 -07:00
fw-device.h firewire: fw-sbp2: add support for multiple logical units per target 2007-10-17 00:00:03 +02:00
fw-iso.c firewire: Clean up comment style. 2007-05-10 18:24:13 +02:00
fw-ohci.c firewire: fw-ohci: Dynamically allocate buffers for DMA descriptors 2008-01-30 22:22:24 +01:00
fw-ohci.h firewire: fw-ohci: check for misconfigured bus (phyID == 63) 2007-10-17 00:00:08 +02:00
fw-sbp2.c firewire: fw-sbp2: try to increase reconnect_hold (speed up reconnection) 2008-01-30 22:22:26 +01:00
fw-topology.c firewire: in-code doc updates. 2007-10-17 00:00:09 +02:00
fw-topology.h firewire: a header cleanup 2007-10-17 00:00:09 +02:00
fw-transaction.c firewire: Fix extraction of source node id 2008-01-30 22:22:24 +01:00
fw-transaction.h firewire: fw-sbp2: set correct maximum payload (fixes CardBus adapters) 2007-08-02 20:34:16 +02:00