]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
xen: netback: read hotplug script once at start of day.
authorIan Campbell <Ian.Campbell@citrix.com>
Mon, 1 Jun 2015 10:30:24 +0000 (11:30 +0100)
committerJiri Slaby <jslaby@suse.cz>
Wed, 10 Jun 2015 09:18:15 +0000 (11:18 +0200)
commit8efd02c4eb48212294315514411a6e7a7e57e4da
tree9015cab89371ecba2e367d8d2bb46642fee8f336
parenta97b54dd69cb05df4c57f5d5b40c761f7835ce4e
xen: netback: read hotplug script once at start of day.

[ Upstream commit 31a418986a5852034d520a5bab546821ff1ccf3d ]

When we come to tear things down in netback_remove() and generate the
uevent it is possible that the xenstore directory has already been
removed (details below).

In such cases netback_uevent() won't be able to read the hotplug
script and will write a xenstore error node.

A recent change to the hypervisor exposed this race such that we now
sometimes lose it (where apparently we didn't ever before).

Instead read the hotplug script configuration during setup and use it
for the lifetime of the backend device.

The apparently more obvious fix of moving the transition to
state=Closed in netback_remove() to after the uevent does not work
because it is possible that we are already in state=Closed (in
reaction to the guest having disconnected as it shutdown). Being
already in Closed means the toolstack is at liberty to start tearing
down the xenstore directories. In principal it might be possible to
arrange to unregister the device sooner (e.g on transition to Closing)
such that xenstore would still be there but this state machine is
fragile and prone to anger...

A modern Xen system only relies on the hotplug uevent for driver
domains, when the backend is in the same domain as the toolstack it
will run the necessary setup/teardown directly in the correct sequence
wrt xenstore changes.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/net/xen-netback/xenbus.c