Re: [PATCH v2] virtio-balloon: do not call blocking ops when !TASK_RUNNING
From: Rusty Russell <hidden>
Date: 2015-03-10 03:16:36
Also in:
kvm, lkml, stable
Thomas Huth [off-list ref] writes:
On Wed, 25 Feb 2015 16:11:27 +0100 Cornelia Huck [off-list ref] wrote:quoted
On Wed, 25 Feb 2015 15:36:02 +0100 "Michael S. Tsirkin" [off-list ref] wrote:quoted
virtio balloon has this code: wait_event_interruptible(vb->config_change, (diff = towards_target(vb)) != 0 || vb->need_stats_update || kthread_should_stop() || freezing(current)); Which is a problem because towards_target() call might block after wait_event_interruptible sets task state to TAST_INTERRUPTIBLE, causing the task_struct::state collision typical of nesting of sleeping primitives See also http://lwn.net/Articles/628628/ or Thomas's bug report http://article.gmane.org/gmane.linux.kernel.virtualization/24846 for a fuller explanation. To fix, rewrite using wait_woken. Cc: stable@vger.kernel.org Reported-by: Thomas Huth <redacted> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> --- changes from v1: remove wait_event_interruptible noticed by Cornelia Huck [off-list ref] drivers/virtio/virtio_balloon.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)I was able to reproduce Thomas' original problem and can confirm that it is gone with this patch. Reviewed-by: Cornelia Huck <redacted>Right, I just applied the patch on my system, too, and the problem is indeed gone! Thanks for the quick fix! Tested-by: Thomas Huth <redacted>
Applied. Thanks, Rusty.