]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 06:46:24 +0000 (08:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 06:46:24 +0000 (08:46 +0200)
added patches:
xen-netfront-fix-hang-on-device-removal.patch

queue-4.9/series
queue-4.9/xen-netfront-fix-hang-on-device-removal.patch [new file with mode: 0644]

index 8833927ce32221d6ba57086f4c3b0409d05fdfef..6a6b86465ac58a2d6773a03ce23f2f8002612477 100644 (file)
@@ -13,3 +13,4 @@ arm-dts-at91-at91sam9g25-fix-mux-mask-pinctrl-property.patch
 arm-dts-exynos-fix-iommu-support-for-gscaler-devices-on-exynos5250.patch
 arm-dts-at91-sama5d4-fix-pinctrl-compatible-string.patch
 spi-fix-scatterlist-elements-size-in-spi_map_buf.patch
+xen-netfront-fix-hang-on-device-removal.patch
diff --git a/queue-4.9/xen-netfront-fix-hang-on-device-removal.patch b/queue-4.9/xen-netfront-fix-hang-on-device-removal.patch
new file mode 100644 (file)
index 0000000..63c24e1
--- /dev/null
@@ -0,0 +1,54 @@
+From c2d2e6738a209f0f9dffa2dc8e7292fc45360d61 Mon Sep 17 00:00:00 2001
+From: Jason Andryuk <jandryuk@gmail.com>
+Date: Wed, 28 Feb 2018 07:23:23 -0500
+Subject: xen-netfront: Fix hang on device removal
+
+From: Jason Andryuk <jandryuk@gmail.com>
+
+commit c2d2e6738a209f0f9dffa2dc8e7292fc45360d61 upstream.
+
+A toolstack may delete the vif frontend and backend xenstore entries
+while xen-netfront is in the removal code path.  In that case, the
+checks for xenbus_read_driver_state would return XenbusStateUnknown, and
+xennet_remove would hang indefinitely.  This hang prevents system
+shutdown.
+
+xennet_remove must be able to handle XenbusStateUnknown, and
+netback_changed must also wake up the wake_queue for that state as well.
+
+Fixes: 5b5971df3bc2 ("xen-netfront: remove warning when unloading module")
+
+Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
+Cc: Eduardo Otubo <otubo@redhat.com>
+Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/xen-netfront.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/xen-netfront.c
++++ b/drivers/net/xen-netfront.c
+@@ -2038,7 +2038,10 @@ static void netback_changed(struct xenbu
+       case XenbusStateInitialised:
+       case XenbusStateReconfiguring:
+       case XenbusStateReconfigured:
++              break;
++
+       case XenbusStateUnknown:
++              wake_up_all(&module_unload_q);
+               break;
+       case XenbusStateInitWait:
+@@ -2169,7 +2172,9 @@ static int xennet_remove(struct xenbus_d
+               xenbus_switch_state(dev, XenbusStateClosing);
+               wait_event(module_unload_q,
+                          xenbus_read_driver_state(dev->otherend) ==
+-                         XenbusStateClosing);
++                         XenbusStateClosing ||
++                         xenbus_read_driver_state(dev->otherend) ==
++                         XenbusStateUnknown);
+               xenbus_switch_state(dev, XenbusStateClosed);
+               wait_event(module_unload_q,