Inside xenbus_switch_state, don't write the new state if the node has already

disappeared.  This happens when the driver is being torn down, and we don't
want to resurrect the device directory in the store because of it.

Partially addresses bug #424.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
emellor@leeni.uk.xensource.com committed 2005-11-23 18:47:54 +00:00
1 parent d29719d231
commit 034f2cd52e
1 file changed
+5 -2
@@ -97,14 +97,17 @@ int xenbus_switch_state(struct xenbus_device *dev,
/* We check whether the state is currently set to the given value, and
if not, then the state is set. We don't want to unconditionally
write the given state, because we don't want to fire watches
unnecessarily.
unnecessarily. Furthermore, if the node has gone, we don't write
to it, as the device will be tearing down, and we don't want to
resurrect that directory.
*/
int current_state;
int err = xenbus_scanf(xbt, dev->nodename, "state", "%d",
&current_state);
if (err == 1 && (XenbusState)current_state == state)
if ((err == 1 && (XenbusState)current_state == state) ||
err == -ENOENT)
return 0;
err = xenbus_printf(xbt, dev->nodename, "state", "%d", state);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.