From e7b9c24c7c8a435429cf83d3d31b91cef53c27a5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 Jul 2017 09:26:00 +0200 Subject: [PATCH] 4.9-stable patches added patches: xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch --- queue-4.9/series | 1 + ...xen_blkif_get-in-xen-blkback-kthread.patch | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 queue-4.9/xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch diff --git a/queue-4.9/series b/queue-4.9/series index 7d8218b6713..df859de7613 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -27,3 +27,4 @@ netfilter-xt_tcpmss-add-more-sanity-tests-on-tcph-doff.patch netfilter-synproxy-fix-conntrackd-interaction.patch nfsv4-fix-a-reference-leak-caused-warning-messages.patch nfsv4.x-callback-create-the-callback-service-through-svc_create_pooled.patch +xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch diff --git a/queue-4.9/xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch b/queue-4.9/xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch new file mode 100644 index 00000000000..82186e6bad3 --- /dev/null +++ b/queue-4.9/xen-blkback-don-t-use-xen_blkif_get-in-xen-blkback-kthread.patch @@ -0,0 +1,61 @@ +From a24fa22ce22ae302b3bf8f7008896d52d5d57b8d Mon Sep 17 00:00:00 2001 +From: Juergen Gross +Date: Thu, 18 May 2017 17:28:49 +0200 +Subject: xen/blkback: don't use xen_blkif_get() in xen-blkback kthread +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Juergen Gross + +commit a24fa22ce22ae302b3bf8f7008896d52d5d57b8d upstream. + +There is no need to use xen_blkif_get()/xen_blkif_put() in the kthread +of xen-blkback. Thread stopping is synchronous and using the blkif +reference counting in the kthread will avoid to ever let the reference +count drop to zero at the end of an I/O running concurrent to +disconnecting and multiple rings. + +Setting ring->xenblkd to NULL after stopping the kthread isn't needed +as the kthread does this already. + +Signed-off-by: Juergen Gross +Tested-by: Steven Haigh +Acked-by: Roger Pau Monné +Signed-off-by: Konrad Rzeszutek Wilk +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/block/xen-blkback/blkback.c | 3 --- + drivers/block/xen-blkback/xenbus.c | 1 - + 2 files changed, 4 deletions(-) + +--- a/drivers/block/xen-blkback/blkback.c ++++ b/drivers/block/xen-blkback/blkback.c +@@ -609,8 +609,6 @@ int xen_blkif_schedule(void *arg) + unsigned long timeout; + int ret; + +- xen_blkif_get(blkif); +- + set_freezable(); + while (!kthread_should_stop()) { + if (try_to_freeze()) +@@ -665,7 +663,6 @@ purge_gnt_list: + print_stats(ring); + + ring->xenblkd = NULL; +- xen_blkif_put(blkif); + + return 0; + } +--- a/drivers/block/xen-blkback/xenbus.c ++++ b/drivers/block/xen-blkback/xenbus.c +@@ -255,7 +255,6 @@ static int xen_blkif_disconnect(struct x + if (ring->xenblkd) { + kthread_stop(ring->xenblkd); + wake_up(&ring->shutdown_wq); +- ring->xenblkd = NULL; + } + + /* The above kthread_stop() guarantees that at this point we -- 2.47.3