xenbus: Make xenbus_switch_state transactional
authorDaniel Stodden <daniel.stodden@citrix.com>
Fri, 30 Apr 2010 22:01:15 +0000 (22:01 +0000)
committerJens Axboe <jaxboe@fusionio.com>
Sat, 7 Aug 2010 16:31:34 +0000 (18:31 +0200)
commit5b61cb90c2ad8c853b4dd53eec200bacd2f02172
treed518fde8701ce437ac87ee36732401fc115e9d7b
parent2def141e71d54eccac98dc2c2ba71a82c91b324e
xenbus: Make xenbus_switch_state transactional

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: Daniel Stodden <daniel.stodden@citrix.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
drivers/xen/xenbus/xenbus_client.c