From: Paolo Bonzini <pbonzini@redhat.com>
Date: Tue, 14 Oct 2014 23:52:33 +0000 (+1030)
Subject: virito_scsi: use freezable WQ for events
X-Git-Tag: v3.18-rc1~28^2~4
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1fa5b2a784dc52d929432bcc963a0bfb3a74608f;p=users%2Fjedix%2Flinux-maple.git

virito_scsi: use freezable WQ for events

Michael S. Tsirkin noticed a race condition:
we reset device on freeze, but system WQ is still
running so it might try adding bufs to a VQ meanwhile.

To fix, switch to handling events from the freezable WQ.

Reported-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 6a39896b30dc4..29fd44a5d4ddc 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -390,7 +390,7 @@ static void virtscsi_complete_event(struct virtio_scsi *vscsi, void *buf)
 {
 	struct virtio_scsi_event_node *event_node = buf;
 
-	schedule_work(&event_node->work);
+	queue_work(system_freezable_wq, &event_node->work);
 }
 
 static void virtscsi_event_done(struct virtqueue *vq)