summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Durrant <pdurrant@amazon.com>2019-12-17 16:32:17 +0300
committerDavid S. Miller <davem@davemloft.net>2019-12-18 10:03:33 +0300
commitf55c3188df84248558f33b13bba4c2817dda78a7 (patch)
treeb145c129fa3e750393c250aab873111544ba5c84
parent92fbeb43b6c44fb03e024c4c5b9f3d6b8ebd0cf0 (diff)
downloadlinux-f55c3188df84248558f33b13bba4c2817dda78a7.tar.xz
xen-netback: switch state to InitWait at the end of netback_probe()...
...as the comment above the function states. The switch to Initialising at the start of the function is somewhat bogus as the toolstack will have set that initial state anyway. To behave correctly, a backend should switch to InitWait once it has set up all xenstore values that may be required by a initialising frontend. This patch calls backend_switch_state() to make the transition at the appropriate point. NOTE: backend_switch_state() ignores errors from xenbus_switch_state() and so this patch removes an error path from netback_probe(). This means a failure to change state at this stage (in the absence of other failures) will leave the device instantiated. This is highly unlikley to happen as a failure to change state would indicate a failure to write to xenstore, and that will trigger other error paths. Also, a 'stuck' device can still be cleaned up using 'unbind' in any case. Signed-off-by: Paul Durrant <pdurrant@amazon.com> Acked-by: Wei Liu <wei.liu@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/xen-netback/xenbus.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
index bb61316d79de..682e5e20971b 100644
--- a/drivers/net/xen-netback/xenbus.c
+++ b/drivers/net/xen-netback/xenbus.c
@@ -992,11 +992,6 @@ static int netback_probe(struct xenbus_device *dev,
be->dev = dev;
dev_set_drvdata(&dev->dev, be);
- be->state = XenbusStateInitialising;
- err = xenbus_switch_state(dev, XenbusStateInitialising);
- if (err)
- goto fail;
-
sg = 1;
do {
@@ -1098,6 +1093,8 @@ static int netback_probe(struct xenbus_device *dev,
if (err)
pr_debug("Error writing feature-ctrl-ring\n");
+ backend_switch_state(be, XenbusStateInitWait);
+
script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL);
if (IS_ERR(script)) {
err = PTR_ERR(script);