xen-netback: remove 'hotplug-status' once it has served its purpose
authorPaul Durrant <pdurrant@amazon.com>
Tue, 17 Dec 2019 13:32:18 +0000 (13:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Dec 2019 07:03:33 +0000 (23:03 -0800)
Removing the 'hotplug-status' node in netback_remove() is wrong; the script
may not have completed. Only remove the node once the watch has fired and
has been unregistered.

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>
drivers/net/xen-netback/xenbus.c

index 682e5e20971b1002d9ce948d90bb8035598822a6..17b4950ec051f4e6d9a12936cee2874a9965f25d 100644 (file)
@@ -648,6 +648,7 @@ static void hotplug_status_changed(struct xenbus_watch *watch,
 
                /* Not interested in this watch anymore. */
                unregister_hotplug_status_watch(be);
+               xenbus_rm(XBT_NIL, be->dev->nodename, "hotplug-status");
        }
        kfree(str);
 }
@@ -959,7 +960,6 @@ static int netback_remove(struct xenbus_device *dev)
        if (be->vif) {
                kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
                xen_unregister_watchers(be->vif);
-               xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
                xenvif_free(be->vif);
                be->vif = NULL;
        }