• Stefan Richter's avatar
    ieee1394: survive a few seconds connection loss · fc392fe8
    Stefan Richter authored
    There are situations when nodes vanish from the bus and come back in
    quickly thereafter:
      - When certain bus-powered hubs are plugged in,
      - 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.
    
    The ieee1394 driver's nodemgr already contained a function to set
    vanished nodes aside into "limbo"; i.e. they wouldn't actually be
    deleted right away.  (In fact, only unloading the driver or writing into
    an obscure sysfs attribute would delete them eventually.)  If nodes
    reappeared later, they would be resurrected out of limbo.
    
    Moving nodes into and out of limbo was accompanied with calling the
    .suspend() and .resume() driver methods of the drivers which were bound
    to a respective node's unit directories.  Not only is this somewhat
    strange due to the intended use of these driver methods for power
    management, also the sbp2 driver in particular does not implement
    .suspend() and .resume().  Hence sbp2 would be disconnected from devices
    in situations as listed above.
    
    We now:
      - leave drivers bound when nodes go into limbo,
      - call the drivers' .update() when nodes come out of limbo,
      - automatically delete in-limbo nodes 3 seconds after the last
        bus reset and bus rescan.
      - Because of the automatic removal, the now obsolete bus attribute
        /sys/bus/ieee1394/destroy_node is removed.
    
    This especially lets sbp2 survive brief disconnections.  You can for
    example yank a disk's cable and plug it back in while reading the
    respective disk with dd, but dd will happily continue as if nothing
    happened.
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    fc392fe8
nodemgr.c 51.4 KB