firewire: keep highlevel drivers attached during brief connection loss
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Sat, 17 Jan 2009 21:45:54 +0000 (22:45 +0100)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 20 Jan 2009 18:29:52 +0000 (19:29 +0100)
commit3d36a0df3b473fb53531484df227f2da8bc7494b
treef0fcb758c8e68f1e5389ccd895d98efcc55ed0e8
parent8cd0bbbdff7471163cc6a058be8b8610ddd01d6b
firewire: keep highlevel drivers attached during brief connection loss

There are situations when nodes vanish from the bus and come back
quickly thereafter:
  - When certain bus-powered hubs are plugged in,
  - when certain devices are plugged into 6-port hubs,
  - when certain disk enclosures are switched from self-power to bus
    power or vice versa and break the daisy chain during the transition,
  - when the user plugs a cable out and quickly plugs it back in, e.g.
    to reorder a daisy chain (works on Mac OS X if done quickly enough),
  - when certain hubs temporarily malfunction during high bus traffic.

Until now, firewire-core reported affected nodes as lost to the
highlevel drivers (firewire-sbp2 and userspace drivers).  We now delay
the destruction of device representations until after at least two
seconds after the last bus reset.  If a "new" device is detected in this
period whose bus information block and root directory header match that
of a device which is pending for deletion, we resurrect that device and
send update calls to highlevel drivers.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/fw-device.c
drivers/firewire/fw-device.h