• Daniel Stodden's avatar
    xenbus: Make xenbus_switch_state transactional · 5b61cb90
    Daniel Stodden authored
    According to the comments, this was how it's been done years ago, but
    apparently took an xbt pointer from elsewhere back then. The code was
    removed because of consistency issues: cancellation wont't roll back
    the saved xbdev->state.
    
    Still, unsolicited writes to the state field remain an issue,
    especially if device shutdown takes thread synchronization, and subtle
    races cause accidental recreation of the device node.
    
    Fixed by reintroducing the transaction. An internal one is sufficient,
    so the xbdev->state value remains consistent.
    
    Also fixes the original hack to prevent infinite recursion. Instead of
    bailing out on the first attempt to switch to Closing, checks call
    depth now.
    Signed-off-by: default avatarDaniel Stodden <daniel.stodden@citrix.com>
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    5b61cb90
xenbus_client.c 17 KB